【问题标题】:passing xml attributes to ant build.xml file将 xml 属性传递给 ant build.xml 文件
【发布时间】:2014-05-22 01:53:10
【问题描述】:

我使用 Ant 构建我的 swf 输出文件。 我已经进入项目目录(连同项目 src/*.as 文件)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" />

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

【问题讨论】:

    标签: actionscript-3 apache-flex ant


    【解决方案1】:

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

    给定来自 Nuget 的 xmlfile:

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

    Ant sn-p 使用给定的 xmlfile :

    <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>
    

    【讨论】:

    • 感谢这些提示。我所需要的只是将我的 xml 文件分配为 xmlproperty 任务。经过小的修改后,我设法让我的构建工作。 :)
    • 很高兴 - 如果有帮助,您应该接受答案。
    【解决方案2】:

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

    你最终会写出更像这样的东西:

    &lt;include name="${package.id}${package.version}.swc"/&gt;

    【讨论】:

    • 是的,但我已经有我的 directory.properties 文件,其中存储了其他项目道具(主要是其他库的路径)。我只需要使用我的 xml 文件的方法,因为我们喜欢将 Nuget 包文件与其他项目库区分开来。最亲切的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多