-1

我在 Java 6 和 Ant 1.6 上构建良好,但我现在在 Java 7 和 Ant 1.8.4 上并且遇到了一些问题。我已经克服了很多,但有一个我被困住了。

我有一个包含一些常见目标的文件 common.xml (只包含目标 - 没有 xml 版本字符串或项目):

<target name="common_init">
    <path id="project.class.path">
        ... stuff
    </path>
</target>

和两个构建文件:buildfile1.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"...>

非常感谢任何帮助。

保罗

4

1 回答 1

-1

我在原始帖子中的代码只是伪代码,我省略了导致问题的重要差异,对此我深表歉意。

正在运行的构建文件与我原来的帖子一样。失败的也如发布的那样,但它的调用方式略有不同:

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

保罗

于 2013-01-24T10:40:27.753 回答