使用mvn clean package构建IBM MQ项目后找不到指定主类
解决IBM MQ项目Maven构建空JAR及ClassNotFoundException问题
问题根源
mvn clean package输出[WARNING] JAR will be empty - no content was marked for inclusion!:Maven未将项目编译后的class文件打包进JAR包- 运行时
ClassNotFoundException:空JAR中不存在com.ibm.mq.badge.Manager类,导致JVM无法加载
解决方案
1. 核对Maven目录规范
确保源码放在Maven默认路径src/main/java下,目录结构必须匹配包名:
src/ └── main/ └── java/ └── com/ └── ibm/ └── mq/ └── badge/ └── Manager.java
如果源码放在非默认目录,Maven不会自动编译打包,直接生成空JAR。
2. 修正POM.xml配置
添加必要的编译和打包插件,确保class文件被正确打包,可选指定主类简化运行命令:
<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.ibm.mq.badge</groupId> <artifactId>TicketGenerator</artifactId> <version>1.4</version> <packaging>jar</packaging> <!-- IBM MQ客户端依赖 --> <dependencies> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>com.ibm.mq.allclient</artifactId> <version>9.3.3.0</version> <!-- 按项目要求调整版本 --> </dependency> </dependencies> <build> <plugins> <!-- 指定Java编译版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>1.8</source> <!-- 匹配项目使用的Java版本 --> <target>1.8</target> </configuration> </plugin> <!-- 打包插件:确保包含class文件,指定主类 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.ibm.mq.badge.Manager</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
3. 重新执行构建
清理旧产物后重新编译打包:
mvn clean compile package
构建完成后检查target/TicketGenerator-1.4.jar,需确保内部包含com/ibm/mq/badge/Manager.class文件。
4. 正确运行程序
- 若POM已指定主类,直接执行:
java -jar target/TicketGenerator-1.4.jar
- 未指定主类时,需手动指定类路径(包含JAR和IBM MQ依赖),Windows命令示例:
java -cp target\TicketGenerator-1.4.jar;%USERPROFILE%\.m2\repository\com\ibm\mq\com.ibm.mq.allclient\9.3.3.0\com.ibm.mq.allclient-9.3.3.0.jar com.ibm.mq.badge.Manager
(替换依赖版本为实际使用的版本)
验证步骤
- 执行
mvn clean compile,确认target/classes/com/ibm/mq/badge/Manager.class存在 - 执行
mvn package,确认target/TicketGenerator-1.4.jar大小正常(非几KB空文件) - 运行程序,确认无
ClassNotFoundException报错
内容的提问来源于stack exchange,提问作者Jo Jo
相关产品推荐
相关产品推荐

