用ant自動compile|run|package spark程序

前段時間,需要寫一個用戶在前端編輯代碼,後臺自動生成scala程序的例子.其功能類似與web在線寫代碼,在線執行,出結果.一開始,不知從何下手,經同事提醒,可以用ant來自動編譯程序,再結合sh腳本執行新的scala 編譯後的程序.
於是折騰了一天,寫了一個build.xml編譯工具:

<?xml version="1.0" encoding="UTF-8"?>
<!--project name,default 可選compile|run|package -->
<project name="SparkTest" default="package" basedir="/testdata/SparkTest">
<description> Build script </description>

<!-- Main targets -->
<target name="build" depends="package">
</target>


<!-- Compiler settings -->
<property name="jvm-target" value="jvm-1.8"/>

<!-- Paths -->
<property name="project.name" value="SparkTest" />
<property name="java.home" value="/opt/jdk1.8.0_144" />
<property name="scala.home" value="/usr/local/scala-2.11.7" />
<property name="scala.lib.dir" location="${scala.home}/lib"/>
<property name="src.dir" location="${basedir}/src" />
<property name="lib.dir" location="${basedir}/lib"/>
<property name="build.dir" location="${basedir}/build"/>
<property name="cls.build.dir" location="${build.dir}/classes"/>
<property name="lib.build.dir" location="${build.dir}/lib"/>
<property name="spark.lib" location="/usr/local/spark-2.2.0/jars"/>
<property name="java.home" location="${java.home}"/>
<!--Main 方法入口文件 -->
<property name="scala.file.name" value="CodeOnLineTest"/>   

<path id="project.classpath">
    <pathelement location="${cls.build.dir}"/>
    <pathelement location="${scala.lib.dir}/scala-library.jar"/>
    <fileset dir="${spark.lib}" includes="**/*.jar"/>
</path>

<!-- Scala compiler task -->
<target name="scala.tasks">
    <taskdef resource="scala/tools/ant/antlib.xml">
        <classpath>
            <pathelement location="${scala.lib.dir}/scala-compiler.jar"/>
            <pathelement location="${scala.lib.dir}/scala-library.jar"/>
            <pathelement location="${scala.lib.dir}/scala-reflect.jar" />
        </classpath>
</taskdef>
</target>

<!-- Targets -->
<target name="clean">
    <delete dir="${build.dir}"/>
    <mkdir dir="${build.dir}" />
</target>

<!-- compile the program -->
<target name="compile" depends="scala.tasks">   
    <mkdir dir="${cls.build.dir}"/>
    <scalac srcdir="${src.dir}" destdir="${cls.build.dir}" target="${jvm-target}" classpathref="project.classpath" force="yes" deprecation="yes">
        <include name="**/*.scala"/>
    </scalac>
</target>

<!-- run the program -->
<target name="run" depends="compile">
    <java classname="${scala.file.name}" classpathref="project.classpath" />
</target>

<!-- package the program -->
<target name="package" depends="compile" description="打包類文件">
    <delete dir="${lib.build.dir}"/>
    <mkdir dir="${lib.build.dir}"/>
    <!-- <jar destfile="${lib.build.dir}/${project.name}.jar"> -->
    <jar jarfile="${lib.build.dir}/${project.name}.jar" basedir="${lib.build.dir}">
        <fileset dir="${cls.build.dir}"/>
        <manifest>
            <attribute name="Main-Class" value="${scala.file.name}" />
        </manifest>
    </jar>
</target>

</project>

ant 工具經常用在IDE中,現在比較少直接使用,這個情況用ant也算是一種可行的思路吧.

發佈了61 篇原創文章 · 獲贊 42 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章