Ant Quick Guide

ANT ย่อมาจาก Another Neat Tool เป็นเครื่องมือสร้างบน Java จาก Apache ก่อนที่จะลงรายละเอียดของ Apache Ant ให้เราเข้าใจก่อนว่าทำไมเราถึงต้องมีเครื่องมือสร้างตั้งแต่แรก

ต้องการเครื่องมือสร้าง

โดยเฉลี่ยแล้วนักพัฒนาจะใช้เวลาส่วนใหญ่ในการทำงานทางโลกเช่นการสร้างและการปรับใช้ซึ่งรวมถึง:

  • รวบรวมรหัส
  • บรรจุไบนารี
  • การปรับใช้ไบนารีกับเซิร์ฟเวอร์ทดสอบ
  • ทดสอบการเปลี่ยนแปลง
  • คัดลอกรหัสจากที่หนึ่งไปยังอีกที่หนึ่ง

เพื่อทำให้งานข้างต้นเป็นอัตโนมัติและง่ายขึ้น Apache Ant มีประโยชน์ เป็นเครื่องมือสร้างและปรับใช้ระบบปฏิบัติการที่สามารถเรียกใช้งานได้จากบรรทัดคำสั่ง

ประวัติของ Apache Ant

  • Ant ถูกสร้างขึ้นโดย James Duncan Davidson (ผู้แต่ง Tomcat ต้นฉบับ)

  • เดิมใช้เพื่อสร้าง Tomcat และรวมเป็นส่วนหนึ่งของการแจกจ่าย Tomcat

  • Ant เกิดมาจากปัญหาและความซับซ้อนที่เกี่ยวข้องกับเครื่องมือ Apache Make

  • Ant ได้รับการเลื่อนขั้นเป็นโปรเจ็กต์อิสระใน Apache ในปี 2000 Apache Ant เวอร์ชันล่าสุดเมื่อเดือนพฤษภาคม 2014 คือ 1.9.4

คุณสมบัติของ Apache Ant

  • Ant เป็นเครื่องมือสร้างและปรับใช้ Java ที่สมบูรณ์ที่สุดที่มีอยู่

  • Ant เป็นแพลตฟอร์มที่เป็นกลางและสามารถจัดการคุณสมบัติเฉพาะของแพลตฟอร์มเช่นตัวคั่นไฟล์

  • Ant สามารถใช้เพื่อทำงานเฉพาะแพลตฟอร์มเช่นการแก้ไขเวลาที่แก้ไขของไฟล์โดยใช้คำสั่ง 'touch'

  • Ant สคริปต์เขียนโดยใช้ XML ธรรมดา หากคุณคุ้นเคยกับ XML แล้วคุณสามารถเรียนรู้ Ant ได้อย่างรวดเร็ว

  • Ant เก่งในการทำงานซ้ำ ๆ ที่ซับซ้อนโดยอัตโนมัติ

  • Ant มาพร้อมกับรายการงานที่กำหนดไว้ล่วงหน้าจำนวนมาก

  • Ant มีอินเทอร์เฟซสำหรับพัฒนางานแบบกำหนดเอง

  • Ant สามารถเรียกใช้งานได้อย่างง่ายดายจากบรรทัดคำสั่งและสามารถทำงานร่วมกับ IDE ฟรีและเชิงพาณิชย์ได้

Apache Ant Ant จัดจำหน่ายภายใต้ใบอนุญาตซอฟต์แวร์ Apache ซึ่งเป็นใบอนุญาตโอเพนซอร์สเต็มรูปแบบที่ได้รับการรับรองโดยโครงการริเริ่มโอเพ่นซอร์ส

Apache Ant เวอร์ชันล่าสุดรวมถึงซอร์สโค้ดไฟล์คลาสและเอกสารประกอบสามารถดูได้ที่ http://ant.apache.org.

การติดตั้ง Apache Ant

สันนิษฐานว่าคุณได้ดาวน์โหลดและติดตั้ง Java Development Kit (JDK) บนคอมพิวเตอร์ของคุณแล้ว ถ้าไม่ได้โปรดทำตามคำแนะนำที่นี่

  • ตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อม JAVA_HOME ถูกตั้งค่าเป็นโฟลเดอร์ที่ติดตั้ง JDK ของคุณ

  • ดาวน์โหลดไบนารีจาก http://ant.apache.org

  • แตกไฟล์ zip ไปยังตำแหน่งที่สะดวก c: \ folder โดยใช้ Winzip, winRAR, 7-zip หรือเครื่องมือที่คล้ายกัน

  • สร้างตัวแปรสภาพแวดล้อมใหม่ที่เรียกว่า ANT_HOME ที่ชี้ไปที่โฟลเดอร์การติดตั้ง Ant ในกรณีนี้ c:\apache-ant-1.8.2-bin โฟลเดอร์

  • ต่อท้ายพา ธ ไปยังไฟล์แบตช์ Apache Ant กับตัวแปรสภาพแวดล้อม PATH ในกรณีของเรานี่จะเป็นไฟล์c:\apache-ant-1.8.2-bin\bin โฟลเดอร์

กำลังตรวจสอบการติดตั้ง Apache Ant

ในการตรวจสอบว่าการติดตั้ง Apache Ant สำเร็จบนคอมพิวเตอร์ของคุณให้พิมพ์ ant บนพรอมต์คำสั่งของคุณ

คุณควรเห็นผลลัพธ์คล้ายกับ:

C:\>ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010

หากคุณไม่เห็นผลลัพธ์ข้างต้นโปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนการติดตั้งอย่างถูกต้อง

การติดตั้ง Eclipse

บทช่วยสอนนี้ยังครอบคลุมถึงการรวม Ant กับ Eclipse IDE ดังนั้นหากคุณยังไม่ได้ติดตั้ง Eclipse โปรดดาวน์โหลดและติดตั้ง Eclipse

ในการติดตั้ง Eclipse:

  • ดาวน์โหลดไบนารี Eclipse ล่าสุดจากwww.eclipse.org

  • แตกไฟล์ไบนารี Eclipse ไปยังตำแหน่งที่สะดวกพูด c: \ folder

  • เรียกใช้ Eclipse จาก c: \ eclipse \ eclipse.exe

โดยปกติไฟล์บิลด์ของ Ant เรียกว่า build.xmlควรอยู่ในไดเร็กทอรีฐานของโครงการ อย่างไรก็ตามไม่มีข้อ จำกัด เกี่ยวกับชื่อไฟล์หรือตำแหน่งของไฟล์ คุณมีอิสระที่จะใช้ชื่อไฟล์อื่นหรือบันทึกไฟล์บิลด์ในตำแหน่งอื่น

สำหรับแบบฝึกหัดนี้ให้สร้างไฟล์ชื่อ build.xml ที่ใดก็ได้ในคอมพิวเตอร์ของคุณโดยมีเนื้อหาต่อไปนี้:

<?xml version="1.0"?>
   <project name="Hello World Project" default="info">
   <target name="info">
      <echo>Hello World - Welcome to Apache Ant!</echo>
   </target>
</project>

โปรดทราบว่าไม่ควรมีบรรทัดหรือช่องว่างก่อนการประกาศ xml หากคุณอนุญาตข้อความแสดงข้อผิดพลาดต่อไปนี้จะเกิดขึ้นขณะดำเนินการสร้างมด -

ไม่อนุญาตให้จับคู่เป้าหมายคำสั่งการประมวลผล "[xX] [mM] [lL]" ไฟล์บิวด์ทั้งหมดต้องการไฟล์project องค์ประกอบและอย่างน้อยหนึ่ง target ธาตุ.

องค์ประกอบ XML project มีคุณสมบัติสามประการ:

คุณลักษณะ คำอธิบาย
ชื่อ ชื่อของโครงการ (ไม่จำเป็น)
ค่าเริ่มต้น เป้าหมายดีฟอลต์สำหรับบิลด์สคริปต์ โครงการอาจมีเป้าหมายจำนวนเท่าใดก็ได้ แอ็ตทริบิวต์นี้ระบุเป้าหมายที่ควรถือเป็นค่าเริ่มต้น (บังคับ)
เบสแอร์ ไดเร็กทอรีฐาน (หรือ) โฟลเดอร์รูทสำหรับโปรเจ็กต์ (ไม่จำเป็น)

เป้าหมายคือชุดของงานที่คุณต้องการเรียกใช้เป็นหน่วยเดียว ในตัวอย่างของเราเรามีเป้าหมายง่ายๆในการส่งข้อความให้ข้อมูลแก่ผู้ใช้

เป้าหมายสามารถมีการอ้างอิงกับเป้าหมายอื่น ๆ ตัวอย่างเช่นกdeploy เป้าหมายอาจมีการพึ่งพาไฟล์ package เป้าหมาย package เป้าหมายอาจมีการพึ่งพาไฟล์ compileเป้าหมายและอื่น ๆ การอ้างอิงจะแสดงโดยใช้dependsแอตทริบิวต์ ตัวอย่างเช่น:

<target name="deploy" depends="package">
  ....
</target>
<target name="package" depends="clean,compile">
  ....
</target>
<target name="clean" >
  ....
</target>
<target name="compile" >
  ....
</target>

องค์ประกอบเป้าหมายมีคุณสมบัติดังต่อไปนี้:

คุณลักษณะ คำอธิบาย
ชื่อ ชื่อของเป้าหมาย (จำเป็น)
ขึ้นอยู่กับ รายการที่คั่นด้วยจุลภาคของเป้าหมายทั้งหมดที่เป้าหมายนี้ขึ้นอยู่ (ไม่จำเป็น)
คำอธิบาย คำอธิบายสั้น ๆ ของเป้าหมาย (ไม่จำเป็น)
ถ้า อนุญาตให้ดำเนินการเป้าหมายตามความจริงของแอตทริบิวต์ที่มีเงื่อนไข (ไม่จำเป็น)
เว้นแต่ เพิ่มเป้าหมายในรายการการอ้างอิงของจุดขยายที่ระบุ จุดขยายนั้นคล้ายกับเป้าหมาย แต่ไม่มีภารกิจใด ๆ (ไม่จำเป็น)

echoงานในตัวอย่างข้างต้นเป็นงานเล็กน้อยที่พิมพ์ข้อความ ในตัวอย่างของเราก็พิมพ์ข้อความHello World

ในการรันไฟล์ ant build ให้เปิด command prompt และไปที่โฟลเดอร์ที่ build.xml อยู่และพิมพ์ ant info. คุณยังสามารถพิมพ์antแทน. ทั้งสองจะทำงานได้เพราะinfoเป็นเป้าหมายเริ่มต้นในไฟล์บิลด์ คุณควรเห็นผลลัพธ์ต่อไปนี้:

C:\>ant
Buildfile: C:\build.xml

info: [echo] Hello World - Welcome to Apache Ant!

BUILD SUCCESSFUL
Total time: 0 seconds

C:\>

ไฟล์ Ant build เขียนด้วย XML ซึ่งไม่อนุญาตให้ประกาศตัวแปรเหมือนที่คุณทำในภาษาโปรแกรมที่คุณชื่นชอบ อย่างไรก็ตามตามที่คุณจินตนาการไว้มันจะมีประโยชน์หาก Ant อนุญาตให้ประกาศตัวแปรเช่นชื่อโปรเจ็กต์ไดเร็กทอรีแหล่งที่มาของโปรเจ็กต์เป็นต้น

Ant ใช้ไฟล์ propertyองค์ประกอบที่ช่วยให้คุณระบุคุณสมบัติ สิ่งนี้ช่วยให้คุณสมบัติสามารถเปลี่ยนจากโครงสร้างหนึ่งไปยังอีกโครงสร้างหนึ่งหรือจากสภาพแวดล้อมหนึ่งไปยังอีกสภาพแวดล้อมหนึ่ง

ตามค่าเริ่มต้น Ant มีคุณสมบัติที่กำหนดไว้ล่วงหน้าต่อไปนี้ซึ่งสามารถใช้ในไฟล์บิลด์:

คุณสมบัติ คำอธิบาย
ant.file ตำแหน่งเต็มของไฟล์บิลด์
ant.version เวอร์ชันของการติดตั้ง Apache Ant
เบสแอร์ ฐานข้อมูลของโครงสร้างตามที่ระบุไว้ในไฟล์ basedir แอตทริบิวต์ของ project ธาตุ.
ant.java.version เวอร์ชันของ JDK ที่ Ant ใช้
ant.project.name ชื่อของโครงการตามที่ระบุใน name atrribute ของ project ธาตุ.
ant.project.default-target เป้าหมายเริ่มต้นของโครงการปัจจุบัน
ant.project.invoked- เป้าหมาย รายการที่คั่นด้วยเครื่องหมายจุลภาคของเป้าหมายที่เรียกใช้ในโปรเจ็กต์ปัจจุบัน
ant.core.lib ตำแหน่งเต็มของไฟล์ Ant jar
มดบ้าน โฮมไดเร็กทอรีของการติดตั้ง Ant
ant.library.dir โฮมไดเร็กทอรีสำหรับไฟล์ไลบรารี Ant - โดยทั่วไปคือโฟลเดอร์ ANT_HOME / lib

Ant ยังทำให้คุณสมบัติของระบบ (ตัวอย่าง: file.separator) พร้อมใช้งานในไฟล์บิลด์

นอกเหนือจากข้างต้นผู้ใช้สามารถกำหนดคุณสมบัติเพิ่มเติมโดยใช้ไฟล์ propertyธาตุ. ตัวอย่างต่อไปนี้แสดงวิธีกำหนดคุณสมบัติที่เรียกsitename:

<?xml version="1.0"?>
<project name="Hello World Project" default="info">
   <property name="sitename" value="www.tutorialspoint.com"/>
   <target name="info">
      <echo>Apache Ant version is ${ant.version} - You are 
         at ${sitename} </echo>
   </target>
</project>

การรัน Ant บนไฟล์ build ด้านบนจะสร้างผลลัพธ์ต่อไปนี้:

C:\>ant
Buildfile: C:\build.xml

info: [echo] Apache Ant version is Apache Ant(TM) version 1.8.2  
      compiled on December 20 2010 - You are at www.tutorialspoint.com

BUILD SUCCESSFUL
Total time: 0 seconds
C:\>

การตั้งค่าคุณสมบัติโดยตรงในไฟล์บิลด์นั้นทำได้ดีหากคุณกำลังทำงานกับคุณสมบัติจำนวนหนึ่ง อย่างไรก็ตามสำหรับโปรเจ็กต์ขนาดใหญ่ควรจัดเก็บคุณสมบัติไว้ในไฟล์คุณสมบัติแยกต่างหาก

การจัดเก็บคุณสมบัติในไฟล์แยกต่างหากมีประโยชน์ดังต่อไปนี้:

  • ช่วยให้คุณสามารถนำไฟล์บิลด์เดียวกันมาใช้ซ้ำโดยมีการตั้งค่าคุณสมบัติที่แตกต่างกันสำหรับสภาพแวดล้อมการดำเนินการที่แตกต่างกัน ตัวอย่างเช่นไฟล์คุณสมบัติ build สามารถเก็บรักษาแยกกันสำหรับสภาพแวดล้อม DEV, TEST และ PROD

  • จะมีประโยชน์เมื่อคุณไม่ทราบค่าของคุณสมบัติ (ในสภาพแวดล้อมเฉพาะ) ล่วงหน้า สิ่งนี้ช่วยให้คุณดำเนินการสร้างในสภาพแวดล้อมอื่น ๆ ที่ทราบค่าคุณสมบัติ

ไม่มีกฎที่ยากและรวดเร็ว แต่โดยทั่วไปไฟล์คุณสมบัติจะถูกตั้งชื่อ build.properties และวางไว้ด้านข้างของ build.xmlไฟล์. คุณสามารถสร้างไฟล์คุณสมบัติบิลด์หลายไฟล์ตามสภาพแวดล้อมการปรับใช้เช่นbuild.properties.dev และ build.properties.test.

เนื้อหาของไฟล์คุณสมบัติ build นั้นคล้ายกับไฟล์คุณสมบัติ java ปกติ ประกอบด้วยหนึ่งคุณสมบัติต่อบรรทัด แต่ละคุณสมบัติจะแสดงด้วยชื่อและคู่ค่า คู่ของชื่อและค่าจะถูกคั่นด้วยเครื่องหมายเท่ากับ (=) ขอแนะนำเป็นอย่างยิ่งว่าคุณสมบัติจะมีคำอธิบายประกอบพร้อมความคิดเห็นที่เหมาะสม ความคิดเห็นแสดงรายการโดยใช้อักขระแฮช (#)

ตัวอย่างต่อไปนี้แสดงไฟล์ build.xml ไฟล์และไฟล์ที่เกี่ยวข้อง build.properties ไฟล์:

build.xml

<?xml version="1.0"?>
<project name="Hello World Project" default="info">
   <property file="build.properties"/>
      <target name="info">
         <echo>Apache Ant version is ${ant.version} - You are 
            at ${sitename} </echo>
      </target>
</project>

build.properties

# The Site Name
sitename=www.tutorialspoint.com
buildversion=3.3.2

ในตัวอย่างข้างต้น sitenameเป็นคุณสมบัติที่กำหนดเองซึ่งแมปกับชื่อเว็บไซต์ คุณสามารถประกาศคุณสมบัติที่กำหนดเองจำนวนเท่าใดก็ได้ในลักษณะนี้ คุณสมบัติที่กำหนดเองอื่นที่แสดงในตัวอย่างข้างต้นคือbuildversionซึ่งในกรณีนี้หมายถึงเวอร์ชันของการสร้าง

นอกเหนือจากที่กล่าวมาข้างต้น Ant ยังมาพร้อมกับคุณสมบัติการสร้างที่กำหนดไว้ล่วงหน้าจำนวนหนึ่งซึ่งแสดงอยู่ในส่วนก่อนหน้านี้ แต่จะแสดงไว้ด้านล่างอีกครั้ง

คุณสมบัติ คำอธิบาย
ant.file ตำแหน่งเต็มของไฟล์บิลด์
ant.version เวอร์ชันของการติดตั้ง Apache Ant
เบสแอร์ ฐานข้อมูลของโครงสร้างตามที่ระบุไว้ในไฟล์ basedir แอตทริบิวต์ของ project ธาตุ.
ant.java.version เวอร์ชันของ JDK ที่ Ant ใช้
ant.project.name ชื่อของโครงการตามที่ระบุใน name atrribute ของ project ธาตุ.
ant.project.default-target เป้าหมายเริ่มต้นของโครงการปัจจุบัน
ant.project.invoked- เป้าหมาย รายการที่คั่นด้วยเครื่องหมายจุลภาคของเป้าหมายที่เรียกใช้ในโปรเจ็กต์ปัจจุบัน
ant.core.lib ตำแหน่งเต็มของไฟล์ Ant jar
มดบ้าน โฮมไดเร็กทอรีของการติดตั้ง Ant
ant.library.dir โฮมไดเร็กทอรีสำหรับไฟล์ไลบรารี Ant - โดยทั่วไปคือโฟลเดอร์ ANT_HOME / lib

ตัวอย่างที่นำเสนอในบทนี้ใช้ไฟล์ ant.version ทรัพย์สินในตัว.

Ant มีประเภทข้อมูลที่กำหนดไว้ล่วงหน้าจำนวนมาก อย่าสับสนระหว่างคำว่า "ชนิดข้อมูล" กับคำที่มีอยู่ในภาษาโปรแกรม แต่ให้ถือว่าเป็นชุดของบริการที่มีอยู่แล้วในผลิตภัณฑ์

ประเภทข้อมูลต่อไปนี้จัดเตรียมโดย Apache Ant

ชุดไฟล์

ชนิดข้อมูลชุดไฟล์แสดงถึงชุดของไฟล์ ใช้เป็นตัวกรองเพื่อรวมหรือยกเว้นไฟล์ที่ตรงกับรูปแบบเฉพาะ

ตัวอย่างเช่นอ้างอิงรหัสต่อไปนี้ ที่นี่แอตทริบิวต์ src ชี้ไปที่โฟลเดอร์ต้นทางของโครงการ

ชุดไฟล์จะเลือกไฟล์. java ทั้งหมดในโฟลเดอร์ต้นทางยกเว้นไฟล์ที่มีคำว่า 'Stub' ตัวกรองที่คำนึงถึงตัวพิมพ์เล็กและใหญ่ถูกนำไปใช้กับชุดไฟล์ซึ่งหมายความว่าไฟล์ที่มีชื่อ Samplestub.java จะไม่ถูกแยกออกจากชุดไฟล์

<fileset dir="${src}" casesensitive="yes">
   <include name="**/*.java"/>
   <exclude name="**/*Stub*"/>
</fileset>

ชุดรูปแบบ

ชุดรูปแบบคือรูปแบบที่ช่วยให้สามารถกรองไฟล์หรือโฟลเดอร์ได้อย่างง่ายดายตามรูปแบบบางอย่าง รูปแบบสามารถสร้างได้โดยใช้อักขระเมตาต่อไปนี้:

  • ? - จับคู่อักขระหนึ่งตัวเท่านั้น

  • * - จับคู่อักขระศูนย์หรือหลายตัว

  • ** - จับคู่ศูนย์หรือหลายไดเรกทอรีซ้ำ

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ชุดรูปแบบ

<patternset id="java.files.without.stubs">
   <include name="src/**/*.java"/>
   <exclude name="src/**/*Stub*"/>
</patternset>

จากนั้นชุดรูปแบบสามารถนำกลับมาใช้กับชุดไฟล์ได้ดังนี้:

<fileset dir="${src}" casesensitive="yes">
   <patternset refid="java.files.without.stubs"/>
</fileset>

รายการไฟล์

ชนิดข้อมูล filelist คล้ายกับชุดไฟล์ยกเว้นความแตกต่างต่อไปนี้:

  • filelist มีรายชื่อไฟล์ที่ระบุชื่ออย่างชัดเจนและไม่รองรับไวลด์การ์ด

  • ชนิดข้อมูล filelist สามารถใช้ได้กับไฟล์ที่มีอยู่หรือไม่มีอยู่

ให้เราดูตัวอย่างประเภทข้อมูล filelist ต่อไปนี้ นี่คือแอตทริบิวต์webapp.src.folder ชี้ไปที่โฟลเดอร์แหล่งที่มาของเว็บแอปพลิเคชันของโครงการ

<filelist id="config.files" dir="${webapp.src.folder}">
   <file name="applicationConfig.xml"/>
   <file name="faces-config.xml"/>
   <file name="web.xml"/>
   <file name="portlet.xml"/>
</filelist>

ชุดตัวกรอง

การใช้ชนิดข้อมูลชุดตัวกรองร่วมกับงานคัดลอกคุณสามารถแทนที่ข้อความบางอย่างในไฟล์ทั้งหมดที่ตรงกับรูปแบบด้วยค่าทดแทน

ตัวอย่างทั่วไปคือการต่อท้ายหมายเลขเวอร์ชันเข้ากับไฟล์บันทึกย่อประจำรุ่นดังที่แสดงในรหัสต่อไปนี้

<copy todir="${output.dir}">
   <fileset dir="${releasenotes.dir}" includes="**/*.txt"/>
   <filterset>
      <filter token="VERSION" value="${current.version}"/>
   </filterset>
</copy>

ในประมวลกฎหมายนี้:

  • แอตทริบิวต์ output.dir ชี้ไปที่โฟลเดอร์ผลลัพธ์ของโครงการ

  • แอตทริบิวต์ releasenotes.dir ชี้ไปที่โฟลเดอร์บันทึกประจำรุ่นของโครงการ

  • แอตทริบิวต์ current.version ชี้ไปที่โฟลเดอร์เวอร์ชันปัจจุบันของโครงการ

  • งานคัดลอกตามชื่อที่แนะนำใช้เพื่อคัดลอกไฟล์จากตำแหน่งหนึ่งไปยังอีกที่หนึ่ง

เส้นทาง

pathชนิดข้อมูลมักใช้เพื่อแสดงคลาส - พา ธ รายการในเส้นทางจะถูกคั่นโดยใช้อัฒภาคหรือเครื่องหมายทวิภาค อย่างไรก็ตามอักขระเหล่านี้จะถูกแทนที่ในรันไทม์ด้วยอักขระตัวคั่นพา ธ ของระบบปฏิบัติการ

classpath ถูกตั้งค่าเป็นรายการไฟล์ jar และคลาสในโปรเจ็กต์ดังที่แสดงในตัวอย่างด้านล่าง

<path id="build.classpath.jar">
   <pathelement path="${env.J2EE_HOME}/${j2ee.jar}"/>
   <fileset dir="lib">
      <include name="**/*.jar"/>
   </fileset>
</path>

ในรหัสนี้:

  • แอตทริบิวต์ env.J2EE_HOME ชี้ไปที่ตัวแปรสภาพแวดล้อม J2EE_HOME.

  • แอตทริบิวต์ j2ee.jar ชี้ไปที่ชื่อของไฟล์ jar J2EE ในโฟลเดอร์ฐาน J2EE

ตอนนี้เราได้เรียนรู้เกี่ยวกับชนิดข้อมูลใน Ant แล้วก็ถึงเวลาที่จะนำความรู้นั้นไปปฏิบัติจริง เราจะสร้างโครงการในบทนี้ จุดมุ่งหมายของบทนี้คือการสร้างไฟล์ Ant ที่รวบรวมคลาส java และวางไว้ในโฟลเดอร์ WEB-INF \ class

พิจารณาโครงสร้างโครงการต่อไปนี้:

  • สคริปต์ฐานข้อมูลจะถูกเก็บไว้ในไฟล์ db โฟลเดอร์

  • ซอร์สโค้ด java ถูกเก็บไว้ในไฟล์ src โฟลเดอร์

  • รูปภาพ, js, META-INF, สไตล์ (css) จะถูกเก็บไว้ในไฟล์ war โฟลเดอร์

  • JSPs ถูกเก็บไว้ในไฟล์ jsp โฟลเดอร์

  • ไฟล์ jar ของบุคคลที่สามจะถูกเก็บไว้ในไฟล์ lib โฟลเดอร์

  • ไฟล์คลาส java ถูกเก็บไว้ในไฟล์ WEB-INF\classes โฟลเดอร์

โครงการนี้เป็นรูปแบบ Hello World แอปพลิเคชันแฟกซ์สำหรับส่วนที่เหลือของบทช่วยสอนนี้

C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
.  +---faxapp
.  +---dao
.  +---entity
.  +---util
.  +---web
+---war
   +---images
   +---js
   +---META-INF
   +---styles
   +---WEB-INF
      +---classes
      +---jsp
      +---lib

นี่คือ build.xml ที่จำเป็นสำหรับโปรเจ็กต์นี้ ให้เราพิจารณาทีละชิ้น

<?xml version="1.0"?>
<project name="fax" basedir="." default="build">
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>

   <target name="build" description="Compile source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" target="1.5">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      </javac>
   </target>
 
   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

ขั้นแรกให้เราประกาศคุณสมบัติบางอย่างสำหรับโฟลเดอร์ต้นทางเว็บและสร้าง

<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>

ในตัวอย่างนี้:

  • src.dir หมายถึงโฟลเดอร์ซอร์สของโปรเจ็กต์ที่สามารถพบไฟล์ซอร์ส java ได้

  • web.dir หมายถึงโฟลเดอร์แหล่งเว็บของโครงการซึ่งคุณสามารถค้นหา JSPs, web.xml, css, javascript และไฟล์อื่น ๆ ที่เกี่ยวข้องกับเว็บ

  • build.dir หมายถึงโฟลเดอร์ผลลัพธ์ของการคอมไพล์โครงการ

คุณสมบัติสามารถอ้างถึงคุณสมบัติอื่น ๆ ดังที่แสดงในตัวอย่างด้านบนไฟล์build.dir คุณสมบัติอ้างอิงถึงไฟล์ web.dir ทรัพย์สิน.

ในตัวอย่างนี้ไฟล์ src.dir อ้างถึงโฟลเดอร์ต้นทางของโครงการ

เป้าหมายเริ่มต้นของโครงการของเราคือไฟล์ compileเป้าหมาย แต่ก่อนอื่นให้เราดูที่clean เป้าหมาย

เป้าหมายที่สะอาดตามชื่อที่แนะนำจะลบไฟล์ในโฟลเดอร์บิลด์

<target name="clean" description="Clean output directories">
   <delete>
      <fileset dir="${build.dir}">
         <include name="**/*.class"/>
      </fileset>
   </delete>
</target>

master-classpath เก็บข้อมูล classpath ในกรณีนี้จะรวมคลาสในโฟลเดอร์ build และไฟล์ jar ในโฟลเดอร์ lib

<path id="master-classpath">
   <fileset dir="${web.dir}/WEB-INF/lib">
      <include name="*.jar"/>
   </fileset>
   <pathelement path="${build.dir}"/>
</path>

สุดท้ายสร้างเป้าหมายเพื่อสร้างไฟล์ ก่อนอื่นเราสร้างไดเร็กทอรีบิลด์หากไม่มีอยู่ จากนั้นเราดำเนินการคำสั่ง javac (ระบุ jdk1.5 เป็นคอมไพล์เป้าหมายของเรา) เราจัดหาโฟลเดอร์ต้นทางและ classpath ให้กับงาน javac และขอให้ปล่อยไฟล์คลาสในโฟลเดอร์ build

<target name="build" description="Compile main source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   </javac>
</target>

การดำเนินการ Ant บนไฟล์นี้จะรวบรวมไฟล์ซอร์ส java และวางคลาสไว้ในโฟลเดอร์ build

ผลลัพธ์ต่อไปนี้เป็นผลมาจากการรันไฟล์ Ant:

C:\>ant
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

ไฟล์จะถูกรวบรวมและวางไว้ในไฟล์ build.dir โฟลเดอร์

เอกสารเป็นสิ่งจำเป็นในโครงการใด ๆ เอกสารมีบทบาทอย่างมากในการบำรุงรักษาโครงการ Java ทำให้การจัดทำเอกสารง่ายขึ้นโดยการใช้งานในตัวjavadocเครื่องมือ. Ant ทำให้ง่ายยิ่งขึ้นด้วยการสร้างเอกสารตามความต้องการ

อย่างที่คุณทราบเครื่องมือ javadoc มีความยืดหยุ่นสูงและให้ตัวเลือกการกำหนดค่ามากมาย Ant แสดงตัวเลือกการกำหนดค่าเหล่านี้ผ่านงาน javadoc หากคุณไม่คุ้นเคยกับ javadocs เราขอแนะนำให้คุณเริ่มต้นด้วยJava Documentation Tutorialนี้

ส่วนต่อไปนี้แสดงรายการอ็อพชัน javadoc ที่ใช้บ่อยที่สุดที่ใช้ใน Ant

คุณลักษณะ

สามารถระบุแหล่งที่มาโดยใช้ sourcepath, sourcepathref หรือ sourcefiles.

  • sourcepath ใช้เพื่อชี้ไปที่โฟลเดอร์ของไฟล์ต้นฉบับ (เช่นโฟลเดอร์ src)

  • sourcepathref ใช้เพื่ออ้างถึงเส้นทางที่อ้างอิงโดยแอตทริบิวต์ path (เช่น delegates.src.dir)

  • sourcefiles ใช้เมื่อคุณต้องการระบุไฟล์แต่ละไฟล์เป็นรายการที่คั่นด้วยจุลภาค

เส้นทางปลายทางถูกระบุโดยใช้ destdir โฟลเดอร์ (เช่น build.dir)

คุณสามารถกรองไฟล์ javadocงานโดยระบุชื่อแพ็กเกจที่จะรวม สิ่งนี้ทำได้โดยใช้ไฟล์packagenames แอตทริบิวต์รายการไฟล์แพ็กเกจที่คั่นด้วยจุลภาค

คุณสามารถกรองกระบวนการ javadoc เพื่อแสดงเฉพาะคลาสสาธารณะส่วนตัวแพ็กเกจหรือคลาสและสมาชิกที่ได้รับการป้องกัน สิ่งนี้ทำได้โดยใช้ไฟล์private, public, package และ protected คุณลักษณะ.

คุณยังสามารถบอกงาน javadoc ให้รวมข้อมูลผู้แต่งและเวอร์ชันโดยใช้แอตทริบิวต์ที่เกี่ยวข้อง

คุณยังสามารถจัดกลุ่มแพ็คเกจเข้าด้วยกันโดยใช้ไฟล์ group แอตทริบิวต์เพื่อให้ง่ายต่อการนำทาง

วางมันทั้งหมดเข้าด้วยกัน

ให้เราดำเนินการต่อธีม Hello worldแอปพลิเคชันแฟกซ์ ให้เราเพิ่มเป้าหมายเอกสารในโครงการแอปพลิเคชันแฟกซ์ของเรา

ด้านล่างนี้เป็นตัวอย่างงาน javadoc ที่ใช้ในโครงการของเรา ในตัวอย่างนี้เราได้ระบุ javadoc เพื่อใช้ไฟล์src.dir เป็นไดเร็กทอรีต้นทางและ doc เป็นเป้าหมาย

นอกจากนี้เรายังได้ปรับแต่งชื่อหน้าต่างส่วนหัวและข้อมูลส่วนท้ายที่ปรากฏบนหน้าเอกสาร java

นอกจากนี้เราได้สร้างกลุ่มสามกลุ่ม:

  • หนึ่งสำหรับคลาสยูทิลิตี้ในโฟลเดอร์ซอร์สของเรา
  • หนึ่งสำหรับคลาสอินเทอร์เฟซผู้ใช้และ
  • หนึ่งสำหรับคลาสที่เกี่ยวข้องกับฐานข้อมูล

คุณอาจสังเกตเห็นว่ากลุ่มแพ็กเกจข้อมูลมีสองแพ็กเกจ -– faxapp.entity และ faxapp.dao

<target name="generate-javadoc">
   <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
      destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[= Fax Application =]]></doctitle>
      <bottom>
         <![CDATA[Copyright © 2011. All Rights Reserved.]]>
      </bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/>
      <group title="data packages" 
         packages="faxapp.entity.*:faxapp.dao.*"/>
   </javadoc>
   <echo message="java doc has been generated!" />
</target>

ให้เราดำเนินการภารกิจ javadoc Ant สร้างและวางไฟล์เอกสาร java ไว้ในโฟลเดอร์ doc

เมื่อ javadoc target ถูกดำเนินการจะให้ผลลัพธ์ดังต่อไปนี้:

C:\>ant generate-javadoc
Buildfile: C:\build.xml

java doc has been generated!

BUILD SUCCESSFUL
Total time: 10.63 second

ขณะนี้ไฟล์เอกสาร java อยู่ในไฟล์ doc โฟลเดอร์

โดยทั่วไปไฟล์ javadoc จะถูกสร้างขึ้นโดยเป็นส่วนหนึ่งของรีลีสหรือแพ็กเกจเป้าหมาย

ขั้นตอนตรรกะถัดไปหลังจากรวบรวมไฟล์ซอร์ส java ของคุณคือการสร้างไฟล์เก็บถาวร java นั่นคือไฟล์ JAR การสร้างไฟล์ JAR ด้วย Ant นั้นค่อนข้างง่ายด้วยไฟล์jarงาน. แอ็ตทริบิวต์ที่ใช้โดยทั่วไปของงาน jar มีดังนี้:

คุณลักษณะ คำอธิบาย
เบสแอร์ ไดเร็กทอรีฐานสำหรับไฟล์ JAR เอาต์พุต โดยค่าเริ่มต้นจะถูกตั้งค่าเป็นไดเร็กทอรีฐานของโปรเจ็กต์
บีบอัด แนะนำให้ Ant บีบอัดไฟล์ในขณะที่สร้างไฟล์ JAR
การบีบอัด ในขณะที่ compress แอตทริบิวต์สามารถใช้ได้กับแต่ละไฟล์ไฟล์ keepcompression แอตทริบิวต์ทำสิ่งเดียวกัน แต่ใช้กับไฟล์เก็บถาวรทั้งหมด
ทำลาย ชื่อของไฟล์ JAR เอาต์พุต
ซ้ำกัน ให้คำแนะนำ Ant ว่าควรทำอย่างไรเมื่อพบไฟล์ที่ซ้ำกัน คุณสามารถเพิ่มรักษาหรือล้มเหลวของไฟล์ที่ซ้ำกันได้
ไม่รวม ขอแนะนำให้ Ant ไม่รวมรายการไฟล์ที่คั่นด้วยจุลภาคเหล่านี้ในแพ็คเกจ
ไม่รวมไฟล์ เช่นเดียวกับข้างต้นยกเว้นไฟล์ที่ยกเว้นจะระบุโดยใช้รูปแบบ
inlcudes ผกผันของการไม่รวม
รวมถึงไฟล์ ผกผันของ excludesfile
อัพเดต แนะนำให้ Ant เขียนทับไฟล์ในไฟล์ JAR ที่สร้างไว้แล้ว

ดำเนินการต่อ Hello Worldโครงการ Fax Application ให้เราเพิ่มเป้าหมายใหม่เพื่อสร้างไฟล์ jar แต่ก่อนหน้านั้นให้เราพิจารณางานโถที่ให้ไว้ด้านล่าง

<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class"
/>

ที่นี่ web.dirชี้ไปที่เส้นทางของไฟล์แหล่งที่มาของเว็บ ในกรณีของเรานี่คือตำแหน่งที่จะวาง util.jar

build.dir คุณสมบัติในตัวอย่างนี้ชี้ไปที่โฟลเดอร์ build ที่สามารถพบไฟล์คลาสสำหรับ util.jar

ในตัวอย่างนี้เราสร้างไฟล์ jar ที่เรียกว่า util.jar โดยใช้คลาสจาก faxapp.util.*แพ็คเกจ อย่างไรก็ตามเราไม่รวมคลาสที่ลงท้ายด้วยชื่อ Test ไฟล์ jar ผลลัพธ์จะถูกวางไว้ในโฟลเดอร์ lib ของเว็บแอปพลิเคชัน

หากเราต้องการทำให้ util.jar เป็นไฟล์ jar ที่เรียกใช้งานได้เราต้องเพิ่มไฟล์ manifest กับ Main-Class meta แอตทริบิวต์

ดังนั้นตัวอย่างข้างต้นจะได้รับการอัปเดตเป็น:

<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class">
   <manifest>
      <attribute name="Main-Class" value="com.tutorialspoint.util.FaxUtil"/>
   </manifest>
</jar>

ในการดำเนินการงาน jar ให้ห่อไว้ภายในเป้าหมายโดยทั่วไปคือ build หรือ package target และดำเนินการ

<target name="build-jar">
<jar destfile="${web.dir}/lib/util.jar"
   basedir="${build.dir}/classes"
   includes="faxapp/util/**"
   excludes="**/Test.class">
   <manifest>
      <attribute name="Main-Class" value="com.tutorialspoint.util.FaxUtil"/>
   </manifest>
</jar>
</target>

การรัน Ant บนไฟล์นี้จะสร้างไฟล์ util.jar ให้เรา

ผลลัพธ์ต่อไปนี้เป็นผลมาจากการรันไฟล์ Ant:

C:\>ant build-jar
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 1.3 seconds

ตอนนี้ไฟล์ util.jar ถูกวางไว้ในโฟลเดอร์ผลลัพธ์

การสร้างไฟล์ WAR ด้วย Ant นั้นง่ายมากและคล้ายกับงานสร้างไฟล์ JAR ท้ายที่สุดไฟล์ WAR เช่นไฟล์ JAR เป็นเพียงไฟล์ ZIP อื่น

งาน WAR เป็นส่วนเสริมของงาน JAR แต่มีส่วนเสริมที่ดีในการจัดการสิ่งที่เข้าสู่โฟลเดอร์ WEB-INF / คลาสและสร้างไฟล์ web.xml งาน WAR มีประโยชน์ในการระบุโครงร่างเฉพาะของไฟล์ WAR

เนื่องจากงาน WAR เป็นส่วนเสริมของงาน JAR แอ็ตทริบิวต์ทั้งหมดของงาน JAR จึงใช้กับงาน WAR

คุณลักษณะ คำอธิบาย
webxml พา ธ ไปยังไฟล์ web.xml
lib การจัดกลุ่มเพื่อระบุสิ่งที่จะเข้าไปในโฟลเดอร์ WEB-INF \ lib
ชั้นเรียน การจัดกลุ่มเพื่อระบุสิ่งที่จะเข้าไปในโฟลเดอร์ WEB-INF \ class
metainf ระบุคำแนะนำสำหรับการสร้างไฟล์ MANIFEST.MF

ดำเนินการต่อ Hello Worldโครงการ Fax Application ให้เราเพิ่มเป้าหมายใหม่เพื่อสร้างไฟล์ jar แต่ก่อนหน้านั้นให้เราพิจารณาภารกิจสงคราม พิจารณาตัวอย่างต่อไปนี้:

<war destfile="fax.war" webxml="${web.dir}/web.xml">
   <fileset dir="${web.dir}/WebContent">
      <include name="**/*.*"/>
   </fileset>
   <lib dir="thirdpartyjars">
      <exclude name="portlet.jar"/>
   </lib>
   <classes dir="${build.dir}/web"/>
</war>

ตามตัวอย่างก่อนหน้านี้ไฟล์ web.dir ตัวแปรหมายถึงโฟลเดอร์ของเว็บต้นทางเช่นโฟลเดอร์ที่มีไฟล์ JSP, css, javascript เป็นต้น

build.dirตัวแปรหมายถึงโฟลเดอร์เอาต์พุต - นี่คือที่ที่สามารถพบคลาสสำหรับแพ็คเกจ WAR โดยทั่วไปคลาสจะรวมอยู่ในโฟลเดอร์ WEB-INF / คลาสของไฟล์ WAR

ในตัวอย่างนี้เรากำลังสร้างไฟล์สงครามชื่อ fax.war ไฟล์ WEB.XML ได้มาจากโฟลเดอร์แหล่งที่มาของเว็บ ไฟล์ทั้งหมดจากโฟลเดอร์ 'WebContent' ภายใต้เว็บจะถูกคัดลอกไปยังไฟล์ WAR

โฟลเดอร์ WEB-INF / lib ถูกเติมด้วยไฟล์ jar จากโฟลเดอร์ thirdpartyjars อย่างไรก็ตามเราไม่รวม portlet.jar เนื่องจากมีอยู่แล้วในโฟลเดอร์ lib ของแอ็พพลิเคชันเซิร์ฟเวอร์ สุดท้ายเรากำลังคัดลอกคลาสทั้งหมดจากโฟลเดอร์เว็บของไดเร็กทอรี build และใส่ลงในโฟลเดอร์ WEB-INF / คลาส

ห่อภารกิจสงครามไว้ในเป้าหมาย Ant (โดยปกติจะเป็นแพ็คเกจ) แล้วเรียกใช้งาน สิ่งนี้จะสร้างไฟล์ WAR ในตำแหน่งที่ระบุ

เป็นไปได้ทั้งหมดที่จะซ้อนคลาส lib, metainf และ webinf director เพื่อให้พวกเขาอยู่ในโฟลเดอร์ที่กระจัดกระจายที่ใดก็ได้ในโครงสร้างโปรเจ็กต์ แต่แนวทางปฏิบัติที่ดีที่สุดแนะนำว่าโครงการเว็บของคุณควรมีโครงสร้างเนื้อหาเว็บที่คล้ายกับโครงสร้างของไฟล์ WAR โครงการแอปพลิเคชันแฟกซ์มีโครงสร้างที่ระบุไว้โดยใช้หลักการพื้นฐานนี้

ในการดำเนินงานสงครามให้ห่อมันไว้ในเป้าหมายโดยทั่วไปคือเป้าหมายบิลด์หรือแพ็กเกจและเรียกใช้งาน

<target name="build-war">
   <war destfile="fax.war" webxml="${web.dir}/web.xml">
   <fileset dir="${web.dir}/WebContent">
      <include name="**/*.*"/>
   </fileset>
   <lib dir="thirdpartyjars">
      <exclude name="portlet.jar"/>
   </lib>
   <classes dir="${build.dir}/web"/>
   </war>
</target>

การเรียกใช้ Ant บนไฟล์นี้จะสร้างไฟล์ fax.war ไฟล์สำหรับเรา

ผลลัพธ์ต่อไปนี้เป็นผลมาจากการรันไฟล์ Ant:

C:\>ant build-war
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 12.3 seconds

ตอนนี้ไฟล์ fax.war ถูกวางไว้ในโฟลเดอร์ผลลัพธ์ เนื้อหาของไฟล์สงครามจะเป็น:

fax.war:
   +---jsp             This folder contains the jsp files
   +---css             This folder contains the stylesheet files
   +---js              This folder contains the javascript files
   +---images          This folder contains the image files
   +---META-INF        This folder contains the Manifest.Mf
   +---WEB-INF
      +---classes   This folder contains the compiled classes
      +---lib       Third party libraries and the utility jar files
      WEB.xml       Configuration file that defines the WAR package

เราได้เรียนรู้แง่มุมต่างๆของ Ant โดยใช้ไฟล์ Hello World แฟกซ์เว็บแอปพลิเคชันเป็นบิตและชิ้น

ตอนนี้ได้เวลารวบรวมทุกอย่างเข้าด้วยกันเพื่อสร้างไฟล์ build.xml ที่สมบูรณ์และสมบูรณ์ พิจารณาbuild.properties และ build.xml ไฟล์ดังต่อไปนี้:

build.properties

deploy.path=c:\tomcat6\webapps

build.xml

<?xml version="1.0"?>

<project name="fax" basedir="." default="usage">
   <property file="build.properties"/>
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="javadoc.dir" value="doc"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>
    
   <target name="javadoc">
      <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
         destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[<h1>= Fax Application =</h1>]]>
      </doctitle>
      <bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]>
      </bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/> 
      <group title="data packages" 
         packages="faxapp.entity.*:faxapp.dao.*"/>
      </javadoc>
   </target>

   <target name="usage">
      <echo message=""/>
      <echo message="${name} build file"/>
      <echo message="-----------------------------------"/>
      <echo message=""/>
      <echo message="Available targets are:"/>
      <echo message=""/>
      <echo message="deploy    --> Deploy application as directory"/>
      <echo message="deploywar --> Deploy application as a WAR file"/>
      <echo message=""/>
   </target>

   <target name="build" description="Compile main 
      source tree java files">
   <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" 
         target="1.5" debug="true"
         deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
      </javac>
   </target>

   <target name="deploy" depends="build" 
      description="Deploy application">
   <copy todir="${deploy.path}/${name}" 
      preservelastmodified="true">
      <fileset dir="${web.dir}">
         <include name="**/*.*"/>
      </fileset>
   </copy>
   </target>

   <target name="deploywar" depends="build" 
      description="Deploy application as a WAR file">
      <war destfile="${name}.war"
         webxml="${web.dir}/WEB-INF/web.xml">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </war>
      <copy todir="${deploy.path}" preservelastmodified="true">
         <fileset dir=".">
            <include name="*.war"/>
         </fileset>
      </copy>
   </target>
    

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

ในตัวอย่างนี้:

  • ก่อนอื่นเราประกาศเส้นทางไปยังโฟลเดอร์ webapps ใน Tomcat ในไฟล์คุณสมบัติการสร้างเป็นไฟล์ deploy.path ตัวแปร.

  • นอกจากนี้เรายังประกาศโฟลเดอร์ต้นทางสำหรับไฟล์ java ในไฟล์ src.dir ตัวแปร.

  • จากนั้นเราจะประกาศโฟลเดอร์ต้นทางสำหรับไฟล์เว็บในไฟล์ web.dir ตัวแปร. javadoc.dir เป็นโฟลเดอร์สำหรับจัดเก็บเอกสาร java และ build.dir เป็นพา ธ สำหรับจัดเก็บไฟล์เอาต์พุตบิลด์

  • จากนั้นเราจะประกาศชื่อของเว็บแอปพลิเคชันซึ่งก็คือ fax ในกรณีของเรา

  • เรายังกำหนดพา ธ คลาสมาสเตอร์ซึ่งมีไฟล์ JAR อยู่ในโฟลเดอร์ WEB-INF / lib ของโปรเจ็กต์

  • นอกจากนี้เรายังรวมไฟล์คลาสที่มีอยู่ในไฟล์ build.dir ในพา ธ มาสเตอร์คลาส

  • เป้าหมาย Javadoc สร้าง javadoc ที่จำเป็นสำหรับโปรเจ็กต์และเป้าหมายการใช้งานถูกใช้เพื่อพิมพ์เป้าหมายทั่วไปที่มีอยู่ในไฟล์บิลด์

ตัวอย่างข้างต้นแสดงเป้าหมายการปรับใช้สองเป้าหมาย: deploy และ deploywar.

เป้าหมายการปรับใช้จะคัดลอกไฟล์จากไดเร็กทอรีเว็บไปยังไดเร็กทอรีการปรับใช้โดยสงวนการประทับวันที่เวลาที่แก้ไขล่าสุด สิ่งนี้มีประโยชน์เมื่อปรับใช้กับเซิร์ฟเวอร์ที่รองรับการปรับใช้แบบร้อน

เป้าหมายที่สะอาดจะล้างไฟล์ที่สร้างไว้ก่อนหน้านี้ทั้งหมด

เป้าหมาย deploywar สร้างไฟล์ war จากนั้นคัดลอกไฟล์ war ไปยังไดเร็กทอรี deploy ของแอ็พพลิเคชันเซิร์ฟเวอร์

ในบทที่แล้วเราได้เรียนรู้วิธีการจัดแพ็คเกจแอปพลิเคชันและปรับใช้กับโฟลเดอร์

ในบทนี้เราจะปรับใช้เว็บแอปพลิเคชันโดยตรงไปยังโฟลเดอร์การปรับใช้แอ็พพลิเคชันเซิร์ฟเวอร์จากนั้นเราจะเพิ่มเป้าหมาย Ant สองสามเป้าหมายเพื่อเริ่มและหยุดบริการ ให้เราดำเนินการต่อด้วยไฟล์Hello Worldแอปพลิเคชันเว็บแฟกซ์ นี่เป็นความต่อเนื่องของบทก่อนหน้าส่วนประกอบใหม่จะเน้นด้วยตัวหนา

build.properties

# Ant properties for building the springapp

appserver.home=c:\\install\\apache-tomcat-7.0.19
# for Tomcat 5 use $appserver.home}/server/lib
# for Tomcat 6 use $appserver.home}/lib
appserver.lib=${appserver.home}/lib

deploy.path=${appserver.home}/webapps

tomcat.manager.url=http://www.tutorialspoint.com:8080/manager
tomcat.manager.username=tutorialspoint
tomcat.manager.password=secret

build.xml

<?xml version="1.0"?>

<project name="fax" basedir="." default="usage">
   <property file="build.properties"/>
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="javadoc.dir" value="doc"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
   <pathelement path="${build.dir}"/>
   </path>
    
   <target name="javadoc">
   <javadoc packagenames="faxapp.*" sourcepath="${src.dir}" 
      destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[<h1>= Fax Application 
         =</h1>]]></doctitle>
      <bottom><![CDATA[Copyright © 2011. All 
         Rights Reserved.]]></bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/>
      <group title="data packages" packages="faxapp.entity.*:faxapp.dao.*"/>
   </javadoc>
   </target>

   <target name="usage">
   <echo message=""/>
   <echo message="${name} build file"/>
   <echo message="-----------------------------------"/>
   <echo message=""/>
   <echo message="Available targets are:"/>
   <echo message=""/>
   <echo message="deploy    --> Deploy application as directory"/>
   <echo message="deploywar --> Deploy application as a WAR file"/>
   <echo message=""/>
   </target>

   <target name="build" description="Compile main 
      source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   </javac>
   </target>

   <target name="deploy" depends="build" description="Deploy application">
      <copy todir="${deploy.path}/${name}" 
         preservelastmodified="true">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </copy>
   </target>

   <target name="deploywar" depends="build" 
      description="Deploy application as a WAR file">
      <war destfile="${name}.war"
         webxml="${web.dir}/WEB-INF/web.xml">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </war>
      <copy todir="${deploy.path}" preservelastmodified="true">
         <fileset dir=".">
            <include name="*.war"/>
         </fileset>
      </copy>
   </target>
    

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
<!-- ============================================================ -->
<!-- Tomcat tasks -->
<!-- ============================================================ -->

<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!--  * for other app servers - check the docs -->
   <fileset dir="${appserver.lib}">
      <include name="catalina-ant.jar"/>
   </fileset>
</path>

<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="start" classname="org.apache.catalina.ant.StartTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>
<taskdef name="stop" classname="org.apache.catalina.ant.StopTask">
   <classpath refid="catalina-ant-classpath"/>
</taskdef>

<target name="reload" description="Reload application in Tomcat">
   <reload url="${tomcat.manager.url}"username="${tomcat.manager.username}"
      password="${tomcat.manager.password}" path="/${name}"/>
</target>
</project>

ในตัวอย่างนี้เราใช้ Tomcat เป็นแอปพลิเคชันเซิร์ฟเวอร์ของเรา ขั้นแรกในไฟล์คุณสมบัติการสร้างเราได้กำหนดคุณสมบัติเพิ่มเติมบางอย่าง

  • appserver.home ชี้ไปที่พา ธ การติดตั้งไปยังแอ็พพลิเคชันเซิร์ฟเวอร์ Tomcat

  • appserver.lib ชี้ไปที่ไฟล์ไลบรารีในโฟลเดอร์การติดตั้ง Tomcat

  • deploy.path ตัวแปรชี้ไปที่โฟลเดอร์ webapp ใน Tomcat

แอปพลิเคชันใน Tomcat สามารถหยุดและเริ่มได้โดยใช้แอปพลิเคชัน Tomcat manager URL สำหรับแอ็พพลิเคชันผู้จัดการชื่อผู้ใช้และรหัสผ่านยังระบุไว้ในไฟล์ build.properties ต่อไปเราจะประกาศ CLASSPATH ใหม่ที่มีไฟล์catalina-ant.jar. ไฟล์ jar นี้จำเป็นสำหรับการรันงาน Tomcat ผ่าน Apache Ant

catalina-ant.jar จัดเตรียมงานต่อไปนี้:

คุณสมบัติ คำอธิบาย
InstallTask ติดตั้งเว็บแอปพลิเคชัน ชื่อคลาส: org.apache.catalina.ant.InstallTask
โหลดซ้ำ โหลดแอปพลิเคชันบนเว็บซ้ำ ชื่อคลาส: org.apache.catalina.ant.ReloadTask
ListTask แสดงรายการเว็บแอปพลิเคชันทั้งหมด ชื่อคลาส: org.apache.catalina.ant.ListTask
StartTask เริ่มโปรแกรมประยุกต์บนเว็บ ชื่อคลาส: org.apache.catalina.ant.StartTask
StopTask หยุดการใช้งานเว็บ ชื่อคลาส: org.apache.catalina.ant.StopTask
โหลดซ้ำ โหลดแอปพลิเคชันบนเว็บซ้ำโดยไม่หยุด ชื่อคลาส: org.apache.catalina.ant.ReloadTask

งานรีโหลดต้องการพารามิเตอร์เพิ่มเติมต่อไปนี้:

  • URL ไปยังแอปพลิเคชันผู้จัดการ
  • ชื่อผู้ใช้เพื่อเริ่มต้นโปรแกรมประยุกต์บนเว็บ
  • รหัสผ่านเพื่อรีสตาร์ทเว็บแอปพลิเคชัน
  • ชื่อของเว็บแอปพลิเคชันที่จะเริ่มต้นใหม่

ให้เราออก deploy-warคำสั่งเพื่อคัดลอก webapp ไปยังโฟลเดอร์ Tomcat webapps จากนั้นให้เราโหลดแอปพลิเคชัน Fax Web ใหม่ ผลลัพธ์ต่อไปนี้เป็นผลมาจากการรันไฟล์ Ant:

C:\>ant deploy-war
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

C:\>ant reload
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 3.1 seconds

เมื่อเรียกใช้งานข้างต้นเว็บแอปพลิเคชันจะถูกปรับใช้และโหลดแอปพลิเคชันเว็บใหม่

คุณสามารถใช้ Ant เพื่อรันโค้ด Java ในตัวอย่างต่อไปนี้คลาส java รับอาร์กิวเมนต์ (ที่อยู่อีเมลของผู้ดูแลระบบ) และส่งอีเมลออกไป

public class NotifyAdministrator
{
   public static void main(String[] args)
   {
      String email = args[0];
      notifyAdministratorviaEmail(email);
      System.out.println("Administrator "+email+" has been notified");
   }
   public static void notifyAdministratorviaEmail(String email
   { 
	   //......
   }
}

นี่คืองานสร้างง่ายๆที่เรียกใช้คลาสจาวานี้

<?xml version="1.0"?>
<project name="sample" basedir="." default="notify">
   <target name="notify">
      <java fork="true" failonerror="yes" classname="NotifyAdministrator">
         <arg line="[email protected]"/>
      </java>
   </target>
</project>

เมื่อบิลด์ถูกเรียกใช้งานจะให้ผลลัพธ์ดังต่อไปนี้:

C:\>ant
Buildfile: C:\build.xml

notify: [java] Administrator [email protected] has been notified

BUILD SUCCESSFUL
Total time: 1 second

ในตัวอย่างนี้โค้ด java ทำสิ่งง่ายๆนั่นคือการส่งอีเมล เราสามารถใช้งาน Ant ในตัวเพื่อทำสิ่งนั้นได้ อย่างไรก็ตามเมื่อคุณมีแนวคิดแล้วคุณสามารถขยายไฟล์บิลด์ของคุณเพื่อเรียกใช้โค้ดจาวาที่ดำเนินการสิ่งที่ซับซ้อนเช่นเข้ารหัสซอร์สโค้ดของคุณ

หากคุณดาวน์โหลดและติดตั้ง Eclipse แล้วคุณมีสิ่งที่ต้องทำน้อยมากในการเริ่มต้น Eclipse มาพร้อมกับปลั๊กอิน Ant พร้อมใช้งาน

ทำตามขั้นตอนง่ายๆเพื่อรวม Ant เข้ากับ Eclipse

  • ตรวจสอบให้แน่ใจว่า build.xml เป็นส่วนหนึ่งของโปรเจ็กต์ java ของคุณและไม่ได้อยู่ในตำแหน่งที่อยู่ภายนอกโปรเจ็กต์

  • เปิดใช้งาน Ant View โดยทำตาม Window > Show View > Other > Ant > Ant.

  • เปิด Project Explorer ลาก build.xml ลงใน Ant View

มุมมอง Ant ของคุณมีลักษณะคล้ายกับ:

เมื่อคลิกที่เป้าหมายสร้าง / ล้าง / การใช้งานจะเรียกใช้ Ant กับเป้าหมาย

การคลิก "แฟกซ์" จะเรียกใช้เป้าหมายเริ่มต้น - usage.

ปลั๊กอิน Ant Eclipse ยังมาพร้อมกับตัวแก้ไขที่ดีสำหรับการแก้ไขไฟล์ build.xml ตัวแก้ไขตระหนักถึงสคีมา build.xml และสามารถช่วยเหลือคุณในการเติมโค้ด

ในการใช้โปรแกรมแก้ไข Ant ให้คลิกขวาที่ build.xml ของคุณ (จาก Project Explorer) แล้วเลือกเปิดด้วย> Ant Editor โปรแกรมแก้ไข Ant ควรมีลักษณะคล้ายกับ:

โปรแกรมแก้ไข Ant แสดงรายการเป้าหมายทางด้านขวามือ รายการเป้าหมายทำหน้าที่เป็นบุ๊กมาร์กที่ช่วยให้คุณสามารถเข้าสู่การแก้ไขเป้าหมายที่ต้องการได้โดยตรง

JUnit เป็นเฟรมเวิร์กการทดสอบหน่วยที่ใช้กันทั่วไปสำหรับการพัฒนาที่ใช้ Java ใช้งานง่ายและง่ายต่อการขยาย มีส่วนขยาย JUnit ให้เลือกใช้มากมาย หากคุณไม่คุ้นเคยกับ JUnit คุณควรดาวน์โหลดจากwww.junit.orgและอ่านคู่มือ

บทนี้แสดงวิธีดำเนินการทดสอบ JUnit โดยใช้ Ant Ant ทำให้ตรงไปตรงมาผ่านงาน JUnit

คุณลักษณะของงาน JUnit แสดงไว้ด้านล่าง:

คุณสมบัติ คำอธิบาย
ผบ จะเรียกใช้ VM จากที่ไหน สิ่งนี้จะถูกละเว้นเมื่อfork ถูกปิดใช้งาน.
jvm คำสั่งที่ใช้ในการเรียกใช้ JVM สิ่งนี้จะถูกละเว้นเมื่อfork ถูกปิดใช้งาน.
ส้อม รันการทดสอบใน JVM แยกต่างหาก
errorproperty ชื่อของคุณสมบัติที่จะตั้งค่าหากมีข้อผิดพลาด JUnit
คุณสมบัติที่ล้มเหลว ชื่อของคุณสมบัติที่จะตั้งหากมี JUnit ล้มเหลว
haltonerror หยุดการดำเนินการเมื่อเกิดข้อผิดพลาดในการทดสอบ
haltonfailure หยุดการดำเนินการเมื่อเกิดความล้มเหลว
ภาพพิมพ์ แนะนำให้ Ant แสดงสถิติอย่างง่ายสำหรับการทดสอบแต่ละครั้ง
showoutput แนะนำให้ Ant ส่งเอาต์พุตไปยังบันทึกและฟอร์แมต
tempdir พา ธ ไปยังไฟล์ชั่วคราวที่ Ant จะใช้
หมดเวลา ออกจากการทดสอบที่ใช้เวลารันนานกว่าการตั้งค่านี้ (ในหน่วยมิลลิวินาที)

ให้เราดำเนินการต่อในรูปแบบของไฟล์ Hello World แฟกซ์เว็บแอปพลิเคชันและเพิ่ม JUnit target

ตัวอย่างต่อไปนี้แสดงการดำเนินการทดสอบ JUnit อย่างง่าย:

<target name="unittest">
   <junit haltonfailure="true" printsummary="true">
      <test name="com.tutorialspoint.UtilsTest"/>
   </junit>
</target>

ตัวอย่างนี้แสดงการดำเนินการของ JUnit บนคลาส com.tutorialspoint.UtilsTest junit การรันโค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้:

test:
[echo] Testing the application
[junit] Running com.tutorialspoint.UtilsTest
[junit] Tests run: 12, Failures: 0, Errors: 0, Time elapsed: 16.2 sec
BUILD PASSED

Ant มาพร้อมกับชุดงานที่กำหนดไว้ล่วงหน้าอย่างไรก็ตามคุณสามารถสร้างงานของคุณเองได้ดังที่แสดงในตัวอย่างด้านล่าง

งาน Ant แบบกำหนดเองควรขยายไฟล์ org.apache.tools.ant.Taskคลาสและควรขยายเมธอด execute () ด้านล่างนี้เป็นตัวอย่างง่ายๆ:

package com.tutorialspoint.ant;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
public class MyTask extends Task {
   String message;
   public void execute() throws BuildException {
      log("Message: " + message, Project.MSG_INFO);
   }
   public void setMessage(String message) {
      this.message= message;
   }
}

ในการดำเนินงานที่กำหนดเองคุณต้องเพิ่มสิ่งต่อไปนี้ในไฟล์ Hello World แอปพลิเคชันเว็บแฟกซ์:

<target name="custom">
   <taskdef name="custom" classname="com.tutorialspoint.ant.MyTask" />
   <custom message="Hello World!"/>
</target>

การดำเนินการตามภารกิจที่กำหนดเองด้านบนจะพิมพ์ข้อความ 'Hello World!'

c:\>ant custom
test:
[custom] Message : Hello World!
elapsed: 0.2 sec
BUILD PASSED

นี่เป็นเพียงตัวอย่างง่ายๆคุณสามารถใช้พลังของ Ant เพื่อทำอะไรก็ได้ที่คุณต้องการเพื่อปรับปรุงกระบวนการสร้างและปรับใช้ของคุณ

พิมพ์