Maven多模块项目中生成client模块可执行JAR的命令咨询
解决Maven多模块项目中Client模块可执行JAR打包问题
首先,咱们先拆解你遇到的错误原因:你的root模块打包类型是pom(<packaging>pom</packaging>),这意味着它不会生成JAR文件——它只是一个父模块,用来统一管理依赖和插件配置。但你的client模块里却添加了对root:jar的依赖,Maven自然找不到这个不存在的JAR包,这就是报错的核心问题。
接下来分两步解决问题,然后给出正确的打包命令:
1. 修复Client模块的依赖配置
打开client子模块的pom.xml,删除下面这个无效的依赖:
<dependency> <groupId>ru.netCracker</groupId> <artifactId>root</artifactId> <version>1.1.0</version> </dependency>
你已经通过<parent>标签继承了root模块的配置,不需要再依赖它的JAR(因为它根本没有JAR)。
2. 配置可执行JAR生成插件
maven-jar-plugin只能生成不包含依赖的普通JAR,要生成能直接运行的可执行JAR,需要用maven-assembly-plugin或maven-shade-plugin。这里推荐用maven-assembly-plugin,配置简单直观:
在client模块的<build><plugins>里添加以下插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.4.2</version> <configuration> <!-- 生成包含所有依赖的JAR --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!-- 指定主类路径 --> <mainClass>sample.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- 绑定到package阶段自动执行 --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
3. 执行Maven打包命令
在项目根目录下执行以下命令即可完成打包:
- 清理之前的构建产物:
mvn clean
- 安装父模块到本地仓库(确保子模块能继承父配置)并打包所有模块:
mvn install
或者直接一步到位:
mvn clean install
执行完成后,你会在client/target目录下看到两个JAR文件:
client-1.1.0.jar:普通JAR(不含依赖)client-1.1.0-jar-with-dependencies.jar:可执行JAR(包含所有依赖,直接用java -jar命令就能运行)
内容的提问来源于stack exchange,提问作者Gordeev Pavel
相关产品推荐
相关产品推荐

