我在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}
我该如何解决这个问题?
答案 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}
请注意分号而不是冒号。