Java Maven概要文件过滤器在构建WAR时工作,但在Tomcat7运行时不工作

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>

我试图使用Maven在开发和生产环境中的web.xml文件中引入一个不同的配置点。看起来使用概要文件和过滤器是一种可行的方法,当我使用mvn安装或mvn包构建WAR文件时,这实际上是可行的。但是,通过Tomcat7插件运行它总是会导致无法解析占位符错误。以下是相关线路:

在web.xml中-这是我试图设置的占位符

/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}