2008-10-23 20 views
7

Tôi muốn sử dụng trình biên dịch Rhino JavaScript để biên dịch một số JavaScript sang tệp .tecode bytecode để sử dụng trong dự án. Có vẻ như điều này đã tồn tại, vì có các nhiệm vụ groovyc, netrexxc và jythonc cho Groovy, NetREXX (!) Và Jython, tương ứng. Có ai đã sử dụng hoặc viết một tác vụ Ant như vậy hay bất kỳ ai có thể cung cấp một số mẹo về cách viết một tác vụ?Có ai đã sử dụng hoặc viết một nhiệm vụ Ant để biên dịch (Rhino) JavaScript sang Java bytecode không?

Lý tưởng nhất là nó sẽ có một số cách để giải quyết sự phụ thuộc giữa các lớp JavaScript hoặc Java.

Trả lời

5

Tại sao không chỉ đơn giản là sử dụng tác vụ java?

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

Bất kỳ phản đối nào?

+0

Hmm, mối quan tâm chính là xử lý các phụ thuộc giữa các lớp Java và JavaScript. Tuy nhiên, điều này có thể đủ để làm việc ngay bây giờ - cảm ơn. –

5

Đây là tệp build.xml mẫu mà tôi sử dụng cho các ứng dụng tê giác của mình. Nếu bạn có rất nhiều file javascript bạn chỉ cần giữ thêm nhiều thẻ
~: ant jar biên dịch chạy

<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

Tôi đang sử dụng RequireJS trong dự án của tôi, trong đó bao gồm một kịch bản mà dấu vết ra các phụ thuộc giữa các mô-đun và kết hợp chúng thành một tệp JavaScript duy nhất. Tùy chọn, nó cũng có thể rút gọn tệp kết hợp js bằng trình biên dịch Google Closure. Khi nó ở dạng này, trong đó tất cả các phụ thuộc được bao gồm trong một tệp js, tệp có thể được biên dịch dễ dàng bằng cách sử dụng jsc.

Dưới đây là một phân đoạn của kịch bản kiến ​​của tôi mà tôi sử dụng để tạo ra các tập tin js kết hợp duy nhất, biên dịch nó vào một tập tin lớp học, và sau đó tạo ra một JAR thực thi:

<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> 

Việc xây dựng kịch bản hoàn chỉnh có thể được tìm thấy here.

Các vấn đề liên quan