具有以下情况:
带有Maven的Java应用基于单个模块。
它已安装(mvn install
)在资源库中,而master-project.jar
文件已安装在其他计算机中并用于其他项目。
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
直到这里一切正常
该应用成长,并且在其他工作空间中,该应用已迁移为可以与多模块
一起使用为简单起见,假设采用以下结构
master-project (<packaging>pom</packaging>)
alpha (<packaging>jar</packaging>)
beta (<packaging>jar</packaging>)
numbers (<packaging>pom</packaging>)
one (<packaging>jar</packaging>)
two (<packaging>jar</packaging>)
countries (<packaging>pom</packaging>)
Europe (<packaging>pom</packaging>)
France (<packaging>jar</packaging>)
Italy (<packaging>jar</packaging>)
AmericaLatina (<packaging>pom</packaging>)
Peru (<packaging>jar</packaging>)
Argentina (<packaging>jar</packaging>)
我能够编译所有这些模块。因此,构建成功
现在的目标是生成相同的master-project.jar
文件,其中包括子模块内部jar的方式。
研究之后,解决方案是:maven-shade-plugin
我具有以下配置(部分配置),使用以下链接和其他来源的方式进行引用:
因此:
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging> <--- it is the main or root pom.xml file
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
....
</properties>
<dependencies>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>${hazelcast.version}</version>
<scope>provided</scope> <!-- Otherwise each uber jar within each submodule is 11.6MB -->
</dependency>
</dependencies>
<modules>
<module>...</module>
...
</modules>
<build>
<plugins>
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<id>create-fat-jar</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>com.manuel.jordan</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在当前配置下,会发生以下情况:
对于target
目录中的每个模块:
<packaging>pom</packaging>
生成一个.pom
文件<packaging>jar</packaging>
生成两个.jar
文件,其中一个子模块本身,另一个用于uber jar(每个模块是)目标:生成这样的东西的额外或缺失的配置是什么:
master-project.jar containing
module1.jar
module2.jar
...
module3.jar
每个module#
都有相同的<groupId>com.manuel.jordan</groupId>
声明,这就是我声明的原因
<configuration>
<artifactSet>
<includes>
<include>com.manuel.jordan</include>
</includes>
</artifactSet>
</configuration>
并观察到根{main} pom.xml
主文件具有<packaging>pom</packaging>
因此,目标是使位于另一台计算机中的另一个项目保持和平
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
因此,master-project
项目是 single 还是 multi-module
答案 0 :(得分:1)
您可以在主项目下创建一个与其他模块相关的包装jar模块,并仅在其中包含shade插件配置