Ant 1.8.4 无法解析另一个文件中的 refid - 但 Ant 1.6 很好


我在Java 6和Ant

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 之间一定发生了更改,其中任务之间的缺省继承已更改。做出多么荒谬的改变。它只能引起人们(像我这样的人!!)问题。无论如何,希望这篇文章能帮助其他遇到相同问题的人。

保罗

相关内容

  • 没有找到相关文章

最新更新