如何从具有多个子模块的maven项目创建单个库jar?

时间:2016-05-16 12:30:34

标签: java maven jar maven-assembly-plugin maven-dependency

我有一个超过200个模块的相当大的java maven项目,它是可以的。我试图将所有这些模块合并到单个jar中。

在某些情况下,宣布一个新的maven依赖是非常方便的,例如。 my-library-5.2.4-SNAPSHOT-bundle.jar或类似的新项目。

我曾尝试使用maven assembly-plugin。我可以创建新的jar文件,jar包含所有模块jar,如果我安装它,它会正确到本地.m2文件夹。 Jar可以在其他项目中声明为依赖。

但问题是我无法在我的java类中导入库中的任何模块。导入将无法识别这些。

我已将此构建部分添加到我的root pom.xml:

if (p <0 || p >1) {
    throw new Exception()
}

我的assembly.xml看起来像这样:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>make-bundle</id>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <descriptors>
                            <descriptor>assembly.xml</descriptor>
                        </descriptors>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1 个答案:

答案 0 :(得分:0)

Maven做法:

父模块是您定义所有子模块共同使用的依赖项和插件的地方。它不应该有自己的输出。

您应该使用聚合所有其他模块工件的“分发”子模块,而不是尝试在父模块中执行此操作。

例如 -

为所有项目创建一个简单的父pom文件项目(包装'pom')

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>my.library</groupId>
    <artifactId>my-library-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>site</id>
            <url>http://url_id</url>
        </repository>
    </distributionManagement>

</project>

现在,对于您希望使用它的所有项目,只需包含以下部分:

<parent>
  <groupId>my.library</groupId>
  <artifactId>my-library-parent</artifactId>
  <version>1.0.0</version>
</parent>