Jus*_*ing 16 maven-2 maven-assembly-plugin
我有一个maven项目,它通过我希望作为控制台应用程序运行的maven程序集插件生成一个jar .但是,未在MANIFEST.MF中设置MainClass属性.这是我的插件配置:
<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>
Run Code Online (Sandbox Code Playgroud)
但是,这不会被添加到生成的jar中的MANIFEST.MF中mvn package.生成的清单如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: zippy
Build-Jdk: 1.6.0_25
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Rya*_*art 14
我错过了你没有在包装上生成装配.你有一个jar项目,所以Maven将使用maven-jar-plugin构建一个jar.你的pom中没有任何东西可以告诉它.这是Maven的for-convention-over-configuration为你工作.它构建的jar只包含你的项目类和资源.如果要将Main-Class添加到该jar中的清单,则应配置jar插件来执行此操作.基本上,只需将该archive配置移动到jar插件即可.
但是,如果你真的想要组装一个可执行的胖jar - 也就是说,包含所有类的jar以及所有依赖项的类 - 那么你可以在正确的位置进行设置,但是你需要实际运行程序集插件使用mvn assembly:single或通过将该目标绑定到生命周期阶段.要清楚,如果你这样做,那么你的项目将输出两个罐子:一个包含你的项目文件,一个包含你的项目以及项目所依赖的所有库的内容.前者是由jar插件构建的.后者是由程序集插件构建的.请注意,胖jar并不常用,并且在使用它们时会遇到异常问题,因为它们超出了普通Java的范围.
对于像我这样的复制和粘贴粉丝,从上面的答案和http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#Execution:_Building_an_Assembly组装:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.db.search.filenet.Load</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17557 次 |
| 最近记录: |