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

标签 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 一起使用,并且如果文件不在预期位置,则会出现很多编译错误。

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

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

最佳答案

当我必须处理这项任务时,我采用了不同的方式。 ant 脚本总是创建一个名为 Version.java 的文件,而不是编辑真正的源文件。 Version.java 永远不会 checkin 存储库,但 Version 实现的接口(interface)却可以。这样,您就不必静态依赖于生成的文件是否存在。

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 中运行进行测试并且仍然编译成功。

关于java - Ant:多次替换源文件中的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10572286/

相关文章:

Java 11、JavaFX、Gradle、Eclipse,令人讨厌的失败消息

java - 通话失败: tts engine connection not fully setup in the TextToSpeech functionality

java - 咀嚼 JVM 内存

java - 如何在 Java 应用程序中使用文件的系统上下文菜单?

c - 在 ubuntu 上的 eclipse 中打开 .txt 文件时无输出显示

java - 使用 ANT 从 eclipse 功能运行测试

ant - 从 Ant : passing a space-separated list of files to java 调用 FindBugs

java - 升级 commons-lang-2.6.jar 会抛出 NoClassDefFoundError

java - C 服务器只返回第一条消息

java - 在 Eclipse 编辑器中鼠标悬停时显示指令/功能信息