从Maven Tomcat插件运行war文件——插件是否使用了错误的文件?
我正在使用Vaadin开发一个web应用程序,并对其进行配置,使其能够在开发、暂存和生产环境中运行。我的问题是,我很难让Tomcat7 Maven插件运行我的war文件。war文件很好--我已经用编辑器检查过了。我在spring-context.xml(我称之为applicationContext.xml)中使用占位符来代替数据库信息。我使用Maven资源过滤来用真实数据替换占位符。这在war文件中有效 但是,当我尝试使用Tomcat7 Maven插件运行时,出现以下错误(我遗漏了清理和测试消息):从Maven Tomcat插件运行war文件——插件是否使用了错误的文件?,tomcat,maven,war,vaadin,Tomcat,Maven,War,Vaadin,我正在使用Vaadin开发一个web应用程序,并对其进行配置,使其能够在开发、暂存和生产环境中运行。我的问题是,我很难让Tomcat7 Maven插件运行我的war文件。war文件很好--我已经用编辑器检查过了。我在spring-context.xml(我称之为applicationContext.xml)中使用占位符来代替数据库信息。我使用Maven资源过滤来用真实数据替换占位符。这在war文件中有效 但是,当我尝试使用Tomcat7 Maven插件运行时,出现以下错误(我遗漏了清理和测试消息
[信息]
[信息]---GWTMaven插件:2.4.0:compile(默认)@dpt---
[信息]自动发现模块[com.catalystitservices.nike.dpt.widgetset.DptWidgetset]
[信息]com.catalystitservices.nike.dpt.widgetset.DptWidgetset是最新的。已跳过GWT编译
[信息]
[信息]---maven war插件:2.2:war(默认war)@dpt---
[信息]打包webapp
[信息]正在[C:\Projects\dpt\target\dpt]中组装webapp[dpt]
[信息]处理战争项目
[信息]正在将webapp webResources[C:\Projects\DPT\src/main/webapp/]复制到[C:\Projects\DPT\target\DPT]
[信息]正在复制webapp资源[C:\Projects\DPT\src\main\webapp]
[信息]Webapp在[1407毫秒]内组装
[信息]构建war:C:\Projects\DPT\target\DPT.war
[信息]
[信息]---maven安装插件:2.3.1:install(默认安装)@dpt---
[信息]将C:\Projects\DPT\target\DPT.war安装到C:\Users\ksnortum\.m2\repository\com\nike\DPT\DPT\1.1-SNAPSHOT\DPT-1.1-SNAPSHOT.war
[信息]正在将C:\Projects\DPT\pom.xml安装到C:\Users\ksnortum\.m2\repository\com\nike\DPT\DPT\1.1-SNAPSHOT\DPT-1.1-SNAPSHOT.pom
[信息]
[信息]>>>tomcat maven插件:1.1:run(默认cli)@dpt>>>
[信息]
[信息]---maven资源插件:2.5:resources(默认资源)@dpt---
[调试]执行上下文化
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]正在复制3个资源
[信息]正在复制3个资源
[信息]
[信息]---maven编译器插件:2.5.1:编译(默认编译)@dpt---
[信息]无需编译-所有类都是最新的
[信息]
[信息]这是tomcat7 maven插件中的一个bug,或者至少它没有像我预期的那样工作。从Maven运行Tomcat服务器时,它不使用war文件或目录中的配置文件。你可以在我做的Github项目中看到这一点:
编辑:好吧,这本身并不是一个bug,但是Tomcat插件和资源过滤插件不会相互对话。他们没有理由这样做,除非你过滤资源,Tomcat插件永远也找不到它们
您必须明确地告诉Tomcat插件过滤资源的位置。默认值为${project.build.directory}/${project.build.finalName},因此可以将其添加到Tomcat插件配置中:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat7MavenPlugin}</version>
<configuration>
...
<!-- Have Tomcat look in the file filtering folder -->
<warSourceDirectory>
${project.build.directory}/${project.build.finalName}
</warSourceDirectory>
</configuration>
...
...
...
...
org.apache.tomcat.maven
tomcat7 maven插件
${tomcat7MavenPlugin}
...
${project.build.directory}/${project.build.finalName}
...
我不明白为什么tomcat7:run
没有使用Maven War插件中配置的过滤资源。这正是我所缺少的。默认情况下,该插件似乎使用src/main/webapp作为其WAR源,但我在Maven Tomcat插件文档中找不到这一点。
<build>
<finalName>dpt</finalName>
<filters>
<filter>src/main/resources/props/dev.properties</filter>
</filters>
<resources>
<resource>
<!-- Currently, log4j.properties -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<!-- WAR file plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${mavenWarPlugin}</version>
<configuration>
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
<warName>dpt</warName>
<filters>
<filter>src/main/resources/props/dev.properties</filter>
</filters>
<webResources>
<resource>
<!-- Currently, spring context files -->
<directory>src/main/webapp/</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat7MavenPlugin}</version>
<configuration>
...
<!-- Have Tomcat look in the file filtering folder -->
<warSourceDirectory>
${project.build.directory}/${project.build.finalName}
</warSourceDirectory>
</configuration>
...