将xml属性传递给ant build.xml文件

时间:2014-05-20 12:22:55

标签: actionscript-3 flex ant

我使用Ant来构建我的swf输出文件。 我有项目目录(以及项目src / *。作为文件)build.xml,package.config和directory.properties文件。 package.config文件是由Nuget在外部创建的,所以我需要依赖它中的值:

<packages>
    <package id="Lib1" version="1.0" />
    <package id="Lib2" version="1.0" />
</packages>

现在在build.xml中我正在添加文件:

<property file="package.config" /> 

然后我需要包含名称为package.id和package.version的库(compiler.include-libraries) 即:

<include name="package.id" + "package.version" + ".swc" />

不幸的是我不能这样做。我应该在某处存储包属性,然后使用它传递给标签中的name属性。 提前感谢任何线索。

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用xmlproperty task结合script task使用内置(自Java 1.6.0_06)javascript引擎。

鉴于Nuget的xmlfile:

<packages>
 <package id="Foo" version="1.0"/>
 <package id="Bar" version="1.0"/>
</packages>

使用给定xmlfile的Ant片段:

<project>

<xmlproperty file="yournugetfile.xml" collapseAttributes="true"/>

<!-- show properties from xmlpropertyfile -->
<echoproperties prefix="packages"/>

<!-- produce includes from those package properties -->
<script language="javascript">
<![CDATA[
 var pids = project.getProperty('packages.package.id').split(',');
 var pvers = project.getProperty('packages.package.version').split(',');
 var incl = "";
 for (i=0; i < pids.length; i++) {
  incl += pids[i] + pvers[i] + '.swc' + ',';
 }
 project.setProperty('cincludes', incl.substring(0, incl.length - 1));
]]>
</script>

<echo>$${cincludes} => ${cincludes}</echo>

<!-- demonstrate possible use -->
<echoxml>
 <compiler.library-path dir="some/path" append="true">
  <include name="${cincludes}"/>
 </compiler.library-path>
</echoxml>

</project>

输出:

[echoproperties] #Ant properties
[echoproperties] #Tue May 20 16:37:54 CEST 2014
[echoproperties] packages.package=,
[echoproperties] packages.package.id=Foo,Bar
[echoproperties] packages.package.version=1.0,1.0
[echo] ${cincludes} => Foo1.0.swc,Bar1.0.swc
<?xml version="1.0" encoding="UTF-8"?>
<compiler.library-path append="true" dir="some/path">
  <include name="Foo1.0.swc,Bar1.0.swc" />
</compiler.library-path>

答案 1 :(得分:0)

您可能希望在.properties文件中包含属性。这将使您的生活更轻松,并且不需要额外的工具(如XMLtask)将它们从您提到的XML文档中删除。仔细阅读Ant's documentation about how properties work.通过看起来像$ {this}的引用扩展属性,并且您不需要像您尝试那样使用+符号连接内容。

你最终会写一些看起来更像是这样的东西:

<include name="${package.id}${package.version}.swc"/>