【问题标题】:Why are my resources not getting copied in the "validate" phase?为什么我的资源没有在“验证”阶段被复制?
【发布时间】:2016-06-03 15:09:25
【问题描述】:

无论我是否打电话,我都在努力确保将正确的资源移至WEB-INF/config/

mvn gcloud:deploy

mvn tomcat7:run 

这就是我强制设置-Dpackage-mode=<value> 的原因。我将maven-resource-plugin 用于复制部分,如下所示:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>validate</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>src/main/webapp/WEB-INF/config</outputDirectory>
                <resources>
                    <resource>
                        <directory>src/main/assembly/${package-mode}/config</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

但是,如果我运行

mvn validate tomcat7:run -Dpackage-mode=dev 

为了启动服务器,文件没有被复制。

E:\java\mz\mz-server\mz-web-server>mvn validate tomcat7:run -Denv=dev -Dpackage-mode=dev
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mz-web-server 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-maven) @ mz-web-server ---
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-property) @ mz-web-server ---
[INFO]
[INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) > process-classes @ mz-web-server >>>
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-maven) @ mz-web-server ---
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-property) @ mz-web-server ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mz-web-server ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ mz-web-server ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ mz-web-server <<<
[INFO]
[INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ mz-web-server ---
[INFO] Running war on http://localhost:8080/
[INFO] Using existing Tomcat server configuration at E:\java\mz\mz-server\mz-web-server\target\tomcat
[INFO] setting SystemProperties:
[INFO]  gwt.codeserver.port=9876
[INFO] create webapp with contextPath:
Jun 03, 2016 5:24:57 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jun 03, 2016 5:24:57 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Jun 03, 2016 5:24:57 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
...

我在这里做错了什么?我实际上不知道validate 在这里是否是一个不错的选择,而且我并没有真正受制于某个阶段。我只想确保根据package-mode 复制配置文件。

但是:

如果我只是跑步

mvn validate -Dpackage-mode=dev 

然后一切都按预期工作 - 文件正在被复制。

【问题讨论】:

  • @A.DiMatteo 我尝试添加它,但它是一样的:/ 我更新了我的问题,提到我把它放在那里的方式如果我只是运行 mvn validate -Dpackage-mode=dev 没有问题。如果我先尝试validate,然后再尝试tomcat7:run,那就不行了..
  • 我看到你的更新并删除了我的评论,这确实不再有效。您实际上不需要使用-am 选项,它适用于构建某些模块而不是整个项目时的多模块项目。 skipTests 选项也不应该影响您的调用。在第一次尝试中,您从构建中获得了什么输出?从[INFO] ---- maven-resources-plugin ... 开始为它的copy-resources 目标?
  • @A.DiMatteo 将输出添加到我的问题中:)

标签: maven maven-resources-plugin


【解决方案1】:

您不应该使用maven-resources-plugin 来复制webapp 资源,该插件仅适用于应用程序资源。此外,您应该永远src 下生成或复制文件,就像您对&lt;outputDirectory&gt;src/main/webapp/WEB-INF/config&lt;/outputDirectory&gt; 所做的那样。生成的文件应始终放在target 文件夹下。

改为使用maven-war-plugin。您可以将其配置为filter a specific directory,并像这样在WAR中输出:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <webResources>
      <resource>
        <directory>src/main/assembly/${package-mode}/config</directory>
        <filtering>true</filtering>
        <targetPath>WEB-INF/config</targetPath>
      </resource>
    </webResources>
  </configuration>
</plugin>

这将过滤目录src/main/assembly/${package-mode}/config并将其下的文件放在WAR中的目标文件夹WEB-INF/config中。

通过此更改,您将能够使用 mvn clean tomcat7:run-war 运行您的 web 应用程序(而不是 tomcat7:run,因为它不会打包 WAR)。

【讨论】:

  • "在 WAR 中的目标文件夹 WEB-INF/config 中" - 我明白了 .. 它没有将这些东西复制到 src/webapp/WEB-INF/config .. 这些文件只是移到 WAR 文件中。非常好!谢谢!
  • @displayname 没错。很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多