我的ant构建脚本以使用fork = true
的java任务开始<java fork="true"
classname="org.apache.tools.ant.launch.Launcher"
jvm="${java.home}/bin/java"
classpathref="class.path">
<arg value="-f" />
<arg value="${ant.file}" />
<arg value="generate" />
</java>
<arg value="generate" />
指向同一个ant构建文件中的另一个任务。
此任务使用指向另一个文件的子任务启动另一个目标。
<subant verbose="true" target="replace">
<fileset dir="${basedir}" includes="refactor.xml" />
</subant>
此文件refactor.xml使用fork = true再次启动java任务。
<java classpathref="class.path"
classname="namespace.Tool"
fork="true"/>
奇怪的行为是:一切正常,除了偶尔我得到NoClassDefFoundError
java源文件的namespace.Tool
错误。
例如关闭,重新打开文件错误可能会消失,但是没有可重现的行为。
我试图避免使用subant构造(用于整理),但这没有帮助。
最后引用的class.path是这样的:
<path id="class.path">
<pathelement location="../common/bin" />
<pathelement location="./bin" />
<fileset dir="${build.dir}">
<include name="...jar" />
</fileset>
</path>
有什么想法吗?
答案 0 :(得分:0)
原因是<pathelement location="./bin" />
。
在Ant任务序列的其他步骤中,Eclipse会重新编译此bin
文件夹,例如:文件夹已删除。 Eclipse中的默认设置是在此刻重新编译所有代码。
因此,Ant进程可能会或可能找不到此bin
文件夹中的特定类,从而导致NoClassDefFoundError
不一致。