代码之家  ›  专栏  ›  技术社区  ›  Rob Hruska MegalomanINA

如何在项目之间最好地共享Ant目标?

  •  12
  • Rob Hruska MegalomanINA  · 技术社区  · 14 年前

    Ant 项目之间的目标?我目前有一个解决方案,但有点不雅观。以下是我目前正在做的事情。

    我有一个文件叫 ivy-tasks.xml Ivy

    <project name="ant-ivy-tasks" default="init-ivy"
             xmlns:ivy="antlib:org.apache.ivy.ant">
      ...
      <target name="ivy-download" unless="skip.ivy.download">
        <mkdir dir="${ivy.jar.dir}"/>
        <echo message="Installing ivy..."/>
        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
             dest="${ivy.jar.file}" usetimestamp="true"/>
      </target>
    
      <target name="ivy-init" depends="ivy-download"
              description="-> Defines ivy tasks and loads global settings">
        <path id="ivy.lib.path">
          <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                 uri="antlib:org.apache.ivy.ant"
                 classpathref="ivy.lib.path"/>
        <ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
      </target>
      ...
    </project>
    

    此文件承载的原因是我 不要

    • 将文件签入每个需要它的项目-这将导致重复,使维护目标更加困难。
    • 让我的build.xml依赖于从源代码管理签出一个项目——这将使构建在顶层有更多的xml来访问文件。

    在我的项目的build.xmls中,我对该文件的处理大致如下:

    <property name="download.dir" location="download"/>
    <mkdir dir="${download.dir}"/>
    <echo message="Downloading import files to ${download.dir}"/>
    
    <get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
    <import file="${download.dir}/ivy-tasks.xml"/>
    

    目标之外 import task 必须是顶级的。另外,我还必须在所有需要它的build.XML文件中包含这个XML(即,仍然有一些重复)。

    对于我想要完成的事情,有更好的解决方案吗?

    4 回复  |  直到 13 年前
        1
  •  7
  •   Mads Hansen    13 年前

    http://ant.apache.org/manual/Tasks/import.html

    由于Ant 1.8.0,该任务还可以 类路径资源(URL、, 当前生成文件的源已被删除 您可以查阅文件或URL 属性ant.file.type.projectname (使用与上述相同的示例) 具有值“file”或“url”。

    <!-- importing.xml -->
    <project name="importing" basedir="." default="...">
      <import file="http://myserver/ivy/ivy-tasks.xml"/>
    </project>
    
        2
  •  3
  •   martin clayton egrunin    13 年前

    如果你使用 Antlibs 您可以将它们全部打包到一个JAR文件中。然后只需将此文件复制到 ${ANT_HOME}/lib 使用它们的目录。

        3
  •  1
  •   Rob Hruska MegalomanINA    14 年前

    经过一些额外的搜索,一个可能的解决方案是使用 SVN externals 签出build.xml可能需要的特定必需文件。

        4
  •  0
  •   slipset    14 年前

    我们所做的是创建一个名为“bootstrap”的项目,其中包含办公室其他项目所需的各种xml文件。 因此,要设置开发环境,请在引导中运行build.xml,将xml文件(如ivy文件和其他目标文件)复制到已知位置,然后构建文件包括以下内容:

    <import file="${ant.bootstrap.dir}/ant-commons.xml" />
    <import file="${ant.bootstrap.dir}/ant-commons-ear.xml" />
    

    我们的bootstrap build.xml包含以下内容:

    <target name="install">
            <fail unless="ant.bootstrap.dir" message="ant.bootstrap.dir ${missing.property.message}"/>
            <copy todir = "${ant.bootstrap.dir}">
                <fileset dir = "src/xml"/>
            </copy>
    </target>