Maven Assembly Plugin未设置MainClass清单设置

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的范围.


Fri*_*ing 5

对于像我这样的复制和粘贴粉丝,从上面的答案和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)