9

我目前有这个设置:

项目 A 输出一个战争文件 - 有一个配置文件 (WEB-INF/web.xml)。我们已经通过注释掉的配置部分来交付它,当项目部署在特定环境中时,它会手动取消注释。

项目的需求发生了变化——我需要在完全没有该部分配置的情况下构建项目 A;并且我需要使用该配置部分构建另一个项目(项目 B)(启用,未注释掉)。

我希望我可以让项目 B 依赖于项目 A(通过战争覆盖),而不是在两个项目中都存在该文件(双重维护),然后使用 maven-config-processor-plugin 将我的特殊配置添加到 WEB -INF/web.xml,然后重新打包war文件。

这似乎不起作用 - 虽然 - 如果目标已经存在(即在上一次运行之后),配置修改可以工作,但是当我一起运行所有内容时,覆盖和重新打包到新战争中一起发生 - 我可以' t 想办法让 config-processor 插件在中间运行。基本上,默认顺序最终是“config-processor”(由于覆盖尚未发生而失败),然后是“war”(全部作为一个单元)。我不能让配置处理器在覆盖之后但在战争完全打包之前发生。

过去几年,互联网上的多人询问是否有办法在“解包覆盖”和“重新打包战争文件”步骤之间注入插件,但似乎没有人明确回答这个问题。有任何想法吗?

4

2 回答 2

6

由于战争覆盖和战争包装似乎都是作为单一目标的一部分发生的,我认为没有办法进入其中。作为一种解决方法,您可以web.xml在早期阶段提取并处理它。maven-dependency-plugin 可以在项目 B 中用于web.xml从项目 A 中提取到工作目录中,然后运行 ​​maven-config-processor-pluginweb.xml并将结果放在其他地方,然后指示 maven-war-plugin 包含已处理的web.xml在覆盖之前。在项目 B 的 POM 中:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <!-- Extract web.xml from Project A -->
            <execution>
                <id>unpack-webxml</id>
                <phase>generate-resources</phase>
                <goals>
                    <goal>unpack</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>your.group</groupId>
                            <artifactId>project.a</artifactId>
                            <version>...</version>
                            <type>war</type>
                            <overWrite>true</overWrite>
                            <outputDirectory>${project.build.directory}/myconfig/work</outputDirectory>
                            <includes>WEB-INF/web.xml</includes>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>com.google.code.maven-config-processor-plugin</groupId>
        <artifactId>maven-config-processor-plugin</artifactId>
        <version>2.0</version>
        <executions>
            <!-- Process extracted web.xml and place in temp build directory -->
            <execution>
                <id>process-webxml</id>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/myconfig/build</outputDirectory>
                    <transformations>
                        <transformation>
                            <input>${project.build.directory}/myconfig/work/WEB-INF/web.xml</input>
                            <output>WEB-INF/web.xml</output>
                            <!-- your transformation config -->
                        </transformation>
                    </transformations>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
            <webResources>
                <!-- Instruct war plugin to include temp build directory in webapp -->
                <resource>
                    <directory>${project.build.directory}/myconfig/build</directory>
                    <includes>
                        <include>**</include>
                    </includes>
                </resource>
            </webResources>
            <overlays>
                <!-- Overlay customization if needed -->
            </overlays>
        </configuration>
    </plugin>
</plugins>

据我所知,war插件webResources首先包括,然后是src/main/webapp,然后是叠加层。

我不熟悉 maven-config-processor-plugin,所以如果我的配置不正确,我深表歉意。

于 2012-05-31T15:39:17.053 回答
4

您可以使用maven-dependency-plugin 的 unpack 目标来获取项目 A 以在本地获取 web.xml,然后对其进行转换并将maven-war-plugin 指向转换后的 web.xml

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
              <execution>
                <id>unpack</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>unpack</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.test</groupId>
                      <artifactId>test-war1</artifactId>
                      <version>0.0.1-SNAPSHOT</version>
                      <type>war</type>
                    </artifactItem>           
                  </artifactItems>
                  <outputDirectory>${project.build.directory}/wars</outputDirectory>
                </configuration>
              </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>com.google.code.maven-config-processor-plugin</groupId>
            <artifactId>maven-config-processor-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <!-- 
                  configure to transform file
                  ${project.build.directory}/wars/WEB-INF/web.xml
                  into
                  ${project.build.directory}/transformed/web.xml
                 -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
              <warSourceDirectory>src/main/webapp</warSourceDirectory>
              <webXml>${project.build.directory}/transformed/web.xml</webXml>
            </configuration>
        </plugin>
    </plugins>
  </build>
于 2012-05-31T15:40:14.690 回答