从Maven Tomcat插件运行war文件——插件是否使用了错误的文件?

从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插件运行时,出现以下错误(我遗漏了清理和测试消息

我正在使用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>
        ...