我正在尝试运行由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中的清单文件是否具有此条目,以便在树荫插件配置中添加它?
答案 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需要知道要使用哪个。