首页 文章

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

提问于
浏览
3

我正在尝试运行由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中的清单文件将此条目分开,以便在树荫插件配置中添加它?

2 回答

  • 2

    Maven的shade插件使用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>
    
  • 5

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

    mvn clean package shade:shade

相关问题