Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Ant有条件地从模板复制文件并加载属性_Java_Svn_Ant - Fatal编程技术网

Java Apache Ant有条件地从模板复制文件并加载属性

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

我有一个属性文件(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"/>
    <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,如果我知道它能如此轻松地解决问题,我本可以节省一些时间。我用:来添加它。感谢元素不必以