如何在最终jar中只包含一个依赖项目类

时间:2014-01-20 11:23:25

标签: java eclipse maven

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

MyProject pom.xml 中,我将这些库项目定义为MyProject的依赖项。其中一个Library项目名为“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&amp;可以生成自己的jar。

现在,我想要做的是我希望配置“MyProject”中的 pom.xml ,以便生成的 MyProject.jar file包含OneLibProject的类和MyProject的类。 不包括其他图书馆项目类

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

假设你有项目y和z。将此插件添加到y的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包程序集:y中的程序集

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