编程语言
首页 > 编程语言> > 来自netbeans 6.9.1的java runnable jar

来自netbeans 6.9.1的java runnable jar

作者:互联网

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

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

更新2我发现了问题.我认为这是一个严重的NetBeans错误.我已经完成了重构,并将包名称从myPackage.model更改为mypackage.model.但是NetBeans并没有正确地做到这一点.它确实将包的名称更改为mypackage,如树导航器中所示,但文件中的包名仍为myPackage.
程序在IDE中执行正常并且没有报告错误(虽然所有类都声明属于myPackage并且在树中它们在mypackage下)但是当我尝试在dist目录中运行jar时我得到了一个类而不是发现异常.今天我注意到该类被报告为myPackage / model而不是mypackage / model.我查看了类,重构完全搞定了一切.我手动将包名从myPackage中的类名更改为mypackage,并更正了所有导入(导入myPackage).这是一个已知的NetBeans问题????

谢谢

解决方法:

使用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,
>并且您必须指定主类(包含要运行的静态main(..)方法的主类).

如果您正在使用Ant,您可能需要查看this blog post.

标签:java,command-line,executable-jar,jar,netbeans
来源: https://codeday.me/bug/20190610/1212656.html