如何在ivy.xml中包含文件?

时间:2009-11-19 04:44:43

标签: ant ivy

我有一个相当大的ivy.xml,其中包含许多项目的相同配置。

我想将这个大的重复部分分解为一个常见的包含文件。不知怎的,我找不到任何描述可以做到这一点的文件。

有谁知道这是否可行?

编辑:在进一步思考之后,我认为这不是故意的。常春藤文件应该是一个有凝聚力的单元,不应该包含基于文件的引用,只引用其他常春藤模块......

2 个答案:

答案 0 :(得分:9)

您可以创建一个ivy元模块,它依赖于所有这些常见的包,然后让所有其他项目通过传递依赖来解析公共库:

    <?xml version="1.0"?>
    <ivy-module version="2.0">
        <info organisation="com.example" module="common-libs"/>
          <configurations>
            <conf name="runtime" transitive="true" visibility="public" />
            <conf name="master" transitive="true" visibility="public" />
            <conf name="compile" transitive="true" visibility="public" />
            <conf name="default" transitive="true" visibility="public" extends="master" />
          </configurations>
          <dependencies>
                <dependency org="oracle" name="ojdbc14_g" rev="10.2.0.3"
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
                <dependency org="tomcat" name="servlet-api" rev="6.0.16" 
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
                <dependency org="junit" name="junit" rev="4.3"
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
          </dependencies>
    </ivy-module>

对于一个典型的项目:

<?xml version="1.0"?>
    <ivy-module version="2.0">
    <info organisation="com.example" module="myproject"/>
      <configurations>
        <conf name="runtime" transitive="true" visibility="public" />
        <conf name="master" transitive="true" visibility="public" extends="runtime"/>
        <conf name="compile" transitive="true" visibility="public" />
        <conf name="default" transitive="true" visibility="public" extends="master" />
      </configurations>
      <dependencies>
        <dependency org="com.example" name="common-libs" rev="latest.release" 
          conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
      </dependencies>
    </ivy-module>

这里我使用了Maven解析器的POM-&gt; Ivy翻译的传统配置命名约定,尽管您可以以对您有意义的任何方式映射配置名称。我倾向于使用常春藤:安装任务将Maven模块复制到我们的Ivy存储库中,所以我大部分都使用默认的ivy.xmls。如果你正在使用IvyRoundup,你将主要想要传递地映射“默认”配置。

答案 1 :(得分:2)

如果您使用的是来自ant的ivy,并且您正在运行Ant 1.6或更高版本,则可以使用<import>任务在您的ant构建文件中包含构建文件片段。但是,引用的文件必须是完整的Ant构建文件:

<?xml version="1.0"?>
<project name="my-project" default="usage" basedir=".">
  <target name="setup">
    ...
  </target>

  <import file="./common.xml"/>
  ...
</project>

您还可以在ivy.xmlbuild.xml文件中使用标准XML语法:

<?xml version="1.0"?>
<!DOCTYPE project [
       <!ENTITY common SYSTEM "common.xml">
]>
<project name="my-project" default="usage" basedir=".">
  <target name="setup">
    ...
  </target>

  &common;
  ...    
</project>

这将完全包含common.xml放置&common;实体的内容。

(此示例中的文件名common.xml由XML解析器相对于包含XML文件进行解析。您还可以使用绝对file:协议URI。)