来自netbeans 6.9.1的java runnable jar

时间:2010-09-22 11:57:37

标签: java command-line netbeans jar executable-jar

我在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问题????

由于

4 个答案:

答案 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来说,这是一个两步骤的事情:

  • 您必须告诉Maven生成“阴影”(包括依赖项)jar,
  • ,您必须指定主类(包含要运行的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-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>

答案 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)

请详细说明您的项目

  1. 是否从NetBeans New Project向导创建项目?
  2. 项目是基于Ant还是Maven?
  3. 是否从现有来源创建了项目自由格式项目?
  4. 此附加信息将帮助我回答具体细节中的问题。希望这有所帮助。

    关于
    图莎尔