来自netbeans 6.9.1的java runnable jar

Cra*_*lus 4 java command-line netbeans jar executable-jar

我在NetBeans6.9.1中有一个项目.它在IDE内部工作正常.但是当我尝试运行jar时,NetBeans已经在dist目录下自动创建了,我得到了项目中的类的NoClassDefFoundError.我究竟做错了什么?我应该使用Ant还是其他东西(不知道Ant)在eclipse中我做了一个"create runnable jar",jar运行没有问题.NetBeans中有相应的东西吗?

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

更新2我发现了问题.我认为这是一个严重的NetBeans错误.我已经完成了重构,并将包名称从myPackage.model更改mypackage.model.但是NetBeans并没有正确地做到这一点.它确实将包的名称更改为mypackage,如树导航器中所示,但文件中的包名仍为myPackage.该项目在IDE内部执行的罚款,没有报告错误(尽管所有的类被声明为属于我的P ackage和他们在我的树p ackage),但是当我试图运行dist目录我里面的罐子得到了一个没有找到的例外.今天我注意到这堂课被报道为我的P.ackage/model而不是我的p ackage/model.我查看了类,重构完全搞定了一切.我手动将包名从myPackage中的类名更改为mypackage,并更正了所有导入(导入myPackage).这是一个已知的NetBeans问题????

谢谢

Wal*_*inz 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>
Run Code Online (Sandbox Code Playgroud)

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

  • 你必须告诉Maven生成一个"阴影"(包括依赖)jar,
  • 你必须指定主类(包含static main(..)要运行的方法的主类).

如果您正在使用Ant,可能需要查看此博客文章.