带有新NetBeans项目的命令行上的NoClassDefFoundError

时间:2008-12-29 21:35:28

标签: java netbeans ant

我在NetBeans中创建了一个新的J2SE项目,我可以从IDE运行它,但是当我尝试在命令行上使用Ant运行它时,我遇到了以下问题:

<剪断>

run:
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: IndexBuilder
     [java] Java Result: 1

<剪断>

根据以下project.properties的摘要,应找到该类。

run.classpath=\
    ${javac.classpath}:\
    ${build.classes.dir}

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

您获得的错误意味着以下其中一项成立:

  • 在类路径中找不到类IndexBuilder
  • 在类路径
  • 上找不到IndexBuilder的必要(用于类加载)依赖项

也就是说,在加载类时,可能(甚至可能)找到类可以但是找不到类的某些关键依赖项。例如,如果IndexBuilder扩展了另一个类,并且在类路径中找不到该基类,则会出现此错误。另一个例子是,如果IndexBuilder在静态初始值设定项中使用了一个类,那么该类就无法找到。

检查您的类路径不仅适用于IndexBuilder,还适用于IndexBuilder所依赖的任何内容。

例如,请参见NoClassDefFoundError的{​​{3}}。

答案 1 :(得分:0)

您是否尝试在“项目属性”中将工作目录设置为“build \ classes” - >运行标签?

答案 2 :(得分:0)

项目引用的JAR / Lib中至少有一个可能未被复制到程序的类路径中。将项目使用的所有jar / lib复制到项目的/ dist文件夹(或者YourApplication.jar所在的位置),然后尝试运行程序。如果这样可以解决问题,则意味着您的Netbeans项目配置不正确。

答案 3 :(得分:0)

当您从命令行运行它时,实际上是在调用Apache Ant。您获得ClassNotFound异常的原因是$ {javac.classpath}和所有其他属性未正确填充。这就是您的代码在Netbeans上下文中运行的原因。 Netbeans正在为您设置这些属性。

要回答您如何从命令行运行它的原始问题,您需要设置一个属性文件,通过属性声明定义这些参数:

<property file="myproject.properties"/> 

另一种解决方案是通过sh脚本将属性设置为环境变量。或者,您可以在构建脚本中使用实际路径而不是属性。

有关如何从命令行调用Ant的详细信息,请参阅here

答案 4 :(得分:0)

您是在Windows或Unix上运行它吗?如果是Windows,请尝试将属性文件更改为:


run.classpath=${javac.classpath};${build.classes.dir}

请注意分号而不是冒号。