gpt4 book ai didi

ant - 为 Ant Apply 任务指定多个输出文件或目标文件

转载 作者:行者123 更新时间:2023-12-04 18:07:56 25 4
gpt4 key购买 nike

我试图找出一种方法让 Ant 运行一个 .jar 可执行文件,该可执行文件接受一个文件并从单个输入文件中吐出几个生成的文件。具体来说,我正在尝试生成已编译的 .js 文件,同时生成 .map 文件。

通常,命令看起来像这样:

java -jar compiler-latest --js a.js --js_output_file a.min.js --create_source_map a.js.map

在哪里:
  • compiler-latest是闭包编译器 jar
  • a.js是要编译的 JavaScript 文件
  • a.min.js是编译后的 JavaScript
  • a.js.map是源 map

  • 我的 Ant 脚本如下所示:

    <project name="BuildTest" default="Build" basedir=".">
    <description>
    HTML Build Test with Ant
    </description>
    <property name="src" location="../js"/>
    <property name="dst" location="../build"/>
    <property name="compiler" location="../compiler.jar"/>

    <!--Make Dest Directory-->
    <target name="-destination">
    <mkdir dir="${dst}"/>
    </target>

    <!--Compile JS-->
    <target name="Build" depends="-destination">

    <!--Filesets and Mappers-->
    <fileset id="sourceFiles" dir="${src}" includes="*.js"/>
    <mapper id="compiledJs" type="glob" from="*.js" to="*.compiled.js"/>
    <mapper id="mapJs" type="glob" from="*.js" to="*.js.map"/>

    <!--Apply Everything-->
    <apply executable="java" parallel="false" dest="${dst}">

    <!--Closure Compiler-->
    <arg value="-jar"/>
    <arg path="${compiler}"/>
    <arg value="--compilation_level=SIMPLE_OPTIMIZATIONS"/>

    <!--Source Files-->
    <arg value="--js"/>
    <srcfile/>
    <fileset refid="sourceFiles"/>

    <!--Output Files-->
    <arg value="--js_output_file"/>
    <targetfile/>
    <mapper refid="compiledJs"/>

    <!--Source Maps-->
    <arg value="--source_map_format=V3"/>
    <arg value="--create_source_map"/>
    <arg value="--js_output_file"/>
    <targetfile/>
    <mapper refid="mapJs"/>
    </apply>
    </target>

    <!--Clean Project-->
    <target name="Clean" description="Cleans the project">
    <delete dir="${dst}"/>
    </target>
    </project>

    但是,我收到一条错误消息,说我不能有多个 <targetfile/>元素
    apply doesn't support multiple targetfile elements.

    最佳答案

    这是一种解决方法,不是很好,但很有效。

    您可以使用 Ant <compositemapper> 为您的应用程序构建命令行。

    下面是一个插图。您需要设置relative="yes"为了优先使用相对于构建目录的文件名而不是绝对文件名,否则映射会更困难。要构建命令行,请在 <compositemapper> 中提供映射器列表。 .使用 <mergemapper>对于固定部分(像 --output_file 这样的参数),并在需要生成文件名时使用合适的其他映射器,可能是 glob。
    需要一系列映射器来分隔 <apply> 传递给 java 的参数。 , 否则它们将作为一个带有嵌入空格的长参数传递。

    <apply executable="java" parallel="false" relative="yes">
    <arg line="-jar compiler-latest --js"/>
    <srcfile />
    <targetfile />

    <compositemapper>
    <mergemapper to="--js_output_file" />
    <globmapper from="*.js" to="*.compiled.js" />
    <mergemapper to="--source_map_format=V3" />
    <mergemapper to="--create_source_map" />
    <globmapper from="*" to="*.map" />
    </compositemapper>

    <fileset dir="." includes="*.js" />
    </apply>

    对于导致命令行的简单测试,如:
    java -jar compiler-latest --js 1.js --js_output_file 1.compiled.js --source_map_format=V3 --create_source_map 1.js.map

    关于ant - 为 Ant Apply 任务指定多个输出文件或目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22238994/

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