1

我正在将一个 ant 脚本移植到 maven,并且我一直在转换我的 web.xml。

我的 web.xml 在开发期间将以下安全约束设置为 NONE,并为生产服务器生成的战争设置为 CONFIDENTIAL。

<security-constraint>
    <web-resource-collection>
      <web-resource-name>HTTPSOnly</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

我使用 XSL 脚本来处理从 ant 调用的 web.xml 文件。我希望 Maven 生成战争文件,其中 XSL 已应用于 web.xml,并且转换后的 web.xml 用于生成的战争。

我知道 maven XSL 插件和 maven 配置文件的概念,但我正在努力将它们放在一起,我不确定处理情况的正确 maven 方式是什么。

4

3 回答 3

2

Maven的方式是使用过滤。

下面是常规 web.xml 过滤的示例,没有 xsl:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webResources>
                    <webResource>
                        <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                        <includes>
                            <include>web.xml</include>
                        </includes>
                        <targetPath>WEB-INF</targetPath>
                        <filtering>true</filtering>
                    </webResource>
                </webResources>
            </configuration>
        </plugin>
    </plugins>
    <filters>
        <filter>src/main/filters/filter-${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

如果你坚持使用 xsl,你可以使用Maven xml 插件,从示例的基础开始工作:

 <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>xml-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>transform</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <transformationSets>
            <transformationSet>
              <dir>src/main/xml</dir>
              <stylesheet>src/main/stylesheet.xsl</stylesheet>
            </transformationSet>
          </transformationSets>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
于 2013-01-16T09:53:16.063 回答
2

有很多方法可以实现这一目标。可能最简单的方法是使用 maven-antrun-plugin http://maven.apache.org/plugins/maven-antrun-plugin/并调用您现有的 ant 任务

我知道的其他方法是使用变量/占位符和 Maven 过滤(变量替换),看看:http ://maven.apache.org/plugins/maven-assembly-plugin/examples/single/filtering-some-分发文件.html

于 2013-01-16T06:15:50.807 回答
1

我解决了我的问题,我使用 pom.xml 为 web 应用程序设置了一个 prod 配置文件,其中包含以下插件。这对我有用,因为当项目被导入 eclipse 时,我真的不希望发生任何花哨的事情,我希望一切都可以在开发人员机器上开箱即用。它没有在下面显示,但我还在生成源阶段添加了对 NodeJS 的调用以使用 RequireJS 构建 javascript 前端。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>xml-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>transform</goal>
            </goals>
            <configuration>
                <transformationSets>
                    <transformationSet>
                        <dir>src/main/webapp/WEB-INF</dir>
                        <includes>
                            <include>web.xml</include>
                        </includes>
                        <stylesheet>src/main/webapp/WEB-INF/web.xsl</stylesheet>
                    </transformationSet>
                </transformationSets>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <webXml>target/generated-resources/xml/xslt/web.xml</webXml>
        <archiveClasses>true</archiveClasses>
        <warSourceExcludes>META-INF/context.xml</warSourceExcludes>
        <packagingExcludes>
            **/**/context.xml
        </packagingExcludes>
    </configuration>
</plugin>
于 2013-01-16T19:22:34.430 回答