将两个 Maven 模块合并到一个 jar 中,并让第三个模块在指定位置生成 jar

瓦罗瓦利亚

我现在已经尝试了 5 个小时,但不确定我错过了什么。我有以下

+- parent
   pom.xml
   +- core-module
      pom.xml
   +- excel-module
      pom.xml
   +- client-module
      pom.xml
   +- assembly-module
      pom.xml
  1. 我想core.jarcore-module and excel-module(我已经实现)创建一个文件assembly-module/target/dist/server/core.jar
  2. 我想在以下位置创建单独的client.jar文件assembly-module/target/dist/client/client.jar

以下是我的 pom 文件。

核心/pom.xml

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.test.project</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0.0-SNAPSHOT</version>
</parent>
<artifactId>core</artifactId>
<dependencies>
    <dependency>
        <groupId>com.test.project</groupId>
        <artifactId>excel</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
</project>

excel/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
    <artifactId>parent</artifactId>
    <groupId>com.test.project</groupId>
    <version>1.0.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>excel</artifactId>
<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
</dependencies>
</project>

客户端/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://maven.apache.org/POM/4.0.0"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
    <artifactId>parent</artifactId>
    <groupId>com.test.project</groupId>
    <version>1.0.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>client</artifactId>
<packaging>jar</packaging>
<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Build-Version>${project.version}</Build-Version>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
      <dependency>
           <groupId>com.test.project</groupId>
           <artifactId>core</artifactId>
           <version>${project.version}</version>>
      </dependency>
</dependencies>

程序集/ pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
    <artifactId>parent</artifactId>
    <groupId>com.test.project</groupId>
    <version>1.0.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>assembly</artifactId>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptors>
                            <descriptor>src/main/assembly-    descriptor.xml</descriptor>
                        </descriptors>
                        <appendAssemblyId>false</appendAssemblyId>
                         <outputDirectory>${project.basedir}/target/dist/server/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>core</finalName>
</build>
<dependencies>
    <dependency>
        <groupId>com.test.project</groupId>
        <artifactId>excel</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.test.project</groupId>
        <artifactId>core</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

程序集/描述符.xml

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>all-jar</id>
<formats>
    <format>jar</format>
</formats>

<includeBaseDirectory>false</includeBaseDirectory>

<dependencySets>
    <dependencySet>
        <unpack>true</unpack>
        <useTransitiveDependencies>false</useTransitiveDependencies>
    </dependencySet>
</dependencySets>
</assembly>

我需要以何种方式更新assembly.xml和/或descriptor.xml实现第二点。我看过几乎所有相关的帖子SO

任何帮助是极大的赞赏。

编辑

<build>
<plugins>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>core-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/core-assembly-descriptor.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>${project.basedir}/target/dist/framework/lib/server/</outputDirectory>
                    <finalName>core.jar</finalName>
                </configuration>
            </execution>
            <execution>
                <id>client-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/client-descriptor.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>${project.basedir}/target/dist/framework/runtime/</outputDirectory>
                    <finalName>client.jar</finalName>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

图尔西亚尼

我实际上会尝试在 assembly/pom.xml 中添加另一个执行标记,如下所示:

<execution>
                <id>assembly-client</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/client-assembly-descriptor.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                     <outputDirectory>${project.basedir}/target/dist/client/</outputDirectory>
                </configuration>
            </execution> 

并添加一个新的程序集描述符文件(client-assembly-descriptor.xml),如下所示:

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
 <id>all-jar</id>
   <formats>
<format>jar</format>
    </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
     <dependencySets>
<dependencySet>
    <unpack>true</unpack>
    <useTransitiveDependencies>false</useTransitiveDependencies>
    <includes>
    <include>com.test.project:client</include>
    </includes>
</dependencySet>

您还需要在程序集项目中添加客户端 jar 作为依赖项。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当两个jar合并时,为什么Maven在jar中生成一个maven目录?

Maven程序集插件创建两个意外的jar

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

Gradle可以将多个项目合并到一个jar中吗?

将发行版合并到一个JAR文件中的最简单方法

在 Maven 生成的 jar 中包含一个 zip 文件

Maven 从 flink 项目创建两个 jar,只有 80mb 一个在集群中工作

如何在 maven 中创建一个 jar?

Maven:如何在第三个模块中使用相同的测试来测试两个模块

将多个模块 jar 组合成一个

在Maven中使用一个文件创建JAR

要创建一个可执行的JAR文件的Maven

创建一个包含依赖项管理Maven的jar

在maven项目中选择一个jar文件

Launch4J-主jar,将所有依赖项合并到一个exe中

maven jar选项,在构建过程中创建一个额外的jar

用两个JAR解决CLASSPATH

如何将几个jar文件和peristence.xml文件合并到一个jsf项目中

使用maven-assembly-plugin创建两个可执行jar

使用Maven创建两个独立的jar,不依赖并且仅依赖

Maven用JAR内解压的依赖关系构建一个jar

使用Maven将Java代码和依赖项组合到一个jar(可执行jar)中

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

为什么Maven在target和groupId目录中为同一源创建两个jar

在 Eclipse 中为另一个 Maven 项目导入 Maven 项目 jar

Maven的 - 使用Java创建项目为每一个Java包一个jar

将 Maven 应用程序打包到一个 jar 中 - 有一个例外

将两个不同的数据类列表合并到第三个 Kotlin

将两个不同数组的元素合并到第三个数组