我在NetBeans6.9.1中有一个项目。 它在IDE内部工作正常。 但是当我尝试运行jar时,NetBeans已经在dist目录下自动创建,我得到一个NoClassDefFoundError 对于我的项目中的类。我究竟做错了什么?我应该使用Ant还是其他东西(不知道Ant) 在eclipse中我做了一个“创建可运行的jar”,jar运行没有问题。 NetBeans中是否有相同的东西?
UPDATE :在dist / myJar中,我解压缩了jar,在清单中,我的项目的当前路径和根路径都丢失了。我手动添加它们,并从命令行重新创建jar。它有效。但是为什么NetBeans不会在jar的manifest的类路径中添加这些。我不明白
更新2 我发现了问题。我认为这是一个严重的NetBeans错误。我已经完成了重构并将包名称从 myPackage.model 更改为 mypackage.model 。但是NetBeans并没有正确地做到这一点。它确实将包的名称更改为mypackage,如树导航器中所示,但文件中的包名仍为myPackage 。 程序在IDE中执行正常,并且没有报告任何错误(尽管所有类都声明属于我的 P ackage并且在树中它们属于我的 p ackage) ,但是当我尝试在dist目录中运行jar时,我得到了一个未找到类的异常。今天我注意到这个课被报告为我的 P ackage / model而不是我的 p ackage / model。我查看了类,重构完全搞定了一切。我手动将包名从myPackage中的类名更改为mypackage,并更正了所有导入(导入myPackage)。这是一个已知的NetBeans问题????
由于
答案 0 :(得分: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来说,这是一个两步骤的事情:
static main(..)
方法的主类。如果您正在使用Ant,则可能需要查看this blog post。
答案 1 :(得分:1)
我一直有同样的问题,我只能说它似乎是NetBeans 6.9.1的一个小故障,因为它在6.8和6.9中工作。
为方便起见,您可以在WinZip或WinRar中打开它,只需从那里更改清单文件,而无需自己运行。这就是我的工作。
答案 2 :(得分:1)
我解决了这个post in an external blog:
您必须将两个插件(maven-assembly-plugin
和maven-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>
答案 3 :(得分:0)
当您从菜单或工具按钮执行“清理并生成”命令时,NetBeans会为您的项目创建一个自给自足的JAR文件。
理想情况下,Jar文件的类路径不应包含项目的根文件夹,如果已将库JARS自动添加到manifest.mf文件的Class-Path属性中的项目中,则NetBeans会添加库.JAR。
如果您有任何自定义要求,您甚至可以修改包含在构建的JAR中的manifest.mf文件。 manifest.mf文件可从项目根目录的“文件”面板中获得。
要使用java -jar命令创建JAR可执行文件,您应在项目配置中指定Main类。 (如果项目是通过NetBeans项目向导创建的,那么此类已经定义,否则我们必须手动执行)
通过“菜单”选项指定主类,如下所示:
File > Project Properties > Run (Category) > Main Class (textbox)
请详细说明您的项目
此附加信息将帮助我回答具体细节中的问题。希望这有所帮助。
关于
图莎尔