1.6上构建正常,但现在我在Java 7和Ant 1.8.4上并且遇到了一些问题。我已经克服了不少,但有一个我坚持了下来。
我有一个文件,其中包含一些常见的目标,通用.xml(仅包含目标 - 没有xml版本字符串或项目):
<target name="common_init">
<path id="project.class.path">
... stuff
</path>
</target>
和两个构建文件:构建文件1.xml
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY common SYSTEM "file:./common.xml">
]>
<project name="proj1" default="main" basedir=".">
<!-- import common targets using a xml entity definition -->
&common;
...
<target name="compile" depends="common_init">
<javac
srcdir="..." destdir="..." debug="on" deprecation="off" optimize="on" includes="**/*.java" source="${javac.target}" target="${javac.target}">
<src path="..."/>
<classpath refid="project.class.path"/>
</javac>
</target>
...
</project>
这工作正常。但是几乎相同的第二个构建文件给了我错误:
Reference project.class.path not found.
第二个构建文件是:
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY common SYSTEM "file:./common.xml">
]>
<project name="proj1" default="main" basedir=".">
<!-- import common targets using a xml entity definition -->
&common;
...
<target name="compile" depends="common_init">
<javac
srcdir="..." destdir="..." debug="on" deprecation="off" optimize="on" includes="**/MyFile.java" source="${javac.target}" target="${javac.target}">
<classpath refid="project.class.path"/>
</javac>
</target>
...
我认为(抓住稻草)相同的项目名称可能是问题所在,但没有。这两个构建文件都是从更高级别的构建文件启动的,使用:
<ant antfile="buildfileX.xml"...>
任何帮助非常感谢。
保罗
我在原始帖子中的代码只是伪代码,我省略了导致问题的重要差异,对此我深表歉意。
正在工作的构建文件与我的原始帖子一样。失败的那个也如发布的那样,但它的称呼略有不同:
<project name="proj1" default="main" basedir=".">
<!-- import common targets using a xml entity definition -->
&common;
...
<target name="compile" depends="common_init">
<antcall target="compile1"/>
</target>
<target name="compile1" depends="">
<javac
srcdir="..." destdir="..." debug="on" deprecation="off" optimize="on" includes="**/MyFile.java" source="${javac.target}" target="${javac.target}">
<classpath refid="project.class.path"/>
</javac>
</target>
...
</project>
因此,Ant 1.6 和 1.8.4 之间一定发生了更改,其中任务之间的缺省继承已更改。做出多么荒谬的改变。它只能引起人们(像我这样的人!!)问题。无论如何,希望这篇文章能帮助其他遇到相同问题的人。
保罗