如果要永久更改文件,可以使用task。
我会做以下事情:
创建一个示例属性文件,例如 default.properties.sample。
创建一个接收给定 -D 属性的目标,然后,如果它被告知,则对文件 default.properties.sample 进行替换,并将其保存到 default.properties 文件中。default.properties.sample 将包含以下几行:
test.url=https:\\url:port
test.path=@test_path@
test.location=Location
test.version=1
该操作会将@test_path@ 标记替换为属性的实际值,如-D 参数中所述,然后将生成的文件保存为default.properties。就像是:
<copy file="default.properties.sample" toFile="default.properties" />
<replace file="default.properties" token="@test_path@" value="${test.path}" />
需要做一些调整,比如:只有在通知了-D参数的情况下才替换属性,否则每次都会替换文件。
路径等也应根据您的需要进行调整。
我已经测试了以下场景,它对我有用:
我创建了两个文件:一个 build.xml 和一个 default.properties.sample。它们的内容如下:
构建.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildTest" default="showProperties" basedir=".">
<property file="default.properties"/>
<target name="showProperties">
<echo message="test.property=${test.property}"/>
</target>
<target name="replace">
<fail unless="new.test.property" message="Property new.test.property should be informed via -D parameter"/>
<copy file="default.properties.sample" toFile="default.properties"/>
<replace file="default.properties" token="@test_property@" value="${new.test.property}"/>
</target>
</project>
default.properties.sample:
test.property=@test_property@
他们运行以下测试:
默认运行:
C:\Filipe\Projects\BuildTest>ant
Buildfile: C:\Filipe\Projects\BuildTest\build.xml
showProperties:
[echo] test.property=${test.property}
BUILD SUCCESSFUL
Total time: 0 seconds
错误控制:
C:\Filipe\Projects\BuildTest>ant replace
Buildfile: C:\Filipe\Projects\BuildTest\build.xml
replace:
BUILD FAILED
C:\Filipe\Projects\BuildTest\build.xml:10: Property new.test.property should be informed via -D parameter
Total time: 0 seconds
财产置换:
C:\Filipe\Projects\BuildTest>ant replace -Dnew.test.property="This is a New Value"
Buildfile: C:\Filipe\Projects\BuildTest\build.xml
replace:
[copy] Copying 1 file to C:\Filipe\Projects\BuildTest
BUILD SUCCESSFUL
Total time: 0 seconds
替换后的属性文件:
C:\Filipe\Projects\BuildTest>type default.properties
test.property=This is a New Value
并且在随后的运行中出现了 test.property 的新值:
C:\Filipe\Projects\BuildTest>ant
Buildfile: C:\Filipe\Projects\BuildTest\build.xml
showProperties:
[echo] test.property=This is a New Value
BUILD SUCCESSFUL
Total time: 0 seconds
我想这就是你要找的。