Maven 2 Maven:复制没有子目录结构的文件

Maven 2 Maven:复制没有子目录结构的文件,maven-2,resources,Maven 2,Resources,我试图使用Maven将给定文件夹中包含的所有*.xsd文件移动到另一个文件夹中,但没有源子目录结构 这就是我到目前为止所做的: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.3</version> <

我试图使用Maven将给定文件夹中包含的所有*.xsd文件移动到另一个文件夹中,但没有源子目录结构

这就是我到目前为止所做的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <id>move-schemas</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/schemas-target</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

...

<resources>
    <resource>
        <directory>${basedir}/schemas-source</directory>
        <includes>
            <include>**/*.xsd</include>
        </includes>
    </resource>
</resources>
这是我在schemas目标文件夹中需要的:

schemas-target
 │- myfile.xsd
 │- myfile-0.2.xsd

我自己一次又一次地用头撞那个限制

基本上:我认为没有一个只有maven的解决方案。你将不得不求助于使用一些动态的东西,比如


  • 在maven中嵌入ant任务,在本例中为ant,如下所示:

    <copy todir="${project.basedir}/schemas-target" flatten="true">
        <fileset dir="${project.basedir}/schemas-source">
            <include name="**/*.xsd"/>
        </fileset>
    </copy>
    
    new File(pom.basedir, 'schemas-source').eachFileRecurse(FileType.FILES){
        if(it.name.endsWith('.xsd')){
            new File(pom.basedir, 'schemas-target/${it.name}').text = it.text;
        }
    }
    

  • 有一种方法。。而且它真的很单调和累赘。只有当你想完全专业化的时候才去实现它。肖恩的答案是最简单的解决方案

    问题是您必须指定每个目录,然后对其中的文件使用通配符

    <execution>
    <id>copy-jars</id>
    <phase>process-sources</phase>
    <goals>
        <goal>copy-resources</goal>
    </goals>
    <configuration>
        <outputDirectory>${basedir}/target/classes</outputDirectory>
        <resources>
            <resource>
                <directory>${basedir}/resources</directory>
                <includes>
                    <include>xyz.jar</include>
                </includes>
            </resource>     
            <resource>
                <directory>${basedir}/as-u-like-it</directory>
                <includes>
                    <include>abc.jar</include>
                </includes>
            </resource>     
    </configuration>
    
    
    复印罐
    过程源
    复制资源
    ${basedir}/target/classes
    ${basedir}/resources
    xyz.jar
    ${basedir}/as-u-like-it
    abc.jar
    

    谢谢,我尝试了Maven Antrun插件,但我不知道有哪个属性起作用。不幸的是,Antrun插件是我执行类似任务的唯一方法……似乎“展平”应该作为Maven resources插件的复制资源目标的一个设置。展平是一个开始,但通常我想设置一个“开始路径”,比如当我扩展WAR归档文件时,我可能想丢失web inf/类,但保留包结构。但我想这可以通过使用映射器来实现:您也可以使用
    move
    而不是
    copy
    ,这也应该删除源目录/文件。
    <execution>
    <id>copy-jars</id>
    <phase>process-sources</phase>
    <goals>
        <goal>copy-resources</goal>
    </goals>
    <configuration>
        <outputDirectory>${basedir}/target/classes</outputDirectory>
        <resources>
            <resource>
                <directory>${basedir}/resources</directory>
                <includes>
                    <include>xyz.jar</include>
                </includes>
            </resource>     
            <resource>
                <directory>${basedir}/as-u-like-it</directory>
                <includes>
                    <include>abc.jar</include>
                </includes>
            </resource>     
    </configuration>