【发布时间】:2020-12-07 23:11:10
【问题描述】:
有以下情况:
- STS
- Java
- 马文
一号机
工作区-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
我有以下配置(部分)使用如何参考以下链接和其他来源:
因此:
<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>
并观察根/主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
【问题讨论】:
-
你可以在你的主项目下面创建一个打包 jar 模块,并依赖于其他模块,并且只包含 shade 插件配置
-
对了,写的怎么解决我身边的标记
标签: java maven maven-3 maven-shade-plugin