我使用Ant构建swf输出文件。我已经在项目目录(连同项目src/*)。作为文件)build.xml,包。配置和目录。属性文件。包。配置文件是由Nuget外部创建的,所以我需要依赖其中的值:
<packages>
<package id="Lib1" version="1.0" />
<package id="Lib2" version="1.0" />
</packages>
现在在build.xml中我添加了文件:
<property file="package.config" />
,然后我需要包括库(compiler.include-libraries)包含在他们的名字包。Id和package.version例如:
<include name="package.id" + "package.version" + ".swc" />
不幸的是,我不能这样做。我可能应该将包属性存储在某个地方,然后使用它来传递标记中的名称属性。
一个可能的解决方案是使用xmlproperty任务与使用内置(自Java 1.6.0_06) javascript引擎的脚本任务相结合。
给定的xmlfile from Nuget:
<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>
您可能希望在.properties文件中拥有包属性。这将使您使用Ant的工作更轻松,并且不需要像XMLtask这样的额外工具来从您提到的XML文档中提取它们。仔细阅读Ant的文档,了解属性是如何工作的。属性从类似${this}的引用中展开,你不需要像你试图做的那样用+号连接东西。
你最终会写一些像这样的东西:
<include name="${package.id}${package.version}.swc"/>