有下列情形:
sts公司
java
Maven
机器一
工作区-01
带有maven的java应用程序基于单个模块。已安装( mvn install
)在存储库和 master-project.jar
文件在其他机器上是如何安装并用于其他项目的
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
在这里之前一切正常
工作区-02
应用程序长大了,在其他工作区中,应用程序被迁移到多个模块中
为了简单起见,我们假设以下结构
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
文件包括子模块如何内部jars。
进行研究后,解决方案是: maven-shade-plugin
maven shade插件的用途是什么?为什么要重新定位java包?
我有以下配置(部分)使用如何引用以下链接和其他源:
在maven多模块包中创建jar文件作为聚合
因此:
<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
文件,一个子模块本身和uberjar的另一个子模块(每个模块都是)
目标:生成以下内容的额外或缺少的配置是什么:
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>
并观察到根/主 pom.xml
文件有 <packaging>pom</packaging>
###目标
因此,目标是位于另一台机器中的另一个项目保持和平
<dependency>
<groupId>com.manuel.jordan</groupId>
<artifactId>master-project</artifactId>
<version>0.0.1.SNAPSHOT</version>
</dependency>
因此,如果 master-project
项目可以是单个模块,也可以是多模块
1条答案
按热度按时间taor4pac1#
您可以在主项目下面创建一个与其他模块相关的打包jar模块,并且只包含shade插件配置