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

时间:2013-11-08 10:45:10

标签: java spring maven

我有spring-job.xml的application-context.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中的变量是否会改变应用程序-context文件中的值?为什么pom会读取/编辑应用程序上下文文件?

任何人都可以遇到同样的问题吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您正在使用maven过滤文件。

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

在你的情况下,占位符maven的使用与Spring使用的相同,所以你有几个选择:

1)转义占位符,如here

<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的delimiters

<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)禁用过滤为here。这可能是最简单的解决方案,但也可能会破坏。

答案 1 :(得分:1)

这称为资源过滤。它由maven-resources-plugin完成,可以在POM中关闭。

有关详细信息,请参阅documentation

答案 2 :(得分:0)

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

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