maven shade插件配置,用于创建uber jar,其中仅包含基于相同groupid的子模块

aiazj4mn  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(313)

有下列情形:
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 项目可以是单个模块,也可以是多模块

taor4pac

taor4pac1#

您可以在主项目下面创建一个与其他模块相关的打包jar模块,并且只包含shade插件配置

相关问题