2010-04-23 26 views
0

我的Ant构建脚本与使用叉子一个java任务开始=真不一致的NoClassDefFoundError在subant 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错误的namespace.Tool Java源文件。 例如,关闭,重新打开文件错误可能消失,但没有可重复的行为。

我试图避免subant构造(用于整理),但这并没有帮助。

最后,引用的class.path是这样的:

<path id="class.path"> 
    <pathelement location="../common/bin" /> 
    <pathelement location="./bin" /> 
    <fileset dir="${build.dir}"> 
    <include name="...jar" /> 
    </fileset> 
</path> 

任何想法?

回答

0

原因是<pathelement location="./bin" />

这个bin文件夹在Eclipse任务序列的其他步骤中被Eclipse重新编译,例如,一个文件夹被删除。 Eclipse中的默认设置是在此时重新编译所有代码。

因此,Ant进程可能会或可能不会在此bin文件夹中找到特定的类,从而导致不一致的NoClassDefFoundError