Maven 2 Maven程序集插件未设置MainClass清单设置
我有一个maven项目,它通过我想作为控制台应用程序运行的。但是,未在MANIFEST.MF中设置MainClass属性。以下是我的插件配置:Maven 2 Maven程序集插件未设置MainClass清单设置,maven-2,maven-assembly-plugin,Maven 2,Maven Assembly Plugin,我有一个maven项目,它通过我想作为控制台应用程序运行的。但是,未在MANIFEST.MF中设置MainClass属性。以下是我的插件配置: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <
<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>
我做错了什么?您可能还需要添加maven jar插件配置,并在那里配置main类。程序集解压所有JAR文件(例如项目JAR和依赖项JAR),我认为在JAR文件列表中找到的最后一个MANIFEST.MF“覆盖”了预期/生成的MANIFEST.MF。我没有注意到您没有在包上生成程序集。您有一个jar项目,所以Maven将使用Maven jar插件构建一个jar。你不需要在你的pom里有任何东西来告诉它。这是Maven关于为您工作的配置的约定。它构建的jar中只有您的项目类和资源。如果您想将一个主类添加到该jar中的清单中,您应该这样做。基本上,只需将
archive
配置移动到jar插件
但是,如果您真的想要组装一个可执行的fat jar——也就是说,一个包含所有类以及所有依赖项的类的jar——那么您的设置是正确的,但是您需要实际运行组装插件,或者使用
mvn assembly:single
或者通过。要明确的是,如果您这样做,那么您的项目将输出两个JAR:一个包含您的项目文件,另一个包含该文件以及您的项目所依赖的所有库的内容。前者是由jar插件构建的。后者是由汇编插件构建的。请注意,胖jar并不常用,使用它们时可能会遇到不寻常的问题,因为它们超出了普通Java的范围。如果您碰巧使用maven shade插件来构建胖jar(而不是使用汇编插件或除了使用汇编插件之外),值得注意的是,shade插件处理MANIFEST.MF文件中的entires时有点不同;请参阅shade插件的页面。对于像我这样的复制和粘贴粉丝,请参见上面的答案,以及:
org.apache.maven.plugins
maven汇编插件
带有依赖项的jar
com.db.search.filenet.Load
集合所有
包裹
单一的
它的工作原理与广告完全相同。你确定你在找正确的输出罐吗?据我所知,是的。我的pom.xml不包含名为jar的插件。正如我在编辑中所说,我正在使用mvn包
生成我的jar。jar名为PoiCleanser-0.1.0.BUILD-SNAPSHOT.jar,位于目标文件夹的根目录下。我并不是特别嫁给了一个胖子,但我很高兴我现在明白了其中的区别。Ryan,我刚刚试过mvn assembly:single
,我有一个包含所有依赖项的“胖罐子”,MANIFEST.MF中有一个主类,但实际上我没有在其中编写的代码。我认为jar插件是最好的,但我也想要一个合适的jar插件。我将为汇编插件提出一个单独的问题。
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: zippy
Build-Jdk: 1.6.0_25
<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>