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

mzsu5hc0  于 2022-12-11  发布在  Maven
关注(0)|答案(1)|浏览(140)

我有一个相当大的java maven项目,有超过200个模块,它是确定的,因为是。我试图合并所有这些模块到一个单一的jar。
在某些情况下,在新项目中只声明一个新的maven依赖项(例如my-library-5.2.4-SNAPSHOT-bundle.jar或类似的东西)会非常方便。
我尝试过使用maven assembly-plugin。我可以创建新的jar文件,jar包含所有模块jar,如果我安装它,它会正确地进入本地.m2文件夹。Jar可以在其他项目中声明为依赖项。
但问题是我不能导入我的java类库中的任何模块,导入时无法识别这些模块。
我已经将这个构建部分添加到我的根pom.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>

我的assembly.xml如下所示:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>bundle</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
            <binaries>
                <outputDirectory>modules</outputDirectory>
                <unpack>false</unpack>
            </binaries>
        </moduleSet>
    </moduleSets>
</assembly>
jk9hmnmh

jk9hmnmh1#

Maven实践:
父模块是你定义所有子模块共同使用的依赖项和插件的地方。它不应该有自己的输出。
您应该使用“distribution”子模块来聚合所有其他模块工件,而不是尝试在父模块中这样做。
比如说--
一般为所有项目创建一个简单的父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>

相关问题