将 Maven 多模块项目构建为单个 jar

问题描述 投票:0回答:1

我开发了一个功能齐全的简单 Maven 多模块项目。该项目的目标是将两个 jar(来自模块

a
和模块
b
)打包到一个包含两个应用程序的功能齐全的 jar 中。该项目可以通过 MainA 或 MainB 启动。这是该项目: Maven 多模块项目

虽然项目在 IDE 中顺利运行(运行

MainA
MainB
或最终的 jar),但在尝试在项目目录外执行最终的 .jar 时遇到问题。在根项目文件夹中运行
mvn clean install
后,最终的 jar(可能称为 uber jar,但不确定)会在
a
模块的目标文件夹中生成,名称为
a-1.0-SNAPSHOT.jar
。但是,当我尝试在 IDE 之外运行这个 jar (
java -jar a-1.0-SNAPSHOT.jar
) 时,执行失败。

我怀疑尽管使用了 maven-assemble-plugin,但最终的 jar 中并未正确包含依赖项。我已检查了我的配置,但无法确定此问题的原因。

任何有关解决此问题的见解或建议将不胜感激。

java spring maven jar
1个回答
0
投票

如果我没理解错的话,你有两个模块

a
b
,并且你想将
module-b
打包成
module-a
作为可以直接运行的单个jar。

正如您提到的

maven-assembly-plugin
功能齐全,请尝试将其添加到您的
module-a
pom.xml 文件中。

<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-assembly-plugin</artifactId>  
    <version>3.1.0</version>  
    <configuration>  
        <!-- Set jar file name -->
        <finalName>${project.artifactId}-${project.version}-all</finalName>  
        <!-- disabled default file name suffix of "jar-with-dependencies" -->
        <appendAssemblyId>false</appendAssemblyId>  
        <descriptorRefs>  
            <!-- Add all dependency to jar file -->
            <descriptorRef>jar-with-dependencies</descriptorRef>  
        </descriptorRefs>  
        <attach>false</attach>  
        <archive>  
            <manifest>  
                <!-- replace to your main class name -->
                <mainClass>fully.qualified.MainClass</mainClass> 
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
            </manifest>   
        </archive>  
    </configuration>  
    <executions>  
        <execution>  
            <!-- Set effect phase -->
            <id>make-assembly</id>  
            <phase>package</phase>  
            <goals>  
                <goal>single</goal>  
            </goals>  
        </execution>  
    </executions>  
</plugin>

完成

clean install
后,
target
目录会生成
xxx-all.jar
文件,现在就可以使用
java -jar xxx-all.jar
运行了。

© www.soinside.com 2019 - 2024. All rights reserved.