【问题标题】:How to include only one dependency project classes in final jar如何在最终 jar 中仅包含一个依赖项目类
【发布时间】:2014-02-09 13:08:00
【问题描述】:

我使用 Maven 构建我的 MyProject。还有几个其他项目用作“MyProject”的库项目。

MyProjectpom.xml 中,我将这些库项目定义为MyProject 的依赖项。图书馆项目之一被命名为“OneLibProject”:

<dependency>
    <groupId>com.xxx.OneLibProject</groupId>
    <artifactId>OneLibProject</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <type>jar</type>
</dependency>
<dependency>
  ...
</dependency>

MyProject根路径下,我运行后:maven clean install会生成一个MyProject.jar。但是在库项目(依赖项)中定义的那些类不包含在这个MyProject.jar中。

每个库项目也有自己的 pom & 可以生成自己的 jar。

现在,我想做的是我想在“MyProject”中配置我的 pom.xml,以便生成的 MyProject.jar 文件包含OneLibProject 的类和MyProject 的类。 不包括其他库项目类

如何做到这一点?

【问题讨论】:

  • google jar-with-dependencies
  • @BenjaminDale 虽然没有真正接受任何答案。但要为我的评论增加一些价值 - 如果你有一个战争项目 maven 提供a way to create skinny war-files
  • @RomanVottner 很好,我想我不知道这一点。我将把它用于未来的 Maven 构建的战争文件:D

标签: java eclipse maven


【解决方案1】:

您可以使用 maven-assembly-plugin 并在程序集描述符的 dependencySet 部分中配置要包含在 jar 中的依赖项。

假设您有项目 y 和 z。将此插件添加到你的 pom 中

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptor>src/main/assembly/assembly.xml</descriptor>
            </configuration>
        </plugin>

将此 assembly.xml 放在 scr/main/assembly

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>runtime</scope>
            <includes>
                <include>test:y</include>
                <include>test:z</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>

在 z 中运行 mvn install

运行 mvn package 程序集:y 中的程序集

如果一切正确,您将在目标文件夹中获得 y-0.0.1-SNAPSHOT-jar-with-dependencies.jar。它将仅包含 y 和 x 类。

【讨论】:

  • 请提供样品好吗?
  • 我将所有依赖项的类都包含在一个 jar 中,这不是我想要的。我只需要包含一个依赖项的类。
  • 测试是groupid吗?
猜你喜欢
  • 2016-06-04
  • 2023-03-27
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多