Java Ant:多次替换源文件中的令牌
我有一个带有常量的Java配置文件 我使用ant根据构建替换常量的值。在预编译目标中:Java Ant:多次替换源文件中的令牌,java,eclipse,ant,properties,build,Java,Eclipse,Ant,Properties,Build,我有一个带有常量的Java配置文件 我使用ant根据构建替换常量的值。在预编译目标中: <replace file="Config.java" value="default" propertyFile="${build.env}.properties"> <replacefilter token="@mytoken@" property="myprop.x"/> </replace> 效果很好。但是在我运行这
<replace
file="Config.java"
value="default"
propertyFile="${build.env}.properties">
<replacefilter
token="@mytoken@"
property="myprop.x"/>
</replace>
效果很好。但是在我运行这个之后,我的源文件被修改了。因此,如果我再次运行它,它将不会替换任何内容,因为@mytoken@是第一次被替换的
我不想把Config.java放在项目之外,因为我希望它能与eclipse一起工作,如果文件不在预期的位置,就会出现很多编译错误
我正在考虑在构建后的目标中替换回去,但不确定这是否安全。如果构建失败或用户中断脚本,它将不会运行,并且不会设置回值
有什么帮助吗?提前谢谢。当我不得不处理这项任务时,我用了另一种方式。ant脚本总是生成一个名为
Version.java
的文件,而不是编辑真正的源文件<代码>版本.java从未签入存储库,但接口Version
实现是。这样,您就不必静态地依赖于生成的文件的存在
public String getVersionHelper() {
try {
Class versionClass = Class.forName("Version");
IVersion version = (IVersion) versionClass.newInstance()
return version.getVersion();
} catch (ClassNotFoundException ex) {
return "NO VERSION";
}
}
关键的一点是,正式的构建总是使用ant完成的,而不是eclipse。这允许您在eclipse中运行以进行测试,并且仍然能够成功编译。最好的解决方案是在单独的临时位置运行构建,而不是在eclipse项目中。您的意思是复制项目并在那里运行脚本?这主意不错,而且可以写成剧本。是的,我就是这个意思。通常从源存储库中的空构建文件夹中检索,build and cleanup。这是一个有趣的想法,但我更喜欢rsp的建议(请参阅我文章的评论),这让我制作了一个脚本来复制项目并在副本中运行构建。你的想法增加了项目的复杂性。