Maven:如何将部分目录结构的嵌套资源获取到Maven中的WEB-INF/类



我正在将一个非maven项目迁移到maven项目。我无法更改项目的当前目录结构或创建的war文件的结构。现在我想在pom.xml中配置resource的源文件夹和目标文件夹的位置。这将使我只需调用"mvn clean install"就可以自动构建,并且将创建与现有结构的战争。

下面是项目目录结构。

Project Root>services****src******abc.xml
Project Root>services**srcabc.xml
Project Root>services**********src****abc.xml
Project Root>services****xyzabc.xml
Project Root>services**xyzabc.xml
Project Root>services**********xyzabc.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**srcabc.java
Project Root>services**********src**abc.java
Project Root>services****xyzabc.java
Project Root>services**xyzabc.java
Project Root>services**********xyzabc.java

最好使用现有的插件。查看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/类中。如果你想在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/

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>

相关内容

  • 没有找到相关文章

最新更新