【问题标题】:Apache Ant conditionally copy file from template and load propertiesApache Ant 有条件地从模板复制文件并加载属性
【发布时间】:2014-05-14 13:30:13
【问题描述】:

我有一个属性文件 (x.props),其中包含 Ant 构建所需的属性:

x.props:

 prop1=something
 prop2=somethingElse

在 build.xml 中设置:

 <property file="x.props" />

x.props 中包含的属性然后用于路径任务:

 <path id="project.class.path">
    <pathelement location="${prop1}/important.jar"/>
    <pathelement location="${prop2}/anotherImportant.jar"/>
 </path>

编译开始之前。我没有在 build.xml 中明确创建这些属性

每个本地用户的 x.props 文件可能不同,但对于服务器构建,它不会改变。

我创建了一个 x.props.template 文件来解决用户不小心签入或更新此文件的问题(但他们需要能够签出)。我希望能够从 x.props.template 创建一个 x.props 文件(我将 x.props 设置为 svn:ignore)。

用户可以将模板文件保存为x.props并对其进行编辑-理论上,如果模板文件不存在,服务器Ant build.xml可以将模板文件复制到服务器x.props。

但这并没有发生。我尝试使用目标:

 <target name="x-props-file" unless="prop1" description="create a  
      local.properties file if it doesn't exist">
    <copy file="x.props.template" tofile="x.props" />     
  </target>

但它是在设置路径之后调用的。

我尝试创建文件作为条件:

 <condition available="x.props">
    <not>
      <copy file="x.props.template" tofile="x.props" />  
    </not>
</condition>

但 'not' 和 'condition' 不适用于文案。

如果找不到文件,loadProperties 将失败 - 但它不会复制文件。

理想情况下,我希望能够在初始文件加载失败后立即复制新的 x.props。

有没有办法解决这个问题?

蚂蚁版本 1.1 java 7

谢谢

【问题讨论】:

    标签: java svn ant


    【解决方案1】:

    这可能是 ant-contrib 的 &lt;if&gt; 任务最简单的:

    <if>
      <not>
        <available file="x.props" />
      </not>
      <then>
        <copy file="x.props.template" tofile="x.props" />
      </then>
    </if>
    

    编辑:我刚刚重新发现了我多年前在添加评论后给出的这个答案,并意识到有一个更好的解决方案不依赖于 ant-contrib。对原始海报有多大用处可能为时已晚,但我想我还是会提供它以防它对某人有所帮助:

    <property file="x.props" />
    
    <property name="prop1" value="something" />
    <property name="prop1" value="somethingElse" />
    
    <path id="project.class.path">
        <pathelement location="${prop1}/important.jar"/>
        <pathelement location="${prop2}/anotherImportant.jar"/>
    </path>
    

    不需要额外的模板文件。只需尝试先加载属性文件,然后立即设置默认值,利用 Ant 固有的属性不变性。

    相反,如果您真的想使用单独的属性文件来保存默认值,只需执行与上述相同的操作,但将各个属性分配替换为另一个属性文件加载:

    <property file="x.props" />
    <property file="default.props" />
    

    【讨论】:

    • doh,我试图避免使用 ant-contrib,如果我知道它可以轻松解决问题,我可以节省一些时间。我用:stackoverflow.com/questions/12891893/… 添加它。谢谢
    • 元素 not 必须以 &lt;if&gt; &lt;not&gt; &lt;available file="x.props" /&gt; &lt;/not&gt; &lt;then&gt; &lt;copy file="x.props.template" tofile="x.props" /&gt; &lt;/then&gt; &lt;/if&gt; 结尾
    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2012-07-06
    • 2011-10-22
    • 2016-06-14
    • 2017-12-19
    相关资源
    最近更新 更多