4

我在 NetBeans6.9.1 中有一个项目。它在 IDE 内部运行良好。但是当我尝试运行 jar 时,NetBeans 已在 dist 目录下自动创建,我在项目中的类得到 NoClassDefFoundError。我究竟做错了什么?我应该使用 Ant 还是什么(不知道 Ant) 在 eclipse 中我做了一个“创建可运行的 jar”,并且 jar 运行没有问题。NetBeans 中有没有等价的东西?

更新:在 dist/myJar 中,我提取了 jar,在清单中,我的项目的当前路径和根路径丢失了。我手动添加了它们,并从命令行重新创建了 jar。它有效。但是为什么NetBeans不在jar清单的classpath中添加这些。我不明白

更新 2我发现了问题。我认为这是一个严重的 NetBeans 错误。我已经完成重构并将包名称从myPackage.model 更改mypackage.model。但是 NetBeans 没有正确地做到这一点。它确实将包的名称更改为 mypackage ,如树导航器中所示,但文件中的包名称仍为 myPackage。该程序在 IDE 中执行良好并且没有报告任何错误(尽管所有类都声明为属于我的,并且在树中它们在我的包下),但是当我尝试在 dist 目录中运行 jar 时,有一个类未找到异常。今天我注意到这门课被报告为我的Package/model 而不是我的/模型。我查看了这些类,重构将所有内容完全融合在一起。我手动将我的类中的包名称从 myPackage 更改为 mypackage,并更正了所有导入(正在导入 myPackage)。这是 NetBeans 的已知问题吗????

谢谢

4

4 回答 4

6

使用 NetBeans,您的 Java 项目将基于 Maven 或 Ant。您要做的是创建一个包含所有依赖项的“胖”jar。对于 Maven,您可以在 pom 中添加以下行来完成:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>package.and.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

所以对于 Maven 来说,这是一个两步的事情:

  • 您必须告诉 Maven 生成一个“阴影”(包括依赖项)jar,
  • 并且您必须指定主类(包含static main(..)要运行的方法的类。

如果您使用 Ant,您可能需要查看这篇博文

于 2010-09-22T13:07:07.220 回答
1

我一直有同样的问题,我只能说这似乎是 NetBeans 6.9.1 的一个小故障,因为它在 6.8 和 6.9 中工作。

为方便起见,您可以在 WinZip 或 WinRar 中打开它,然后从那里更改清单文件,而不必自己 jar。这就是我所做的。

于 2010-09-22T15:03:40.637 回答
1

在外部博客中解决了这篇文章

您必须将两个插件 (maven-assembly-pluginmaven-jar-plugin) 添加到文件的build部分pom.xml。您构建部分将与此类似:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>(select version, i.e: 2.3)</version>
                  <executions>
                    <execution>
                       <goals>
                         <goal>attached</goal>
                       </goals>
                       <phase>package</phase>
                       <configuration>
                         <descriptorRefs>
                           <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                          <manifest>
                            <mainClass>your.main.Class</mainClass>
                          </manifest>
                        </archive>
                      </configuration>
                   </execution>
                </executions>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>(select version, i.e: 2.3.2)</version>
                  <configuration>
                    <archive>
                      <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>your.main.Class</mainClass>
                      </manifest>
                   </archive>
                 </configuration>
              </plugin>                        
        </plugins>
    </build>
于 2013-01-23T17:10:38.487 回答
0

当您从菜单或工具按钮执行“清理和构建”命令时,NetBeans 会为您的项目创建一个自给自足的 JAR 文件。

理想情况下,Jar 文件的类路径不应包含项目的根文件夹,如果您已在 manifest.mf 文件的 Class-Path 属性中将它们添加到项目中,NetBeans 会自动添加库 JARS。

如果您有任何自定义要求,您甚至可以修改包含在构建 JAR 中的 manifest.mf 文件。manifest.mf 文件可从项目根目录的“文件”面板中获得。

要使用 java -jar 命令使 JAR 可执行,您应在项目配置中指定 Main 类。(如果项目是通过 NetBeans 项目向导创建的,则该类已经定义,否则我们必须手动执行)

通过 Menu 选项指定主类,如下所示:

File > Project Properties > Run (Category) > Main Class (textbox)

请提供您的项目的详细信息,例如

  1. 项目是从 NetBeans 新建项目向导创建的吗?
  2. 项目是基于 Ant 还是基于 Maven?
  3. 项目自由形式项目是从现有源创建的吗?

这些附加信息将帮助我详细回答问题。希望这有帮助。

关于
图沙尔

于 2010-09-23T10:39:05.130 回答