【问题标题】:Ant: Replace tokens in source file multiple timesAnt:多次替换源文件中的令牌
【发布时间】:2012-05-21 06:51:06
【问题描述】:

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

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

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

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

我不想将 Config.java 放在项目之外,因为我希望它可以与 eclipse 一起使用,并且如果文件不在预期位置,则会出现很多编译错误。

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

有什么帮助吗?提前致谢。

【问题讨论】:

  • 最好的解决方案是在单独的临时位置运行构建,而不是在您的 Eclipse 项目中。
  • 您的意思是复制项目并在那里运行脚本?不错的主意,并且可以编写脚本。
  • 是的,我就是这个意思。通常从源存储库中检索一个空的构建文件夹,构建和清理。

标签: java eclipse ant properties build


【解决方案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 中运行以进行测试,并且仍然可以成功编译。

【讨论】:

  • 有趣的想法,但我更喜欢 rsp 的建议(请参阅我的帖子的评论),这导致我制作了一个脚本来复制项目并在副本中运行构建。您的想法增加了项目的复杂性。
猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多