使用 POM 构建时更改应用程序上下文文件



我有用于春季批处理作业的应用程序上下文.xml文件,该文件使用属性占位符从database.properties中读取值。

我正在使用pom文件来构建tar.gz文件。

我在 unix 机器上构建和解压缩它。 然后在检查应用程序上下文文件后,其占位符值将更改为 Maven URL。

以下正在发生。

构建前:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driverClassName}" />
            <property name="url"
                    value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" /></bean>

在执行Maven安装后通过以下更改:

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${driverClassName}" />
            <property name="url"
                    value="http://maven.apache.org" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
 </bean>

pom 文件中声明了"url"变量,该变量的 url 值被替换。pom 中的变量是否会更改它在应用程序上下文文件中的值?为什么 POM 会读取/编辑应用程序上下文文件?

有人能遇到同样的问题吗?谢谢你的帮助。

您正在使用 maven 过滤文件。

过滤时,maven 将替换文件中的占位符,就像在 POM 中一样。如果要动态分配值,这将非常有用。

在您的情况下,maven使用的占位符与Spring使用的占位符相同,因此您有几种选择:

1)转义占位符,如下所示

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          ...
          <escapeString></escapeString>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>

然后在文件中,您将${}

2)更改maven的分隔符

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          ...
          <delimiters>
            <delimiters>@</delimiters>
          </delimiters>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>

这将解决您的问题,但如果您依赖其他地方的过滤,则需要更改这些文件。

3)禁用过滤,如下所示。这可能是最简单的解决方案,但也可能会破坏事情。

称为资源筛选。它是由 maven-resources-plugin 完成的,可以在 POM 中关闭。

有关详细信息,请参阅文档。

可能,通过过滤"maven-resources-plugin"更改了 URL:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

其他一些插件也支持过滤,检查pom.xml。

最新更新