1

我在 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}

我该如何解决这个问题?

4

5 回答 5

1

您收到的错误意味着以下情况之一为真:

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

也就是说,在加载类时,有可能(甚至很可能)可以找到该类,但找不到该类的某些关键依赖项。例如,如果IndexBuilder扩展了另一个类并且在类路径中找不到该基类,您将收到此错误。另一个例子是,如果IndexBuilder在静态初始化程序中使用了一个类并且找不到该类。

检查您的类路径,不仅要检查,IndexBuilder还要检查IndexBuilder依赖的任何内容。

例如,参见这个讨论NoClassDefFoundError

于 2009-03-03T02:18:28.087 回答
0

您是否尝试在 Project Properties -> Run 选项卡中将工作目录设置为“build\classes”?

于 2009-03-02T18:26:47.800 回答
0

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

于 2009-03-02T18:41:29.327 回答
0

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

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

<property file="myproject.properties"/> 

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

有关如何从命令行调用 Ant 的更多详细信息,请参见此处。

于 2009-03-03T02:36:47.827 回答
0

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


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

请注意分号而不是冒号。

于 2009-03-04T16:23:49.763 回答