gpt4 book ai didi

Maven和Ant插件智能复制资源

转载 作者:行者123 更新时间:2023-12-04 09:36:06 25 4
gpt4 key购买 nike

使用方便 org.apache.maven.plugins:maven-antrun-plugin复制资源并重命名它们,但有没有办法使用通配符或其他机制智能地执行此操作以符合个人规则?

例如,如果我有这些文件:

  • ${project.artifactId}-${project.version}.swf
  • a.swf
  • b.swf
  • ...
  • z.swf

  • 我想复制目录中的所有文件并仅重命名 ${project.artifactId}-${project.version}.swffoo.swf .我知道我可以使用:
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
    <execution>
    <id>copy-swf-files</id>
    <phase>compile</phase>
    <goals>
    <goal>run</goal>
    </goals>
    <configuration>
    <target name="copy swf files to web project">
    <copy file="${project.build.directory}/${project.artifactId}-${project.version}.swf" tofile="${swf.output.location}/foo.swf" />
    <copy file="${project.build.directory}/a.swf" tofile="${swf.output.location}/a.swf" />
    <copy file="${project.build.directory}/z.swf" tofile="${swf.output.location}/z.swf" />
    </target>
    </configuration>
    </execution>
    </executions>
    </plugin>

    它的工作,但有另一种方便的方法来做到这一点,因为如果我有 1000 个文件要复制,它会很无聊...谢谢

    最佳答案

    你知道 Ant 吗? Maven Ant 插件所做的就是使用您列出的任务调用 Ant。您可以执行任何 Ant 任务,包括 <taskdef> , 等等。

    看起来你正在做的事情可以用文件集来完成:

     <copy todir="${swf.output.location}">
    <fileset dir="${project.build.directory}">
    <include name="*.swf"/>
    </fileset>
    </copy>

    这将复制所有 *.swf文件直接位于 ${project.build.directory} 下(并且没有子目录)到 ${swf.output.location}目录。如果要复制 *.swf的整个目录树文件,只需更改 <include> :
     <copy todir="${swf.output.location}">
    <fileset dir="${project.build.directory}">
    <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE-->
    </fileset>
    </copy>

    如果需要修改文件名,可以使用 Mappers .最简单的映射器是 flatten 映射器:
     <copy todir="${swf.output.location}">
    <fileset dir="${project.build.directory}">
    <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE-->
    </fileset>
    <mapper type="flatten"/>
    </copy>

    这将复制整个目录树并将所有文件展平到一个目录中。有些映射器可以匹配 glob、正则表达式甚至脚本。
    <include>selector而不是映射器,因为它选择您要操作的文件。这些也可能非常复杂,您可以根据它们的名称 iva 正则表达式,甚至它们的内容来匹配文件。

    我很惊讶没有允许您执行此操作的 Maven 插件。

    关于Maven和Ant插件智能复制资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092332/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com