有没有一种方法可以在构建时自动替换.java文件中的模式?

3

我希望能够在构建时替换.java文件中的特定模式。 实际上,我只想要将某些字符串值替换为表示构建时间的值。 (我还希望保留原始源文件的完整性)。 除了手动方式外,是否有一种容易的方法来实现它呢? 我正在使用NetBeans作为我的IDE。

5个回答

8

最好不要将此模式放在Java文件中,而是从资源(例如.properties文件)中加载它。

Maven具有资源过滤功能,您可以使用配置文件更改特定资源或从其他位置复制资源。Ant也提供了使用各种资源位置的机会。

您始终可以手动复制另一个属性文件。在所有情况下,源Java文件都保持不变。代码可以从IDE中运行,您可以在不重新编译代码的情况下更改模式。


f.g. 代表什么? - TRiG

3
我不确定如何编辑Java代码。但是,如果您使用Maven,则有一种方法可以解决这个问题。创建一个属性文件,再创建一个工具类来读取该属性文件。在其他需要在构建时替换属性的类中使用此类。
基本上,需要创建一个config.properties文件,其中包含:
myprop1=${val1}
myprop2=${val2}

编写一个包含配置文件和执行指令的Maven pom.xml文件
<profiles>
  <profile>
      <id>local</id>
      <properties>
        <val1>localval1</val1>
        <val2>localval2</val2>
      </properties>
  </profile>
  <profile>
      <id>prod</id>
      <properties>
        <val1>prodval1</val1>
        <val2>prodval2</val2>
      </properties>
  </profile>
</profiles>

创建一个类来读取config.properties文件,并使用它来读取动态数据。
使用mvn -Plocal clean install或mvn -Pprod clean install构建,以便根据配置文件中的配置替换值。
希望这可以帮助您。
使用ANT,您也可以做同样的事情。在ANT中,您可以创建多个配置文件,例如local.config.properties和prod.config.properties。在构建时,您可以传递参数,例如'local'或'prod'。
执行资源复制操作,根据参数前缀将相应的文件复制到classpath中(因此将复制local.config.properties或prod.config.properties)。复制到classpath后,将其重命名为config.properties。

3
我们的产品需要类似的功能(将构建时间、构建电脑和用户名嵌入到编译后的应用程序中)。
我们使用ant的manifest任务将一个包含所需信息的清单嵌入JAR文件中。请参见http://ant.apache.org/manual/Tasks/manifest.html
可以使用工具轻松地从JAR文件中读取清单。如果您需要在软件中获取这些信息,可以通过编程方式读取它,或者将其放入.build文件夹中(在构建时生成),然后再从程序中读取。

1

尝试使用Ant的“replace”任务,这是一个示例:

<replace file="${src}/index.html" token="@@@" value="wombat"/>

用字符串"wombat"替换文件${src}/index.html中的字符串"@@@"。


1

我认为Ant或Maven可能对你有所帮助 - 你使用其中任何一个来执行构建吗?我没有使用过Maven,但在Java中做过类似的事情。


我相信NetBeans使用Ant来构建Java项目。但是我应该如何使用Ant进行替换呢? - Rogach
我认为lechlukasz在下面给出了很好的建议 - 将项目外部化到属性文件中,然后自动更新此文件(使用Maven / Ant),或手动更新 - 如果它只在一个地方指定,这将更容易。 - TrueDub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接