子任务java任务中的NoClassDefFoundError不一致

时间:2010-04-23 09:42:46

标签: ant classpath

我的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>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

在Ant任务序列的其他步骤中,Eclipse会重新编译此bin文件夹,例如:文件夹已删除。 Eclipse中的默认设置是在此刻重新编译所有代码。

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