首页 文章

在maven WAR构建中添加其他类

提问于
浏览
2

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

运行 mvn tomcat7:run 时,这些附加类也会出现测试资源 . 捆绑WAR(通过 mvn package )时,会排除这些虚假资源 . 在大多数情况下,这很好,因为战争束是我们发运的,并且正在prod服务器上部署 .

Problem 1: 但是:"fake"类仍然在WAR构建中被授予对 生产环境 性WAR而言不干净的内容 .

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

Problem 2: 当前的WAR有假类而不是假资源; /

Question :如何在正常构建中排除假类但是如何包含这些源以及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>

这个问题与以下内容有关:

2 回答

  • 1

    您应该使用不同的配置文件(请参阅http://maven.apache.org/guides/introduction/introduction-to-profiles.html)来构建您的战争 . 包含虚假来源/资源的"continuous integration" Profiles ,以及没有这些资料的"production" Profiles .

  • 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>
    

相关问题