【问题标题】:How to delete etc folder from WEB-INF classes folder using maven?如何使用 Maven 从 WEB-INF 类文件夹中删除 etc 文件夹?
【发布时间】:2019-11-19 22:51:29
【问题描述】:

我们有一个非常古老的 ant 项目,我们正在将其转换为 maven。在旧项目中,我们确实有 etc 文件夹,其中包含一些属性和一些其他部署所需的文件。我的要求是从 etc 文件夹中复制基于不同配置文件的所有必需文件,但 WEB-INF->classes 文件夹不应包含 etc 文件夹。我们项目的 pom.xml (不是整个粘贴)在下面,但是那个 etc 文件夹没有被删除:

   <groupId>com.text.cm</groupId>
    <artifactId>cm-ws</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <build.profile.id></build.profile.id>
                <build.profile.properties.id></build.profile.properties.id>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <build.profile.id>-prod</build.profile.id>
                <build.profile.properties.id>_prod</build.profile.properties.id>
            </properties>
        </profile>
        </profiles>
        <build>
        <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.2</version>
                <executions>
                    <execution>
                        <id>default-copy-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <overwrite>true</overwrite>
                            <outputDirectory>
                                ${project.build.directory}/${project.artifactId}-${project.version}/
                            </outputDirectory>
                            <resources>
                                <resource>
                                    <directory>/src/main/resources/etc</directory>
                                    <includes>
                                        <include>**/web.xml</include>
                                        <include>**/cm-servlet.xml</include>
                                        <include>**/jboss-web.xml</include>
                                    </includes>
                                    <excludes>
                                        <exclude>etc/**</exclude>
                                    </excludes>
                                </resource>
                                <resource>
                                    <directory>
                                        ../text-cm-jboss/src/main/resources/datasources
                                    </directory>
                                    <includes>
                                        <include>cm-db2-ds${build.profile.id}.xml</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                 <execution>
                        <id>copy-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <overwrite>true</overwrite>
                            <outputDirectory>
                                ${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/classes/properties
                            </outputDirectory>
                            <resources>
                                <resource>
                                    <directory>/src/main/resources/etc/properties/</directory>
                                    <includes>
                                        <include>
                                            environment${build.profile.properties.id}.properties
                                        </include>
                                        <include>
                                            cm.properties
                                        </include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-resources-2</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <overwrite>true</overwrite>
                            <outputDirectory>
                                ${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/classes/xml
                            </outputDirectory>
                            <resources>
                                <resource>
                                    <directory>/src/main/resources/etc/xml/</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>generate-resources</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <overwrite>true</overwrite>
                            <outputDirectory>
                                ${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/classes
                            </outputDirectory>
                            <resources>
                                <resource>
                                    <directory>/src/main/resources/</directory>
                                    <excludes>
                                        <exclude>etc/**</exclude>
                                    </excludes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            </plugins>
    </build>

【问题讨论】:

    标签: maven maven-3


    【解决方案1】:

    正在复制 etc 目录,因为它位于默认资源目录下。

    您正在根据您的需要使用目标copy-resources 复制资源,这很棒。但是默认的resources 目标也会同时自动执行,这就是为什么您会在类下看到 etc 文件夹。

    在这种情况下,我会做的一件事是从默认资源目录中排除所有目录和文件,这样只要resources 目标自动运行,就不会复制任何内容。

    例如,

    <project>
      ...
      <build>
        ...
        <resources>
          <resource>
          <directory>src/resources</directory>     
          <excludes>
              <exclude>**</exclude>
            </excludes>
          </resource>
          ...
        </resources>
        ...
      </build>
      ...
    </project>
    

    【讨论】:

    • 这个 sn-p 的阶段和目标是什么?
    • 如果我包含上述代码,我会收到此错误:组装 WAR 时出错:需要 webxml 属性(如果在更新模式下执行,则需要预先存在的 WEB-INF/web.xml
    • 该错误对于war打包和在预期目录下找不到web.xml是正常的。您是否尝试将 web.xml 放在 src/main/webapp/WEB-INF/web.xml 下?
    • 因此,只有我使用复制资源从 etc 文件夹中复制它。我无法更改项目的现有结构......我的要求是复制资源是否可能 etc 文件夹不会包含在 WEB-INF->classes 文件夹中
    • 我宁愿尝试一个非常基本的 web.xml,它可能只有命名空间声明。只是为了通过 Maven 包装。
    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2013-06-28
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多