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

Posted

技术标签:

【中文标题】如何在 ivy.xml 中包含文件?【英文标题】:How to include a file in ivy.xml? 【发布时间】:2010-12-18 04:05:41 【问题描述】:

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

我想把这个大的重复部分分解成一个通用的包含文件。不知何故,我找不到任何描述可以做到这一点的文档。

谁知道这是否可行?

编辑:经过进一步思考,我认为这是不可行的。一个 Ivy 文件是一个有凝聚力的单元,不应包含基于文件的引用,只包含对其他 ivy 模块的引用...

【问题讨论】:

【参考方案1】:

您可以创建一个 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->Ivy 翻译的传统配置命名约定,尽管您可以以任何对您有意义的方式映射配置名称。我倾向于使用 ivy:install 任务将 Maven 模块复制到我们的 Ivy 存储库中,所以我大部分使用默认的 ivy.xmls。如果您使用的是 IvyRoundup,则主要希望传递映射“默认”配置。

【讨论】:

【参考方案2】:

如果您使用 ant 的 ivy 并且运行的是 Ant 1.6 或更高版本,则可以使用 &lt;import&gt; 任务将构建文件片段包含在您的 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>

这实际上将包括您放置&amp;common; 实体的common.xml 的内容。

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

【讨论】:

以上是关于如何在 ivy.xml 中包含文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将解析的 ivy.xml 发布到 Nexus

如何在 .tsx 打字稿中包含 .css 文件?

如何在 HTML 中包含 SCSS 文件 [关闭]

如何在 vuejs 组件中包含 js 文件?

如何在文件中包含php别名

如何在 JSFL 文件中包含一些 js 文件?