我遇到了与this问题类似的问题。我已经尝试了列出的所有建议,但仍然不知所措。我的问题是,我正在尝试构建一个 Maven 项目并将其分发到其他计算机,但 jar 文件没有填充正确的清单。每次构建并运行时,我都会收到以下错误:
no main manifest attribute, in myjar.jar
。我需要编辑某种配置文件吗?我只是不知道发生了什么事。我也尝试过此修复,但无济于事。
您可以将其添加到项目的 pom 文件中,在
<project>
标签内:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>your.main.class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
另一种选择是使用
maven shade plugin
。与 tigran 显示的 maven jar plugin
不同,maven shade plugin
在生成的 jar 中包含您的依赖项。
该插件的示例用法是:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.main.Class</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
除了前两个答案(您也可以研究 Maven 程序集插件),我建议人们将其添加为 NetBeans 设置中的“代码模板”。一旦您输入关键字并点击Tab,它就会自动完成。此功能在本文发布时可能不可用。
在链接的图片中,您可以看到当我输入
shade
并点击 Tab 时,我的模板自动完成的内容。它会填充(其中 ${MC newVarName default="${exec.mainClass}"} 动态指向 mainClass):
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${MC newVarName default="${exec.mainClass}"}</mainClass>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>