我有用于春季批处理作业的应用程序上下文.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。