Ant:多次替换源文件中的标记

时间:2012-05-13 13:49:43

标签: java eclipse ant properties build

我有一个带常量的Java配置文件。

我正在使用ant来根据构建替换常量的值。在预编译目标中:

<replace 
    file="Config.java"
    value="default"
    propertyFile="${build.env}.properties">
<replacefilter 
    token="@mytoken@" 
    property="myprop.x"/>
</replace>

运作良好。但是在我运行之后我的源文件被修改了。因此,如果我再次运行它,它将不会替换任何东西,因为@ mytoken @第一次被替换。

我不想将Config.java放在项目之外,因为我希望它能够与eclipse一起使用,如果文件不在预期的位置,会产生很多编译错误。

我正在考虑替换后期构建目标或其他东西,但不确定这是否安全。如果构建失败或用户中断脚本,它将不会运行,并且不会重置该值。

有任何帮助吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

当我不得不处理这项任务时,我采用了另一种方式。 ant脚本总是创建一个名为Version.java的文件,而不是编辑真实的源文件。永远不会将Version.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中运行以进行测试并仍然可以成功编译。