ANT脚本用于编译dir中的所有(css)LESS文件和使用RHINO的子目录

Chr*_*ann 10 ant rhino less

我想编译*.less特定文件夹中的所有脚本,并使用less-rhino-1.1.3.js进行子目录.

在github上有一个例子,用于为特定文件执行此操作,这非常有效.但是我想为一个完整的文件夹做同样的事情.我尝试了很多,这是我的最后一次尝试.

它不起作用,propertyregex似乎不是标准的ANT,我不想用这样的东西.我甚至不确定这段代码是否有用.

<project name="test" default="main" basedir="../../">
<property name="css.dir" location="public/css"/>
<property name="tool.less" location="bin/less/less-rhino-1.1.3.js"/>
<property name="tool.rhino" location="bin/tools/rhino/js.jar"/>
<macrodef name="lessjs">
    <attribute name="input" />
    <attribute name="output" />
    <sequential>
        <java jar="${tool.rhino}" fork="true" output="@{output}">
            <arg path="${tool.less}"/>
            <arg path="@{input}"/>
        </java>
        <echo>Lessjs: generated @{output}</echo>
    </sequential>
</macrodef>

<target name="main">
     <echo>compiling less css</echo>
     <fileset dir="${css.dir}" id="myfile">
          <filename name="**/*.less" />
     </fileset>
     <property name="lessfilename" refid="myfile"/>
     <propertyregex property="cssfilename"
          input="${lessfile}"
          regexp="^(.*)\.less$"
          replace="^\1\.css$" 
          casesensitive="true" />
     <lessjs input="lessfile" output="cssfilename"/>
</target>
</project>
Run Code Online (Sandbox Code Playgroud)

ste*_*ang 12

您可以使用<fileset>包含所有less需要编译的文件.稍后,您可以使用<mapper>标记相应的detination css文件.

<project name="test" default="main" basedir="../../">
<property name="css.dir" location="public/css"/>
<property name="tool.less" location="bin/less/less-rhino-1.1.3.js"/>
<property name="tool.rhino" location="bin/tools/rhino/js.jar"/>

  <target name="less" description="Convert LESS to CSS then concatenate and Minify any stylesheets">

  <echo message="Converting LESS to CSS..."/>
  <!-- Clear the former compiled css files -->
      <delete includeemptydirs="true">
            <fileset dir="${css.dir}" includes="*.css, **/*.css" defaultexcludes="false"/>
      </delete>

      <apply dir="${css.dir}" executable="java" parallel="false" failonerror="true">
  <!-- Give the input bundle of less files-->
          <fileset dir="${css.dir}">
              <include name="*.less"/>
          </fileset>
          <arg value="-jar" />
          <arg path="${tool.rhino}" />
          <arg path="${tool.less}" />
          <srcfile/>
  <!-- Output the compiled css file with corresponding name -->
          <mapper type="glob" from="*.less" to="${css.dir}/*.css"/>
          <targetfile/>
      </apply>

  </target>

</project>
Run Code Online (Sandbox Code Playgroud)


duf*_*ymo 5

我能够在几个SO答案的帮助下拼凑出一个有效的解决方案:

ANT脚本用于编译dir中的所有(css)LESS文件和使用RHINO的子目录

如何从命令行正确执行lessc-rhino-1.6.3.js

我不得不从GitHub下载LESS 1.7.5并将Ant目标修改为这样.该-f论点和较少的JavaScript是关键:

<property name="css.dir" value="WebContent/css"/>
<property name="less.dir" value="less"/>
<property name="tool.rhino.jar" value="test-lib/rhino-1.7R4.jar"/>
<property name="tool.rhino.lessc" value="test-lib/lessc-rhino-1.7.5.js"/>
<property name="tool.rhino.less" value="test-lib/less-rhino-1.7.5.js"/>
<target name="compile-less" description="compile css using LESS">
    <apply dir="${css.dir}" executable="java" parallel="false" failonerror="true">
        <fileset dir="${less.dir}">
            <include name="styles.less"/>
        </fileset>
        <arg value="-jar"/>
        <arg path="${tool.rhino.jar}"/>
        <arg value="-f"/>
        <arg path="${tool.rhino.less}"/>
        <arg path="${tool.rhino.lessc}"/>
        <srcfile/>
        <mapper type="glob" from="*.less" to="${css.dir}/*.css"/>
        <targetfile/>
    </apply>
</target>
Run Code Online (Sandbox Code Playgroud)