Java Apache Ant有条件地从模板复制文件并加载属性
我有一个属性文件(x.props),其中包含Ant构建所需的属性: x、 道具:Java Apache Ant有条件地从模板复制文件并加载属性,java,svn,ant,Java,Svn,Ant,我有一个属性文件(x.props),其中包含Ant构建所需的属性: x、 道具: prop1=something prop2=somethingElse 在build.xml中设置: <property file="x.props" /> 然后在路径任务中使用x.props中包含的属性: <path id="project.class.path"> <pathelement location="${prop1}/important.jar"/
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
这有什么办法吗
ant版本1.1
爪哇7
谢谢使用ant contrib的
任务,这可能是最简单的:
<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,如果我知道它能如此轻松地解决问题,我本可以节省一些时间。我用:来添加它。感谢元素不必以