2010-04-23 27 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