Ant:使用导入的构建文件"Duplicated project name in import"



我有几个构建文件,它们都导入相同的基本构建文件,如下所示:

base.xml:

<project name="base">
    <!-- does not define a 'build' target -->
</project>

buildA.xml:

<project name="buildA">
    <import file="base.xml" />
    <target name="build">
        <ant antfile="buildB.xml" target="build"
            inheritall="false" inheritrefs="false" />
    </target>
</project>

buildB.xml:

<project name="buildB">
    <import file="base.xml" />
    <target name="build">
        ...snip...
    </target>
</project>

(模块A依赖模块b)

现在,上面从buildA.xml调用B的build目标会产生以下错误:

Duplicated project name in import. Project base defined first in buildA.xml and again in buildB.xml

由于buildA.xmlbuildB.xml继承了相同的base.xml,这似乎不可避免。

我怎样才能消除这个错误?

根据sudocode的答案,我解决了这个问题。因为在这两种情况下base.xml的绝对路径是不同的,所以Ant不会将其识别为相同的文件。即使将inheritAll设置为false,调用任务的上下文仍然保留,这会导致名称冲突。

要解决这个问题,可以从base.xml中省略name属性。从Ant 1.8开始,导入任务有一个属性as,当基本项目没有名称时,可以使用它来引用基本目标。如果不覆盖任何目标,可以使用include代替import。我的版本是1.7,所以这对我没有帮助。

对于以前版本的Ant,您可以通过执行调用来完全防止Ant上下文的扩散(然后您将得到两个正在运行的Ant实例)。更好的是,找到一种方法在两个文件中导入完全相同的base.xml(具有相同的绝对路径)。

您正在使用Ant 1.6吗?这个已解决的Ant错误看起来与此相同。

编辑

我试着复制你最近评论中提到的目录结构。

./base.xml
./buildA
./buildA/buildA.xml
./buildB
./buildB/buildB.xml

并相应地修改构建文件,例如

<project name="buildA">
<import file="../base.xml"/>
<target name="build">
  <ant antfile="../buildB/buildB.xml" target="build" inheritall="false" inheritrefs="false"/>
</target>
</project>

对于ant 1.8.2或1.7.1,我仍然没有得到构建错误:

ant -f buildA/buildA.xml build

相关内容

  • 没有找到相关文章

最新更新