Java Maven概要文件过滤器在构建WAR时工作,但在Tomcat7运行时不工作
我试图使用Maven在开发和生产环境中的web.xml文件中引入一个不同的配置点。看起来使用概要文件和过滤器是一种可行的方法,当我使用mvn安装或mvn包构建WAR文件时,这实际上是可行的。但是,通过Tomcat7插件运行它总是会导致无法解析占位符错误。以下是相关线路: 在web.xml中-这是我试图设置的占位符Java Maven概要文件过滤器在构建WAR时工作,但在Tomcat7运行时不工作,java,maven,tomcat,Java,Maven,Tomcat,我试图使用Maven在开发和生产环境中的web.xml文件中引入一个不同的配置点。看起来使用概要文件和过滤器是一种可行的方法,当我使用mvn安装或mvn包构建WAR文件时,这实际上是可行的。但是,通过Tomcat7插件运行它总是会导致无法解析占位符错误。以下是相关线路: 在web.xml中-这是我试图设置的占位符 /WEB-INF/${sec-file-path} 在pom.xml中 <profiles> <profile> <id>
/WEB-INF/${sec-file-path}
在pom.xml中
<profiles>
<profile>
<id>development</id>
<properties>
<sec-file-path>one-thing-for-dev.xml</sec-file-path>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<sec-file-path>one-thing-for-prod.xml</sec-file-path>
</properties>
</profile>
</profiles>
....
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId> maven-war-plugin </artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<include>**/web.xml</include>
</includes>
</resource>
</webResources>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
运行命令mvn package-p development按预期工作,并适当地填充占位符。但是,运行mvn tomcat7:run-P开发结果会导致无法解决占位符错误。欢迎提出任何建议 我发现了类似的行为,在mvn tomcat:run tomcat 6上运行似乎会正确放置占位符值,但突然mvn tomcat7:run tomcat 7会失败 我认为事实上,Tomcat6插件已经超出了它的界限,Tomcat7插件工作正常。我不是Spring或Maven方面的专家,所以请恕我直言 Spring文件applicationContext.xml应该从属性占位符文件而不是Maven筛选器进程获取占位符值 解决这个问题的方法是使用Spring控制的属性文件中的占位符值,而不是maven过滤器文件。您仍然可以利用过滤器文件中的数据,只需通过属性文件传递这些数据即可完成工作 按常规设置过滤器: pom.xml src/main/filters/local.properties src/main/resources 符合事实的 src/main/webapp 符合事实的 ... 创建过滤器属性文件: src/main/filters/local.properties 创建Spring占位符属性文件: src/main/resources/META-INF/spring/timeout.properties 最后,在应用程序上下文中配置占位符: src/main/resources/META-INF/spring/applicationContext.xml ... 当Maven运行其资源阶段时,timeout.properties文件中的占位符值将更新为在local.properties文件中找到的值 当Spring进程稍后在运行阶段运行时,它将查询applicationContext.xml文件以查找占位符,并用在占位符配置文件timeout.properties中找到的值填充占位符 注意:变量名称不必不同,例如spring.session.timeout与session.timeout。我这样做只是为了区分两者
# Session
session.timeout=20
# Session
spring.session.timeout = ${session.timeout}