0

我正在将一个非 Maven 项目迁移到 Maven 项目。我无法更改项目的当前目录结构或创建的 war 文件的结构。现在我想在 pom.xml 中配置资源的源文件夹和目标文件夹的位置。这将允许我通过调用“mvn clean install”来自动化构建,并且将创建与现有结构的战争。

下面是项目目录结构。

Project Root>\services\**\**\src\**\**\**\abc.xml

Project Root>\services\**\src\abc.xml

Project Root>\services\**\**\**\**\**\src\**\**\abc.xml

Project Root>\services\**\**\xyz\abc.xml

Project Root>\services\**\xyz\abc.xml

Project Root>\services\**\**\**\**\**\xyz\abc.xml

Project Root>pom.xml

现在我希望所有“src”文件夹中的所有 xml 文件,无论它们的位置如何,都应该进入我的“target\webapp\WEB-INF\classes”文件夹。文件应带有classes文件夹中“src”文件夹之后的目录结构(即src的子目录结构)。

<resources>
    <resource>
        <directory>services/**/src</directory>
    </resource>
</resources>

我将非常感谢您的帮助。


以防万一需要以下信息:

默认情况下,我使用 java 源文件得到这种行为。我设置了以下行

<sourceDirectory>services</sourceDirectory>

以下格式的所有 java 文件都被编译,“class”文件被放置在 webapp/WEB-INF/classes 文件夹中,目录结构位于“src”文件夹之后。

Project Root>\services\**\**\src\**\**\**\abc.java

Project Root>\services\**\src\abc.java

Project Root>\services\**\**\**\**\**\src\**\abc.java

Project Root>\services\**\**\xyz\abc.java

Project Root>\services\**\xyz\abc.java

Project Root>\services\**\**\**\**\**\xyz\abc.java
4

2 回答 2

0

你最好使用现有的插件。查看 maven-war 插件:

https://maven.apache.org/plugins/maven-war-plugin/

只需将这个东西放在你的 pom 的构建部分:

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.4</version>
</plugin>

它将获取 src 目录中的所有文件并将它们放在 WEB-INF/classes 中。如果你想在 WEB-INF/classes 之外添加类文件(你不应该这样做,因为你应该坚持标准的 maven 目录结构),你也可以这样做:

<plugin>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.4</version>
   <configuration>
      <webResources>
          <resource>
            <!-- this is relative to the pom.xml directory -->
            <directory>service**</directory>
           </resource>
       </webResources>
    </configuration>
</plugin>

以下是有关过滤结果的更多信息,尽管您不需要它:

https://maven.apache.org/plugins/maven-war-plugin/

于 2014-04-23T09:31:16.907 回答
0
Finally I found that maven does not support this out of box.
To strip the parent directory structure and keep only the child directory structure when copying resources.

Hence took the help of "maven-antrun-plugin". 

Posting the below snipped to pom.xml and ant build.xml, in case anybody else need it.
    ----------------------pom.xml------------------------------------
    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.7</version>
                    <executions>
                        <execution>
                            <id>compile</id>
                            <phase>compile</phase>
                            <configuration>
                                <target>
                                <echo message="calling ant file ${basedir}/build.xml" />
                                    <ant antfile="${basedir}/build.xml" target="add-service-resources" />
                                    <echo message="called ant file ${basedir}/build.xml" />
                                </target>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    -------------------ant build.xml-----------------------------
        <target name="add-service-resources" description="add service resources">
            <copy todir="./target/classes" overwrite="true">
                <fileset dir="./services">
                    <include name="**/src/**"/>
                    <exclude name="**/*.java"/>
                    <exclude name="**/*.class"/>
                    <exclude name="**/servicedef.xml"/>
                </fileset>
                 <cutdirsmapper dirs="2"/><!-- to strip parent directory structure-->
            </copy>
        </target>
于 2014-04-24T10:34:05.920 回答