在jar中没有主要的清单属性

时间:2015-06-10 13:25:28

标签: java maven jar manifest maven-shade-plugin

我正在尝试运行由maven shade插件创建的jar。我按以下方式配置主类:

<project>
...
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>org.comany.MainClass</Main-Class>
                <Build-Number>123</Build-Number>
              </manifestEntries>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

   ...  

但是当我尝试使用java -jar app.jar运行jar时,它会出现以下错误

 "no main manifest attribute, in  app.jar"

编辑: 我使用jar tf app.jar检查了jar的内容,我看到了一个MANIFEST.MF文件。 BUt它没有主类的条目。如何确保jar中的清单文件是否具有此条目,以便在树荫插件配置中添加它?

3 个答案:

答案 0 :(得分:8)

Maven的阴影插件使用jar插件生成的JAR并添加依赖项。因为看起来像阴影插件上的变换不能正常工作,你只需要设置jar-plugin的配置,如下所示:

<build>
  ...
  <plugins>
    ...     
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
  <plugin>
    [Your shade plugin definition without the transformers here]
  </plugin> 
</build>

答案 1 :(得分:2)

不要忘记添加阴影作为目标:

mvn clean package shade:shade

答案 2 :(得分:0)

检查是否有多个main()。如果这样做,maven需要知道要使用哪个。