我有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会读取/编辑应用程序上下文文件?
任何人都可以遇到同样的问题吗?谢谢你的帮助。
答案 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。