我有一个属性文件(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>
但是&#39;不是&#39;和&#39;条件&#39;不要复制。
如果找不到文件,loadProperties将失败 - 但它不会复制文件。
理想情况下,我希望能够在初始文件加载失败后立即复制新的x.props。
有什么方法吗?
ant 1.1版 java 7
由于
答案 0 :(得分:2)
使用ant-contrib <if>
任务可能最简单:
<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的固有属性不变性。
相反,如果你真的想使用一个单独的属性文件来保存你的默认值,只需执行与上面相同的操作,但用另一个属性文件load替换各个属性赋值:
<property file="x.props" />
<property file="default.props" />