2

我目前正在使用带有https://maven.apache.org/plugins/maven-war-plugin/的 maven3和带有http://mojo.codehaus的http://tomcat.apache.org/maven-plugin-2.0/ .org/build-helper-maven-plugin/src/main/java在like旁边添加其他源src/mock/java

运行mvn tomcat7:run这些附加类时,还存在测试资源。捆绑 WAR(通过mvn package)时,这些虚假资源被排除在外。在大多数情况下这很好,因为战争包是我们发布的并且正在部署在产品服务器上。

问题 1:但是:“假”类仍然在 WAR 构建中被授权,这对于生产性 WAR 来说是不干净的。

但是还有另一个用例: 使用这些额外的类和资源构建一个 WAR 文件,用于通过持续集成/部署(jenkins)在本地开发服务器上部署这似乎很棘手......

问题 2:当前 WAR 有假类但没有假资源;/

问题:如何在正常构建中排除假类,但如何在 WAR 构建中包含这些来源以及假资源?

这就是我所做的:

<testResources>
    <testResource>
        <directory>src/test/resources</directory>
    </testResource>
    <testResource>
        <directory>src/mock/resources</directory>
    </testResource>
</testResources>
…

… // plugins section
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>copy-resources-after-test</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>resources</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.basedir}/src/main/java-fake</source>
                    <source>${project.basedir}/src/mock/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
    </configuration>
</plugin>

这个问题与:

4

2 回答 2

1

您应该使用不同的配置文件(请参阅http://maven.apache.org/guides/introduction/introduction-to-profiles.html)来构建您的战争。包含您的虚假来源/资源的“持续集成”配置文件,以及没有它们的“生产”配置文件。

于 2013-02-06T14:46:26.087 回答
1

我是如何修复它的:

--- a/pom.xml
+++ b/pom.xml
@@ -20,5 +20,11 @@

      <properties>
+
+        <!-- remove fake data for normal builds -->
+        <maven.war.warSourceExcludes>staticFakeFiles/</maven.war.warSourceExcludes>
+        <exclude.fake.resources>**</exclude.fake.resources>
+        <!-- set additional fake sources to default source directory to prevent NPE -->
+        <additional.fake-sources>${project.basedir}/src/mock/java</additional.fake-sources>
     </properties>

     <organization>
@@ -328,6 +334,13 @@
                     <exclude>application.wsdl</exclude>
                 </excludes>
             </resource>
+            <resource>
+                <directory>src/mock/resources</directory>
+                <filtering>true</filtering>
+                <excludes>
+                    <exclude>${exclude.fake.resources}</exclude>
+                </excludes>
+            </resource>
         </resources>
         <testResources>
             <testResource>
@@ -382,7 +392,7 @@
                         </goals>
                         <configuration>
                             <sources>
                                 <source>${project.basedir}/src/main/java-fake</source>
-                                <source>${project.basedir}/src/mock/java</source>
+                                <source>${additional.fake-sources}</source>
                             </sources>
                         </configuration>
@@ -410,7 +420,7 @@
                 <version>2.2</version>
                 <configuration>
                     <failOnMissingWebXml>false</failOnMissingWebXml>
-                    <warSourceExcludes>fakefiles/</warSourceExcludes>
+                    <warSourceExcludes>${maven.war.warSourceExcludes}</warSourceExcludes>
                 </configuration>
             </plugin>

@@ -1353,6 +1363,11 @@

             <properties>
+
+                <!-- add fake data for fake builds -->
+                <maven.war.warSourceExcludes></maven.war.warSourceExcludes>
+                <exclude.fake.resources></exclude.fake.resources>
+                <additional.fake-sources>${project.basedir}/src/mock/java</additional.fake-sources>
             </properties>
         </profile>
         <profile>
于 2013-02-06T15:53:21.937 回答