首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何参数化蚂蚁中的路径?

如何参数化蚂蚁中的路径?
EN

Stack Overflow用户
提问于 2010-03-24 04:10:33
回答 6查看 1.4K关注 0票数 1

我在一个名为buil-dependencies.xml的文件中定义了以下内容

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="build-dependencies">
  ...
  <path id="common-jars">
    <fileset file="artifacts/project-1/jar/some*.jar" />
    <fileset file="artifacts/project-2/jar/someother*.jar" />
  </path>
  ...
</project>

我将它包含在我的build.xml文件的顶部。现在,我需要使工件文件夹成为一个参数,以便在执行不同目标时对其进行更改。拥有这个..。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="build-dependencies">
  ...
  <path id="common-jars">
    <fileset file="${artifacts}/project-1/jar/some*.jar" />
    <fileset file="${artifacts}/project-2/jar/someother*.jar" />
  </path>
  ...
</project>

在目标中定义“工件”属性(并对其进行更改)的...and不起作用,因为在构建依赖的the中定义路径时,似乎会发生属性替换。

我怎么才能解决这个问题?我的一种想法是在实际使用路径之前拥有一个参数化宏并调用它,但这似乎不太优雅。就像这样:

代码语言:javascript
复制
<macrodef name="create-common-jars">
  <attribute name="artifacts"/>
  <sequential>
    <path id="common-jars">
      <fileset file="@{artifacts}/project-1/jar/some*.jar" />
      <fileset file="@{artifacts}/project-2/jar/someother*.jar" />
    </path>
  </sequential>
</macrodef>

编辑:常春藤和命令行参数不是一个选项。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-30 06:44:22

您不需要参数化路径。你想要一个PatternSet。您可以在顶层定义模式集,然后在需要时在单个目标中引用它。以你为例:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="build-dependencies">
  ...
  <patternset id="common-jars">
    <include name="project-1/jar/some*.jar" />
    <include name="project-2/jar/someother*.jar" />
  </patternset>
  ...
  <path id="instrumented-jars">
    <fileset dir="instrumented">
      <patternset refid="common-jars" />
    </fileset>
  </path>
  ...
  <path id="standard-jars">
    <fileset dir="not-instrumented">
      <patternset refid="common-jars" />
    </fileset>
  </path>
  ...
</project>
票数 3
EN

Stack Overflow用户

发布于 2010-03-24 19:58:13

让我们调用您的文件build.xml。所以你可以通过运行ant命令来执行它。在第一种情况下,工件名称是在下面第三行定义的属性中硬编码的。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="build-dependencies">
<property name="artifacts" value="first-value" />
  ...
  <path id="common-jars">
    <fileset file="artifacts/project-1/jar/some*.jar" />
    <fileset file="artifacts/project-2/jar/someother*.jar" />
  </path>
  ...
</project>

现在,当您想要更改它并为该工件属性使用另一个值时,我们将这样运行脚本。

代码语言:javascript
复制
ant -Dartifacts=new-value

这将覆盖build.xml中的硬编码工件值。

如果使用ant目标,您可以执行类似的操作,在第一行的目标中定义属性,如果要覆盖默认值,则在调用该目标时将属性作为参数传递。

你的评论让我想起了另外一件事。让开发人员创建一个工件-dir-name.xml文件。它将只有一行:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project name="artifacts-file">
<property name="artifacts" value="new-value" />
</project>

现在,在您的build.xml文件中,在定义工件属性的行之前,导入该文件:

代码语言:javascript
复制
<import file="artifacts-dir-name.xml" optional="true" />

在Eclipse中,如果存在此文件,则从该文件读取属性,并将工件设置为“新值”,否则将从build.xml读取该属性并设置为"first-value“。开发人员所需要做的就是确保该目录中存在工件-dir-name.xml文件。这也可以在Eclipse中运行。

票数 0
EN

Stack Overflow用户

发布于 2010-03-24 20:20:30

我建议使用常春藤来管理类路径依赖项。Ivy有一个名为configurations的简洁概念,它允许您根据工件的使用情况对工件集合进行分组。

下面是我自己构建的一个文件中的一个适配器:

代码语言:javascript
复制
<target name="retrieve" description="3rd party dependencies">
    <ivy:resolve/>

    <ivy:cachepath pathid="build.path" conf="build"/>
    <ivy:cachepath pathid="runtime.path" conf="runtime"/>
</target>

配置在ivy.xml文件中进行管理(将取代构建依赖的文件)

代码语言:javascript
复制
<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="HelloWorld"/>

    <configurations>
        <conf name="build" description="jars needed for build" />
        <conf name="runtime" extends="build" description="jars needed at runtime" />
    </configurations>

    <dependencies>
        <dependency org="org1" name="project1" rev="1.0" conf="build->default"/>
        <dependency org="org2" name="project2" rev="1.0" conf="build->default"/>
        <dependency org="org3" name="project3" rev="1.0" conf="runtime->default"/>
        <dependency org="org4" name="project4" rev="1.0" conf="runtime->default"/>
    </dependencies>
</ivy-module>

与每个项目相关联的jar工件将自动从在线maven存储库下载和缓存,或者您可以创建自己的本地存储库来保存本地拥有的工件的集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2505283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档