使用maven修改Java文件占位符

Posted

技术标签:

【中文标题】使用maven修改Java文件占位符【英文标题】:Modify Java file placeholder using maven 【发布时间】:2015-02-27 23:20:33 【问题描述】:

我调用了一个 Web 服务,不幸的是它的命名空间会根据服务器域名发生变化。这使得源代码控制合并变得困难,并导致许多构建错误。可以使用 maven 替换 Java 文件中此类变体变量的占位符吗?这将有助于我设置托管 Web 服务的服务器的域名,而不是修改包含命名空间的所有文件。

【问题讨论】:

与其修改源代码,不如为构建生成不同的属性文件并让源代码读取该文件以进行自我配置> 我使用 wsimport 实用程序来生成 Web 服务工件,所有这些工件都被注释并且注释包括 Web 服务命名空间。在运行时替换注释值不是我的选择。所以,我不能使用属性文件来存储这样的配置参数 尝试探索该插件的源代码,如果它已经不支持 fork 它 看看mojo.codehaus.org/templating-maven-plugin 【参考方案1】:

是的,你可以通过使用 maven 来做到这一点。

(1) 在本地 maven 存储库中创建一个 setting.xml 文件。如下所述。 http://maven.apache.org/settings.html

您可以在其中为您的每台服务器创建不同的配置文件,具有不同的属性,如下所示

<profile>
  <id>local</id>
  <properties>
       <hibernate.connection.url>jdbc:mysql://localhost:3306/my_db</hibernate.connection.url>
       <hibernate.connection.username>db_user_name</hibernate.connection.username>
       <hibernate.connection.password>db_password</hibernate.connection.password>
  </properties>
</profile>

<profile>
  <id>dev</id>
  <properties>
       <hibernate.connection.url>jdbc:mysql://dev_url:3306/my_db</hibernate.connection.url>
       <hibernate.connection.username>dev_db_user_name</hibernate.connection.username>
       <hibernate.connection.password>dev_db_password</hibernate.connection.password>
  </properties>
</profile>

<profile>
  <id>production</id>
  <properties>
       <hibernate.connection.url>jdbc:mysql://prod_url:3306/my_db</hibernate.connection.url>
       <hibernate.connection.username>prod_db_user_name</hibernate.connection.username>
       <hibernate.connection.password>prod_db_password</hibernate.connection.password>
  </properties>
</profile>

注意:您可以根据需要创建任意数量的自定义属性。

(2) 在项目工作区的属性文件中。使用占位符而不是硬编码值。比如 db_connection_url = $hibernate.connection.url

假设属性文件存在于位置:src/main/resources/

(3) Pom.xml 文件将“filtering”设置为 true,如下所示

<build>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
</build>

(4) 项目构建:使用-P选项,指定配置文件,创建项目构建文件时需要使用。例如

为本地服务器构建时使用命令:mvn -P local clean package 为本地服务器构建时使用命令:mvn -P dev clean package 为本地服务器构建时使用命令:mvn -P production clean package

Maven 将使用适当的配置文件并将所有占位符替换为定义属性。

注意:您也可以在 pom.xml 中定义标签,而不是创建 setting.xml 文件

【讨论】:

以上是关于使用maven修改Java文件占位符的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从外部 Maven 依赖项在 Spring Java 项目中导入占位符值 (@Value)?

如何从 Maven 插件访问 Maven 占位符?

java中有啥方法可以读取占位符的字符串,并且把占位符替换成参数

flyway POM.XML 中的默认占位符

java中占位符怎么用

SQL 语句在Java中如何使用占位符?