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

本文介绍了如何使用Ant工具配合Shell脚本来实现前端编辑Scala代码,后台自动编译并执行Spark程序的功能。通过一个build.xml文件,展示了在缺少直接IDE支持的情况下,Ant作为编译工具的可行性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间,需要写一个用户在前端编辑代码,后台自动生成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也算是一种可行的思路吧.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值