Maven 2 Maven程序集插件未设置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> <

我有一个maven项目,它通过我想作为控制台应用程序运行的。但是,未在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>

我做错了什么?

您可能还需要添加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>