Netbeans Maven 项目未将主类添加到清单中

问题描述 投票:0回答:3

我遇到了与this问题类似的问题。我已经尝试了列出的所有建议,但仍然不知所措。我的问题是,我正在尝试构建一个 Maven 项目并将其分发到其他计算机,但 jar 文件没有填充正确的清单。每次构建并运行时,我都会收到以下错误:

no main manifest attribute, in myjar.jar
。我需要编辑某种配置文件吗?我只是不知道发生了什么事。我也尝试过此修复,但无济于事。

java maven netbeans deployment netbeans-7
3个回答
49
投票

您可以将其添加到项目的 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>

30
投票

另一种选择是使用

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>

0
投票

除了前两个答案(您也可以研究 Maven 程序集插件),我建议人们将其添加为 NetBeans 设置中的“代码模板”。一旦您输入关键字并点击Tab,它就会自动完成。此功能在本文发布时可能不可用。

NB Settings

在链接的图片中,您可以看到当我输入

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>
© www.soinside.com 2019 - 2024. All rights reserved.