Maven concat文件目录中的特定文件

时间:2015-03-23 09:30:27

标签: java xml maven ant maven-plugin

我有一个深度和文件夹名称未知的目录。

>A
-> AB
--> configuration.xml
--> ABC
---> configuration.xml
-> AD
--> configuration.xml
-> allconfigurations.xml

我需要一个maven插件来连接所有configuration.xml个文件并在根目录中创建allconfigurations.xml文件。不幸的是文件夹名称和深度未知。在pom.xml文件中完成它而不需要任何其他文件会很棒。

2 个答案:

答案 0 :(得分:1)

只是为您快速谷歌:带有XmlAppendingTransformer的maven-shade-plugin可以提供帮助。

示例配置为here

答案 1 :(得分:1)

虽然苦苦挣扎,但我意识到真正的问题是为编译的allconfigurations.xml文件添加页眉和页脚,因为每个configuration.xml文件都是一个片段,当我将它们连在一起时产生的xml是不是有效的xml。

这是案例; xml文件类似于:

<Configuration xmlns="abc">
     ...
    <connectionTimeoutInMs>240000</connectionTimeoutInMs>
    <socketTimeoutInMs>240000</socketTimeoutInMs>
    <persist>false</persist>
    <internal>false</internal>
    ...
</Configuration>

并且放置其中许多是无效的,因此结果xml必须类似于;

<AllConfigurations xmlns="abc">
    ...
    <Configuration xmlns="abc">
       ...
    </Configuration >    
    ...
<AllConfigurations xmlns="abc">

所以必须将第一行和最后一行添加到结果中。

这是我提出的解决方案;

            <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <!--<phase>process-resources</phase>-->
                    <!--<phase>compile</phase>-->
                    <configuration>
                        <target>
                            <concat destfile="${project.basedir}/.../allConfigurations.xml"
                                    force="yes">
                                <fileset dir="${project.basedir}/...">
                                    <include name="xmlHeaderForConfiguration"></include>
                                </fileset>
                                <fileset dir="${project.basedir}/...">
                                    <include name="**/configuration.xml"></include>
                                </fileset>
                                <fileset dir="${project.basedir}/...">
                                    <include name="xmlFooterForConfiguration"></include>
                                </fileset>
                            </concat>

                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>

其中xmlHeaderForConfiguration是包含内容的文件; <AllConfigurations xmlns="abc">和xmlHeaderForConfiguration有</AllConfigurations>