2008-10-23 14 views
7

我想使用Rhino JavaScript編譯器編譯一些JavaScript到.class字節碼文件以供在項目中使用。看起來應該已經存在了,因爲Groovy,NetREXX(!)和Jython分別有groovyc,netrexxc和jythonc任務。有沒有人使用或編寫過這樣的Ant任務,或者任何人都可以提供一些關於如何編寫的技巧?有沒有人使用或編寫過一個Ant任務來編譯(Rhino)JavaScript到Java字節碼?

理想情況下,它有一些方法可以解決JavaScript或Java類之間的依賴關係。

回答

5

爲什麼不簡單地使用java任務?

<java fork="yes" 
    classpathref="build.path" 
    classname="org.mozilla.javascript.tools.jsc.Main" 
    failonerror="true"> 
    <arg value="-debug"/> 
     ... 
    <arg value="file.js"/>   
</java> 

是否有異議?

+0

嗯,主要關心的是處理Java和JavaScript類之間的依賴關係。儘管如此,這可能足以爲現在工作 - 謝謝。 – 2008-10-24 01:21:01

5

這是我用於我的犀牛應用程序的示例build.xml。如果你有大量的JavaScript文件,你只需要不斷添加更多的標籤
〜ant的編譯罐子運行

<project> 
<target name="compile"> 
    <mkdir dir="build/classes"/> 
    <java fork="yes" 
     classpath="js.jar" 
     classname="org.mozilla.javascript.tools.jsc.Main" 
     failonerror="true"> 
     <arg value="-nosource"/> 
     <arg value="-opt"/> 
     <arg value="9"/> 
     <arg value="-version"/> 
     <arg value="170"/> 
     <arg value="src/SwingApplication.js"/> 
    </java> 
    <move todir="build/classes"> 
     <fileset dir="src"> 
      <include name="**/*.class"/> 
     </fileset> 
    </move> 
</target> 
<target name="jar"> 
    <mkdir dir="build/jar"/> 
    <jar destfile="build/jar/SwingApplication.jar" basedir="build/classes"> 
     <zipfileset src="js.jar" includes="**/*.class"/> 
     <manifest> 
      <attribute name="Main-Class" value="SwingApplication"/> 
     </manifest> 
    </jar> 
</target> 
<target name="run"> 
    <exec executable="java"> 
     <arg valUe="-jar"/> 
     <arg value="build/jar/SwingApplication.jar"/> 
    </exec> 
</target> 
</project> 

6

我在我的項目,其中包括跟蹤腳本中使用RequireJS取出模塊之間的依賴關係,並將它們組合成一個JavaScript文件。或者,它也可以使用Google Closure編譯器縮小組合的js文件。一旦它處於這種形式中,所有依賴關係都包含在單個js文件中,則可以使用jsc輕鬆編譯該文件。

這裏是我的ant腳本的一個片段,我用它來創建單個組合js文件,把它編譯成類文件,然後創建一個可執行的JAR:

<target name="compile-single-js"> 
    <mkdir dir="${build-js}"/> 

    <java classname="org.mozilla.javascript.tools.shell.Main"> 
     <classpath> 
      <path refid="rhino-classpath"/> 
      <path refid="closure-classpath"/> 
     </classpath> 
     <arg value="${js-build-script}"/> 
     <arg value="${js-build-dir}"/> 
     <arg value="name=${build-js-main-rhino-frontend-module}"/> 
     <arg value="out=${build-js-main}"/> 
     <arg value="baseUrl=."/> 
     <arg value="includeRequire=true"/> 
     <arg value="inlineText=true"/> 
     <arg value="optimize=none"/> 
    </java> 
</target> 

<target name="compile-single-class" depends="compile-single-js"> 
    <mkdir dir="${build-class}"/> 

    <!-- TODO: set -opt --> 
    <java classname="org.mozilla.javascript.tools.jsc.Main"> 
     <classpath> 
      <path refid="rhino-classpath"/> 
     </classpath> 
     <arg value="-o"/> 
     <arg value="${build-class-main-name}.class"/> 
     <arg value="${build-js-main}"/> 
    </java> 
    <move file="${build-js}/${build-class-main-name}.class" todir="${build-class}"/> 
</target> 

<target name="jar-single-class" depends="compile-single-class"> 
    <mkdir dir="${build-jar}"/> 

    <jar destfile="${build-jar-main}" 
     basedir="${build-class}" 
     includes="${build-class-main-name}.class"> 
     <manifest> 
      <attribute name="Main-Class" value="${build-class-main-name}" /> 
     </manifest> 
    </jar> 
</target> 

完整的構建腳本可以發現here

相關問題