我有一个 Maven 项目,它通过以下方式生成一个 jarMaven 组装插件 http://maven.apache.org/plugins/maven-assembly-plugin/我想作为控制台应用程序运行。但是,MainClass 属性未在 MANIFEST.MF 中设置。这是我的插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>net.justaprogrammer.poi.cleanser.Cleanser</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
但是,这不会添加到由生成的 jar 中的 MANIFEST.MFmvn package
。生成的清单如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: zippy
Build-Jdk: 1.6.0_25
我究竟做错了什么?
我错过了您没有在包上生成程序集。您有一个 jar 项目,因此 Maven 将使用 maven-jar-plugin 构建一个 jar。你的 pom 中不需要有任何东西来告诉它。这就是 Maven 的约定优于配置的方式为您服务。它构建的 jar 中将只包含您的项目类和资源。如果您想将 Main-Class 添加到该 jar 中的清单中,您应该配置 jar 插件来执行此操作 http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Make。基本上,只要移动它archive
jar 插件的配置。
但是,如果您确实想要组装一个可执行的 fat jar(即,一个包含所有类以及所有依赖项的类的 jar),那么您的设置就在正确的位置,但您需要实际运行程序集插件可以使用mvn assembly:single
or by 将该目标绑定到生命周期阶段 http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#Execution:_Building_an_Assembly。需要明确的是,如果你这样做,那么你的项目将输出twojars:一个包含您的项目文件,另一个包含该项目文件以及您的项目所依赖的所有库的内容。前者是由jar插件构建的。后者是由程序集插件构建的。请注意,fat jar 并不常用,并且在使用它们时可能会遇到不寻常的问题,因为它们超出了正常 Java 内容的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)