利用ant的javac任務來編譯java程序


<?xml version="1.0" encoding="UTF-8"?>
<project name="javaTest" default="compile" basedir=".">
<!-- 在此.代表當前目錄  -->
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
</project>
<!--運行結果
 E:\antstudy>ant compile
Buildfile: E:\antstudy\build.xml

clean:

compile:
    [mkdir] Created dir: E:\antstudy\build\classes
    [javac] E:\antstudy\build.xml:9: warning: 'includeantruntime' was not set, d
efaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 1 source file to E:\antstudy\build\classes

BUILD SUCCESSFUL
Total time: 1 second -->

  

先建一個文件夾 antstudy(project文件夾)

再建一個src文件夾(作為源代碼目錄)

里面放置java程序

在antstudy目錄下建一個build.xml文件如上

 

 

 

javac 屬性:

debug:是否產生調試信息默認為 off

<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" debug="on"/>
<!-- srcdir 源目錄(在這里為源代碼目錄)destdir目標目錄 即編譯完成后存放class文件的目錄 -->
</target>

  

 

<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac destdir="build/classes" fork="true" memorymaximumsize="500M source="1.2" target="1.2">
<!-- srcdir 源目錄(在這里為源代碼目錄)destdir目標目錄 即編譯完成后存放class文件的目錄 -->
<src path="src"/>
<src path="eventinfo"/>
</javac>
</target>

src path 編譯的源目錄,可以通過這樣編譯在不同文件夾里的文件

fork

是否執行外部的javac

如果沒有制定fork屬性默認為false    javac和ant命令將在同一個進程中執行 容易出現內存溢出 同時javac被分配的內存只有64MB,如果指定fork屬性為true,javac命令將和ant不在同一個進程中執行,分配內存的大小將為memoryinitialsize(獲得基本vm初始內存大小)、memorymaximumsize(最大內存大小)指定的大小。

source:指定版本號使編譯出的(文件)類兼容該版本

一般jdk都向下兼容向上不兼容   source在這里指編譯出向下兼容的版本的類
如果用Eclipse,你可以在項目屬性中編譯選項里有設置生成兼容JDK1.4的類。但是如果你在Eclipse里自己寫Ant腳本用<javac> 命令去編譯java類,則生成的仍為JDK1.5的類(執行Ant腳本時與Eclipse設置的編譯選項無關)。如何解決了,其實很簡單,只要在<javac> ant 命令里加source參數。

target:根據指定的vm版本生成class文件

 

<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" debug="on" includes="package/**,package1/**" excludes="package2/**/**"/>
<!-- srcdir 源目錄(在這里為源代碼目錄)destdir目標目錄 即編譯完成后存放class文件的目錄 -->
</target>

includes 必須包括的文件模式的列表,以逗號或空格分割,如果忽略將包括所有文件

excludes 必須排除的文件模式的列表,以逗號或空格分割,如果忽略將不排除任何文件

debug    debug屬性設置為on時 ,才能在debug引用該jar工程的時候debug到該jar包中的代碼

 

 

<javac encoding="utf-8" destdir="../WebContent/WEB-INF/classes" fork="true" memorymaximumsize="500M" source="${source}" target="${target}>
             <src path="../src"/>
             <src path="../eventinfo"/>
             <src path="../detectsetting"/>
            <classpath refid="ids7010-web-vcm.classpath"/>
 </javac><!--適合需要編譯的文件不在同一個目錄內-->

classpath     設置Classpath的目的,在於告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序(.class文件)。

在javac過程中會使用到jar包里的class文件 

所以有的時候也需要在<javac></javac>標簽內打上<classpath>標簽指定需要使用的jar包名稱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM