在Maven多模块包中创建JAR文件作为聚合

瓦夸尔汗

我有以下架构

在此处输入图片说明

现在,如果我要建立亲子关系并首先建立孩子和父母结束,它将可以正常工作

<packaging>jar</packaging>

要求 :

我需要具有以下功能的包装:

在父项目“ A”上运行命令-mvn clean install package等首先创建Jar“ B”,“ C”,“ D”,然后创建Jar“ A”,然后在Jar中添加“ B”,“ C”,“ D” jar一种

当我添加模块时

  <modules>
        <module>../B</module>
         <module>../C</module>
         <module>../D</module>
    </modules> 

然后行军添加

<packaging>pom</packaging>

装的

<packaging>jar</packaging>

问题 :

当我添加包装球时,罐子“ A”不会撕裂

所以我试图创建一个超级pom

在此处输入图片说明

POM超级版:

   <packaging>pom</packaging>

    <modules>
        <module>../A</module>

    </modules> 

POM A:

   <parent>
        <groupId>com.khan.vaquar</groupId>
        <artifactId>Super</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> 
    </parent>

<packaging>pom</packaging>

 <modules>
        <module>../B</module>
         <module>../C</module>
         <module>../D</module>
    </modules> 


<dependencies>

        <!-- B -->
         <dependency>
            <groupId>com.khan.vaquar</groupId>
            <artifactId>B</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency> 
        <!-- C -->
         <dependency>
            <groupId>com.khan.vaquar</groupId>
            <artifactId>C</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency> 
        <!-- D-->
        <dependency>
            <groupId>com.khan.vaquar</groupId>
            <artifactId>D</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency> 
        <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

POM B:

<packaging>jar</packaging>
   <parent>
        <groupId>com.khan.vaquar</groupId>
        <artifactId>A</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> 
    </parent>

POM C:

<packaging>jar</packaging>
   <parent>
        <groupId>com.khan.vaquar</groupId>
        <artifactId>A</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

POM D:

<packaging>jar</packaging>

<parent>
        <groupId>com.khan.vaquar</groupId>
        <artifactId>A</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/>
    </parent>

问题:如果我们要添加模块,Maven不允许添加jar,所以我如何将子jar添加到父jar中并创建build。

诺曼·汗

要从多个模块创建胖子,您可以在A项目中使用maven-shade-plugin

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <id>create-fat-jar</id>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                <!-- add Main-Class to manifest file -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.nk.test.Application</mainClass>
                    </transformer>
                </transformers>
                    <finalName>A</finalName>
            </configuration>
        </execution>
    </executions>
</plugin>

对于您的示例,您可以创建结构为

父模块

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.nk.test</groupId>
  <artifactId>P</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
   <module>../C</module>
   <module>../B</module>
   <module>../A</module>
  </modules>

</project>

以maven-shade-plugin和项目B&C作为依赖项的核心项目A

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.nk.test</groupId>
  <artifactId>A</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
   <dependency>
   <artifactId>B</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <groupId>com.nk.test</groupId>
   </dependency>
     <dependency>
   <artifactId>C</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <groupId>com.nk.test</groupId>
   </dependency>
  </dependencies>

  <build>
   <plugins>
   **<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <id>create-fat-jar</id>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                <!-- add Main-Class to manifest file -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.nk.test.Application</mainClass>
                    </transformer>
                </transformers>
                    <finalName>A</finalName>
            </configuration>
        </execution>
    </executions>
</plugin>**
   </plugins>
  </build>
</project>

依赖模块B

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.nk.test</groupId>
  <artifactId>B</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

从属模块C

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.nk.test</groupId>
  <artifactId>C</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

在父项目上运行maven install。

这将导致名为A.jar的Fat罐具有BC作为依赖关系。

您可以在以下位置找到示例:https : //github.com/nomanbplmp/maven-multimodule-fat-jar

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有子模块作为jar文件的Maven多模块

为maven多模块项目中的模块创建jar

构建Maven多模块时出错-jar文件

多模块 Maven 项目 - 在 jar 中包含测试 bean

在单个jar中组装多模块Maven项目

从Maven创建jar文件

Maven的多模块依赖包未找到

来自具有相同名称的不同maven模块的文件不能共存于使用maven程序集插件创建的jar文件中

Maven多模块:子模块作为依赖项

使用Eclipse创建Maven多模块项目

为什么使用maven-assembly-plugin为多模块maven项目创建可执行jar,显示classnotfound错误

如何为特定的包Maven创建jar

使Maven复制构建jar中的其他文件(不是资源,而是任何包中的任何文件)?

jar 文件中的奇怪包

如何使用包结构创建jar文件?

如何在Azure Devops中为多模块Maven创建构建管道

Maven:从一个较大的项目包中创建一个jar

如何从多模块Maven项目构建可执行jar?

Eclipse中的Maven多模块项目链接

Java Maven中的多模块项目管理

在Eclipse中重构Maven多模块项目

在聚合根不是父pom的多模块Maven项目中更新模块的版本号

Maven:将多个模块jar组合到一个war文件中?

Eclipse中具有概要文件的多模块Maven不能解决对子级的依赖

多模块项目属性扩展中的Maven构建配置文件

最终jar中src / main下的Maven包资源文件夹

为多模块gradle项目创建单个源jar

在Spring Boot多模块Maven项目的子包中@Controller,@RestController和@Component不起作用

Maven配置:将文件放在类路径jar中作为参数