为什么我的资源在 "validate" 阶段没有被复制?
Why are my resources not getting copied in the "validate" phase?
无论我是否调用
,我都在尝试确保将正确的资源移动到 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
然后一切都按预期工作 - 正在复制文件。
你不应该使用 maven-resources-plugin
来复制 webapp 资源,此插件仅用于应用程序资源。此外,你应该永远不要在src
下生成或复制文件,就像你在<outputDirectory>src/main/webapp/WEB-INF/config</outputDirectory>
下所做的那样。生成的文件应始终放在 target
文件夹下。
相反,使用 maven-war-plugin
. You can configure it to 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
(而不是 tomcat7:run
,因为那样不会打包 WAR)。 =21=]
无论我是否调用
,我都在尝试确保将正确的资源移动到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
然后一切都按预期工作 - 正在复制文件。
你不应该使用 maven-resources-plugin
来复制 webapp 资源,此插件仅用于应用程序资源。此外,你应该永远不要在src
下生成或复制文件,就像你在<outputDirectory>src/main/webapp/WEB-INF/config</outputDirectory>
下所做的那样。生成的文件应始终放在 target
文件夹下。
相反,使用 maven-war-plugin
. You can configure it to 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
(而不是 tomcat7:run
,因为那样不会打包 WAR)。 =21=]