使用Maven部署含外部依赖的可执行Jar包遇到问题
问题解决步骤
1. 核心错误:标签拼写不规范
你遇到的Cannot find 'manifestentries'错误,本质是maven-jar-plugin的XML配置标签写错了——Maven的配置标签严格区分大小写,你写的<manifestentries>必须改成<manifestEntries>(首字母大写,驼峰命名格式)。
2. 清理冗余配置
另外你在<manifest>节点里已经通过<addClasspath>true</addClasspath>自动生成Class-Path,又在<manifestEntries>里手动重复配置了Class-Path,这会导致配置冲突,完全没必要保留手动配置的这部分。
修正后的maven-jar-plugin配置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix> <mainClass>gestionBar.Controller.Controller.Controller</mainClass> </manifest> <!-- 若有其他自定义Manifest条目,再用正确的<manifestEntries>标签添加,否则直接删除该节点 --> </archive> </configuration> </plugin>
补充:你之前写的<Classpath>也是不规范的,maven-jar-plugin的标准配置项是小写开头的<classpathPrefix>,上面的代码已经修正了这一点。
额外建议:处理log4j依赖的打包问题
如果希望打包后能直接运行(包含log4j等依赖),仅靠maven-jar-plugin不够,可以添加两个插件配合:
1. 添加依赖复制插件(把依赖拷贝到lib目录)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/${project.build.finalName}.lib</outputDirectory> </configuration> </execution> </executions> </plugin>
2. 确保maven-jar-plugin的classpathPrefix和上面的输出目录对应
这样打包完成后,target目录下会生成你的项目jar,以及对应的lib目录(包含所有依赖),直接用java -jar 你的jar文件名.jar就能运行。
内容的提问来源于stack exchange,提问作者Koda
相关产品推荐
相关产品推荐

