Hướng dẫn nhanh Ant

ANT là viết tắt của Another Neat Tool. Nó là một công cụ xây dựng dựa trên Java của Apache. Trước khi đi vào chi tiết của Apache Ant, trước tiên chúng ta hãy hiểu tại sao chúng ta cần một công cụ xây dựng ngay từ đầu.

Cần một Công cụ Xây dựng

Trung bình, một nhà phát triển dành một lượng thời gian đáng kể để thực hiện các tác vụ thông thường như xây dựng và triển khai bao gồm:

  • Biên dịch mã
  • Đóng gói các mã nhị phân
  • Triển khai mã nhị phân cho máy chủ thử nghiệm
  • Kiểm tra các thay đổi
  • Sao chép mã từ vị trí này sang vị trí khác

Để tự động hóa và đơn giản hóa các công việc trên, Apache Ant rất hữu ích. Nó là một công cụ xây dựng và triển khai Hệ điều hành có thể được thực thi từ dòng lệnh.

Lịch sử của Apache Ant

  • Ant được tạo ra bởi James Duncan Davidson (tác giả gốc của Tomcat).

  • Ban đầu nó được sử dụng để xây dựng Tomcat và được đóng gói như một phần của bản phân phối Tomcat.

  • Ant được sinh ra từ những vấn đề và sự phức tạp liên quan đến công cụ Apache Make.

  • Ant được quảng bá như một dự án độc lập trong Apache vào năm 2000. Phiên bản mới nhất của Apache Ant vào tháng 5 năm 2014 là 1.9.4.

Đặc điểm của Apache Ant

  • Ant là công cụ triển khai và xây dựng Java hoàn chỉnh nhất hiện có.

  • Ant là nền tảng trung lập và có thể xử lý các thuộc tính cụ thể của nền tảng như trình phân tách tệp.

  • Ant có thể được sử dụng để thực hiện các tác vụ cụ thể của nền tảng như sửa đổi thời gian đã sửa đổi của tệp bằng lệnh 'touch'.

  • Tập lệnh Ant được viết bằng XML thuần túy. Nếu bạn đã quen với XML, bạn có thể học Ant khá nhanh.

  • Ant rất giỏi trong việc tự động hóa các công việc phức tạp lặp đi lặp lại.

  • Ant đi kèm với một danh sách lớn các nhiệm vụ được xác định trước.

  • Ant cung cấp một giao diện để phát triển các tác vụ tùy chỉnh.

  • Ant có thể được gọi dễ dàng từ dòng lệnh và nó có thể tích hợp với các IDE thương mại và miễn phí.

Apache Ant Ant được phân phối theo Giấy phép Phần mềm Apache, một giấy phép nguồn mở chính thức được chứng nhận bởi sáng kiến ​​nguồn mở.

Phiên bản Apache Ant mới nhất, bao gồm mã nguồn đầy đủ, tệp lớp và tài liệu có thể được tìm thấy tại http://ant.apache.org.

Cài đặt Apache Ant

Giả sử rằng bạn đã tải xuống và cài đặt Bộ phát triển Java (JDK) trên máy tính của mình. Nếu không, vui lòng làm theo hướng dẫn tại đây .

  • Đảm bảo rằng biến môi trường JAVA_HOME được đặt thành thư mục nơi JDK của bạn được cài đặt.

  • Tải xuống các tệp nhị phân từ http://ant.apache.org

  • Giải nén tệp zip vào một vị trí thuận tiện c: \ folder. sử dụng Winzip, winRAR, 7-zip hoặc các công cụ tương tự.

  • Tạo một biến môi trường mới có tên ANT_HOME trỏ đến thư mục cài đặt Ant, trong trường hợp này c:\apache-ant-1.8.2-bin thư mục.

  • Nối đường dẫn đến tệp lô Apache Ant vào biến môi trường PATH. Trong trường hợp của chúng tôi, đây sẽ làc:\apache-ant-1.8.2-bin\bin thư mục.

Xác minh cài đặt Ant Apache

Để xác minh cài đặt thành công Apache Ant trên máy tính của bạn, hãy nhập ant trên dấu nhắc lệnh của bạn.

Bạn sẽ thấy một đầu ra tương tự như:

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

Nếu bạn không thấy kết quả trên, hãy xác minh rằng bạn đã thực hiện đúng các bước cài đặt.

Cài đặt Eclipse

Hướng dẫn này cũng bao gồm việc tích hợp Ant với Eclipse IDE. Do đó, nếu bạn chưa cài đặt Eclipse, hãy tải xuống và cài đặt Eclipse

Để cài đặt Eclipse:

  • Tải xuống các tệp nhị phân Eclipse mới nhất từ www.eclipse.org

  • Giải nén các tệp nhị phân Eclipse đến một vị trí thuận tiện, chẳng hạn như thư mục c: \

  • Chạy Eclipse từ c: \ eclipse \ eclipse.exe

Thông thường, tệp xây dựng của Ant, được gọi là build.xmlnên nằm trong thư mục cơ sở của dự án. Tuy nhiên không có hạn chế về tên tệp hoặc vị trí của nó. Bạn có thể tự do sử dụng các tên tệp khác hoặc lưu tệp xây dựng ở một số vị trí khác.

Đối với bài tập này, hãy tạo một tệp có tên là build.xml ở bất kỳ đâu trong máy tính của bạn với các nội dung sau:

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

Lưu ý rằng không được có (các) dòng trống hoặc (các) khoảng trắng trước khai báo xml. Nếu bạn cho phép chúng, thông báo lỗi sau sẽ xảy ra khi thực hiện xây dựng kiến ​​-

Không cho phép đối sánh mục tiêu lệnh xử lý "[xX] [mM] [lL]". Tất cả các tệp bản dựng yêu cầuproject phần tử và ít nhất một target thành phần.

Phần tử XML project có ba thuộc tính:

Thuộc tính Sự miêu tả
Tên Tên của dự án. (Không bắt buộc)
mặc định Mục tiêu mặc định cho tập lệnh xây dựng. Một dự án có thể chứa bất kỳ số lượng mục tiêu nào. Thuộc tính này chỉ định mục tiêu nào nên được coi là mục tiêu mặc định. (Bắt buộc)
basedir Thư mục cơ sở (hoặc) thư mục gốc cho dự án. (Không bắt buộc)

Mục tiêu là một tập hợp các nhiệm vụ mà bạn muốn chạy như một đơn vị. Trong ví dụ của chúng tôi, chúng tôi có một mục tiêu đơn giản là cung cấp một thông điệp cung cấp thông tin cho người dùng.

Các mục tiêu có thể phụ thuộc vào các mục tiêu khác. Ví dụ, mộtdeploy mục tiêu có thể có sự phụ thuộc vào package mục tiêu, package mục tiêu có thể có sự phụ thuộc vào compilemục tiêu, v.v. Sự phụ thuộc được biểu thị bằng cách sử dụngdependsthuộc tính. Ví dụ:

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

Phần tử đích có các thuộc tính sau:

Thuộc tính Sự miêu tả
Tên Tên của mục tiêu (Bắt buộc)
phụ thuộc Danh sách được phân tách bằng dấu phẩy gồm tất cả các mục tiêu mà mục tiêu này phụ thuộc vào. (Không bắt buộc)
sự miêu tả Một mô tả ngắn về mục tiêu. (không bắt buộc)
nếu Cho phép thực hiện mục tiêu dựa trên tính đúng của thuộc tính có điều kiện. (không bắt buộc)
trừ khi Thêm mục tiêu vào danh sách phụ thuộc của Điểm mở rộng được chỉ định. Điểm mở rộng tương tự như một mục tiêu, nhưng nó không có bất kỳ nhiệm vụ nào. (Không bắt buộc)

Các echonhiệm vụ trong ví dụ trên là một tác vụ tầm thường in một thông báo. Trong ví dụ của chúng tôi, nó in thông báo Hello World .

Để chạy tệp xây dựng kiến, hãy mở dấu nhắc lệnh và điều hướng đến thư mục chứa tệp build.xml và nhập ant info. Bạn cũng có thể gõantthay thế. Cả hai sẽ hoạt động, bởi vìinfolà mục tiêu mặc định trong tệp xây dựng. Bạn sẽ thấy kết quả sau:

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

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

BUILD SUCCESSFUL
Total time: 0 seconds

C:\>

Các tệp xây dựng kiến ​​được viết bằng XML, không cho phép khai báo các biến như bạn làm bằng ngôn ngữ lập trình yêu thích của mình. Tuy nhiên, như bạn có thể đã tưởng tượng, sẽ rất hữu ích nếu Ant cho phép khai báo các biến như tên dự án, thư mục nguồn dự án, v.v.

Ant sử dụng propertyphần tử cho phép bạn chỉ định thuộc tính. Điều này cho phép các thuộc tính được thay đổi từ bản dựng này sang bản dựng khác hoặc từ môi trường này sang môi trường khác.

Theo mặc định, Ant cung cấp các thuộc tính được xác định trước sau đây có thể được sử dụng trong tệp xây dựng:

Tính chất Sự miêu tả
ant.file Vị trí đầy đủ của tệp bản dựng.
ant.version Phiên bản cài đặt Apache Ant.
basedir Cơ sở của bản dựng, như được chỉ định trong basedir thuộc tính của project thành phần.
ant.java.version Phiên bản của JDK được Ant sử dụng.
ant.project.name Tên của dự án, như được chỉ định trong name thuộc tính của project thành phần.
ant.project.default-target Mục tiêu mặc định của dự án hiện tại.
ant.project.invoked-target Danh sách các mục tiêu được gọi trong dự án hiện tại được phân tách bằng dấu phẩy.
ant.core.lib Vị trí đầy đủ của tệp Ant jar.
kiến. nhà Thư mục chính của cài đặt Ant.
ant.library.dir Thư mục chính cho các tệp thư viện Ant - thường là thư mục ANT_HOME / lib.

Ant cũng cung cấp các thuộc tính hệ thống (Ví dụ: file.separator) cho tệp xây dựng.

Ngoài các thuộc tính trên, người dùng có thể xác định các thuộc tính bổ sung bằng cách sử dụng propertythành phần. Ví dụ sau đây cho thấy cách xác định một thuộc tính được gọi là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>

Chạy Ant trên tệp xây dựng ở trên tạo ra kết quả sau:

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

Đặt thuộc tính trực tiếp trong tệp xây dựng là tốt, nếu bạn đang làm việc với một số ít thuộc tính. Tuy nhiên, đối với một dự án lớn, nên lưu trữ các thuộc tính trong một tệp tài sản riêng biệt.

Lưu trữ các thuộc tính trong một tệp riêng biệt mang lại những lợi ích sau:

  • Nó cho phép bạn sử dụng lại cùng một tệp xây dựng, với các cài đặt thuộc tính khác nhau cho môi trường thực thi khác nhau. Ví dụ: tệp thuộc tính xây dựng có thể được duy trì riêng biệt cho các môi trường DEV, TEST và PROD.

  • Nó hữu ích khi bạn không biết trước các giá trị của một thuộc tính (trong một môi trường cụ thể). Điều này cho phép bạn thực hiện xây dựng trong các môi trường khác mà giá trị thuộc tính được biết.

Không có quy tắc cứng và nhanh, nhưng thông thường tệp thuộc tính được đặt tên build.properties và được đặt dọc theo build.xmltập tin. Bạn có thể tạo nhiều tệp thuộc tính bản dựng dựa trên môi trường triển khai - chẳng hạn nhưbuild.properties.devbuild.properties.test.

Nội dung của tệp thuộc tính xây dựng tương tự như tệp thuộc tính java thông thường. Chúng chứa một thuộc tính trên mỗi dòng. Mỗi thuộc tính được đại diện bởi một tên và một cặp giá trị. Các cặp tên và giá trị được phân tách bằng dấu bằng (=). Chúng tôi rất khuyến khích các thuộc tính được chú thích với các nhận xét thích hợp. Nhận xét được liệt kê bằng cách sử dụng ký tự băm (#).

Ví dụ sau đây cho thấy một build.xml tệp và nó được liên kết build.properties tập tin:

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

Trong ví dụ trên, sitenamelà một thuộc tính tùy chỉnh được ánh xạ đến tên trang web. Bạn có thể khai báo bất kỳ số lượng thuộc tính tùy chỉnh nào theo cách này. Một thuộc tính tùy chỉnh khác được liệt kê trong ví dụ trên làbuildversion, trong trường hợp này đề cập đến phiên bản của bản dựng.

Ngoài những điều trên, Ant đi kèm với một số thuộc tính xây dựng được xác định trước, được liệt kê trong phần trước, nhưng được trình bày bên dưới một lần nữa.

Tính chất Sự miêu tả
ant.file Vị trí đầy đủ của tệp bản dựng.
ant.version Phiên bản cài đặt Apache Ant.
basedir Cơ sở của bản dựng, như được chỉ định trong basedir thuộc tính của project thành phần.
ant.java.version Phiên bản của JDK được Ant sử dụng.
ant.project.name Tên của dự án, như được chỉ định trong name thuộc tính của project thành phần.
ant.project.default-target Mục tiêu mặc định của dự án hiện tại.
ant.project.invoked-target Danh sách các mục tiêu được gọi trong dự án hiện tại được phân tách bằng dấu phẩy.
ant.core.lib Vị trí đầy đủ của tệp Ant jar.
kiến. nhà Thư mục chính của cài đặt Ant.
ant.library.dir Thư mục chính cho các tệp thư viện Ant - thường là thư mục ANT_HOME / lib.

Ví dụ được trình bày trong chương này sử dụng ant.version tài sản tích hợp sẵn.

Ant cung cấp một số kiểu dữ liệu được xác định trước. Đừng nhầm lẫn giữa thuật ngữ "kiểu dữ liệu" với những kiểu dữ liệu có sẵn trong ngôn ngữ lập trình, thay vào đó hãy coi chúng như một tập hợp các dịch vụ đã được tích hợp sẵn trong sản phẩm.

Các kiểu dữ liệu sau do Apache Ant cung cấp.

Tập tin

Các kiểu dữ liệu tập hợp tệp đại diện cho một tập hợp các tệp. Nó được sử dụng như một bộ lọc để bao gồm hoặc loại trừ các tệp phù hợp với một mẫu cụ thể.

Ví dụ, hãy tham khảo đoạn mã sau. Ở đây, thuộc tính src trỏ đến thư mục nguồn của dự án.

Tập hợp tệp chọn tất cả các tệp .java trong thư mục nguồn ngoại trừ những tệp có chứa từ 'Stub'. Bộ lọc phân biệt chữ hoa chữ thường được áp dụng cho tập tin có nghĩa là một tập tin có tên Samplestub.java sẽ không bị loại trừ khỏi tập tin.

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

Bộ mẫu

Bộ mẫu là một mẫu cho phép dễ dàng lọc các tệp hoặc thư mục dựa trên các mẫu nhất định. Có thể tạo các mẫu bằng các ký tự meta sau:

  • ? - Chỉ khớp với một ký tự.

  • * - Khớp không hoặc nhiều ký tự.

  • ** - Đối sánh không hoặc nhiều thư mục một cách đệ quy.

Ví dụ sau đây mô tả việc sử dụng một bộ mẫu.

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

Sau đó, tập mẫu có thể được sử dụng lại với một tập tin như sau:

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

Danh sách tệp

Kiểu dữ liệu danh sách lọc tương tự như tập hợp tệp ngoại trừ những điểm khác biệt sau:

  • filelist chứa danh sách tệp được đặt tên rõ ràng và nó không hỗ trợ các thẻ đại diện.

  • kiểu dữ liệu danh sách có thể được áp dụng cho các tệp hiện có hoặc không tồn tại.

Chúng ta hãy xem ví dụ sau về kiểu dữ liệu danh sách lọc. Đây, thuộc tínhwebapp.src.folder trỏ đến thư mục nguồn ứng dụng web của dự án.

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

Bộ lọc

Sử dụng kiểu dữ liệu bộ lọc cùng với tác vụ sao chép, bạn có thể thay thế một số văn bản nhất định trong tất cả các tệp khớp với mẫu bằng một giá trị thay thế.

Một ví dụ phổ biến là thêm số phiên bản vào tệp ghi chú phát hành, như được hiển thị trong đoạn mã sau.

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

Trong Bộ luật này:

  • Thuộc tính output.dir trỏ đến thư mục đầu ra của dự án.

  • Thuộc tính releasenotes.dir trỏ đến thư mục ghi chú phát hành của dự án.

  • Thuộc tính current.version trỏ đến thư mục phiên bản hiện tại của dự án.

  • Tác vụ sao chép, như tên cho thấy, được sử dụng để sao chép tệp từ vị trí này sang vị trí khác.

Con đường

Các pathkiểu dữ liệu thường được sử dụng để biểu diễn một đường dẫn lớp. Các mục trong đường dẫn được phân tách bằng dấu chấm phẩy hoặc dấu hai chấm. Tuy nhiên, các ký tự này được thay thế tại thời điểm chạy bằng ký tự phân cách đường dẫn của hệ thống thực thi.

Đường dẫn classpath được đặt thành danh sách các tệp và lớp jar trong dự án, như thể hiện trong ví dụ bên dưới.

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

Trong mã này:

  • Thuộc tính env.J2EE_HOME trỏ đến biến môi trường J2EE_HOME.

  • Thuộc tính j2ee.jar trỏ đến tên của tệp jar J2EE trong thư mục cơ sở J2EE.

Bây giờ chúng ta đã tìm hiểu về các kiểu dữ liệu trong Ant, đã đến lúc đưa kiến ​​thức đó vào hoạt động. Chúng tôi sẽ xây dựng một dự án trong chương này. Mục đích của chương này là xây dựng một tệp Ant biên dịch các lớp java và đặt chúng vào thư mục WEB-INF \ class.

Xem xét cấu trúc dự án sau:

  • Các tập lệnh cơ sở dữ liệu được lưu trữ trong db thư mục.

  • Mã nguồn java được lưu trữ trong src thư mục.

  • Hình ảnh, js, META-INF, kiểu (css) được lưu trữ trong war thư mục.

  • Các JSP được lưu trữ trong jsp thư mục.

  • Các tệp jar của bên thứ ba được lưu trữ trong lib thư mục.

  • Các tệp lớp java được lưu trữ trong WEB-INF\classes thư mục.

Dự án này tạo thành Hello World Ứng dụng Fax cho phần còn lại của hướng dẫn này.

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

Đây là build.xml cần thiết cho dự án này. Hãy để chúng tôi xem xét nó từng mảnh.

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

Đầu tiên, chúng ta hãy khai báo một số thuộc tính cho thư mục nguồn, web và xây dựng.

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

Trong ví dụ này:

  • src.dir đề cập đến thư mục nguồn của dự án nơi có thể tìm thấy các tệp nguồn java.

  • web.dir đề cập đến thư mục nguồn web của dự án, nơi bạn có thể tìm thấy JSP, web.xml, css, javascript và các tệp liên quan đến web khác

  • build.dir đề cập đến thư mục đầu ra của biên dịch dự án.

Thuộc tính có thể tham chiếu đến các thuộc tính khác. Như thể hiện trong ví dụ trên,build.dir thuộc tính tham chiếu đến web.dir bất động sản.

Trong ví dụ này, src.dir đề cập đến thư mục nguồn của dự án.

Mục tiêu mặc định của dự án của chúng tôi là compileMục tiêu. Nhưng trước tiên chúng ta hãy xem xétclean Mục tiêu.

Mục tiêu sạch, như tên cho thấy, xóa các tệp trong thư mục xây dựng.

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

Master-classpath giữ thông tin classpath. Trong trường hợp này, nó bao gồm các lớp trong thư mục xây dựng và các tệp jar trong thư mục lib.

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

Cuối cùng, mục tiêu xây dựng để xây dựng các tệp. Trước hết, chúng tôi tạo thư mục xây dựng, nếu nó không tồn tại. Sau đó, chúng tôi thực hiện lệnh javac (chỉ định jdk1.5 làm biên dịch đích của chúng tôi). Chúng tôi cung cấp thư mục nguồn và classpath cho tác vụ javac và yêu cầu nó thả các tệp lớp vào thư mục xây dựng.

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

Việc thực thi Ant trên tệp này sẽ biên dịch các tệp nguồn java và đặt các lớp vào thư mục xây dựng.

Kết quả sau là kết quả của việc chạy tệp Ant:

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

BUILD SUCCESSFUL
Total time: 6.3 seconds

Các tệp được biên dịch và đặt trong build.dir thư mục.

Tài liệu là bắt buộc trong bất kỳ dự án nào. Tài liệu đóng một vai trò lớn trong việc duy trì một dự án. Java làm cho tài liệu dễ dàng hơn bằng cách sử dụngjavadocdụng cụ. Ant làm cho nó thậm chí còn dễ dàng hơn bằng cách tạo tài liệu theo yêu cầu.

Như bạn đã biết, công cụ javadoc rất linh hoạt và cho phép một số tùy chọn cấu hình. Ant hiển thị các tùy chọn cấu hình này thông qua tác vụ javadoc. Nếu bạn không quen với javadocs, chúng tôi khuyên bạn nên bắt đầu với Hướng dẫn về Tài liệu Java này .

Phần sau đây liệt kê các tùy chọn javadoc thông dụng nhất được sử dụng trong Ant.

Thuộc tính

Nguồn có thể được chỉ định bằng cách sử dụng sourcepath, sourcepathref hoặc là sourcefiles.

  • sourcepath được sử dụng để trỏ đến thư mục của các tệp nguồn (ví dụ: thư mục src).

  • sourcepathref được sử dụng để tham chiếu một đường dẫn được tham chiếu bởi thuộc tính đường dẫn (ví dụ: Delegate.src.dir).

  • sourcefiles được sử dụng khi bạn muốn chỉ định các tệp riêng lẻ dưới dạng danh sách được phân tách bằng dấu phẩy.

Đường dẫn đích được chỉ định bằng cách sử dụng destdir thư mục (ví dụ: build.dir).

Bạn có thể lọc javadocnhiệm vụ bằng cách chỉ định các tên gói được đưa vào. Điều này đạt được bằng cách sử dụngpackagenames thuộc tính, danh sách các tệp gói được phân tách bằng dấu phẩy.

Bạn có thể lọc quy trình javadoc để chỉ hiển thị các lớp và thành viên công khai, riêng tư, gói hoặc được bảo vệ. Điều này đạt được bằng cách sử dụngprivate, public, packageprotected thuộc tính.

Bạn cũng có thể yêu cầu nhiệm vụ javadoc bao gồm thông tin tác giả và phiên bản bằng cách sử dụng các thuộc tính tương ứng.

Bạn cũng có thể nhóm các gói lại với nhau bằng cách sử dụng group , để dễ dàng điều hướng.

Để tất cả chúng cùng nhau

Hãy để chúng tôi tiếp tục chủ đề của chúng tôi về Hello worldỨng dụng fax. Hãy để chúng tôi thêm mục tiêu tài liệu vào dự án ứng dụng Fax của chúng tôi.

Dưới đây là một tác vụ javadoc ví dụ được sử dụng trong dự án của chúng tôi. Trong ví dụ này, chúng tôi đã chỉ định javadoc để sử dụngsrc.dir làm thư mục nguồn và doc làm mục tiêu.

Chúng tôi cũng đã tùy chỉnh tiêu đề cửa sổ, thông tin đầu trang và chân trang xuất hiện trên các trang tài liệu java.

Ngoài ra, chúng tôi đã tạo ba nhóm:

  • một cho các lớp tiện ích trong thư mục nguồn của chúng tôi,
  • một cho các lớp giao diện người dùng và
  • một cho các lớp liên quan đến cơ sở dữ liệu.

Bạn có thể nhận thấy rằng nhóm gói dữ liệu có hai gói -– faxapp.entity và 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>

Hãy để chúng tôi thực hiện nhiệm vụ javadoc Ant. Nó tạo và đặt các tệp tài liệu java trong thư mục doc.

Khi mà javadoc target được thực thi, nó tạo ra kết quả sau:

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

java doc has been generated!

BUILD SUCCESSFUL
Total time: 10.63 second

Các tệp tài liệu java hiện có trong doc thư mục.

Thông thường, các tệp javadoc được tạo như một phần của mục tiêu gói hoặc bản phát hành.

Bước hợp lý tiếp theo sau khi biên dịch tệp nguồn java của bạn, là xây dựng kho lưu trữ java, tức là tệp JAR. Tạo tệp JAR với Ant khá dễ dàng vớijarbài tập. Các thuộc tính thường được sử dụng của tác vụ jar như sau:

Thuộc tính Sự miêu tả
basedir Thư mục cơ sở cho tệp JAR đầu ra. Theo mặc định, điều này được đặt thành thư mục cơ sở của dự án.
nén Khuyên Ant nén tệp khi nó tạo tệp JAR.
giữ nén Trong khi compress thuộc tính áp dụng cho các tệp riêng lẻ, keepcompression thuộc tính làm điều tương tự, nhưng nó áp dụng cho toàn bộ kho lưu trữ.
destfile Tên của tệp JAR đầu ra.
bản sao Tư vấn cho Ant về những việc cần làm khi tìm thấy các tệp trùng lặp. Bạn có thể thêm, giữ lại hoặc làm hỏng các tệp trùng lặp.
loại trừ Khuyên Ant không bao gồm danh sách các tệp được phân tách bằng dấu phẩy này trong gói.
loại trừ hồ sơ Tương tự như trên, ngoại trừ các tệp loại trừ được chỉ định bằng cách sử dụng một mẫu.
inlcudes Ngược lại của loại trừ.
bao gồm Ngược lại với tệp loại trừ.
cập nhật Khuyên Ant ghi đè lên các tệp trong tệp JAR đã được xây dựng.

Tiếp tục của chúng tôi Hello WorldDự án Ứng dụng Fax, hãy để chúng tôi thêm một mục tiêu mới để tạo các tệp jar. Nhưng trước đó, chúng ta hãy xem xét nhiệm vụ jar được đưa ra bên dưới.

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

Đây, web.dirthuộc tính trỏ đến đường dẫn của các tệp nguồn web. Trong trường hợp của chúng tôi, đây là vị trí của use.jar sẽ được đặt.

Các build.dir thuộc tính trong ví dụ này trỏ đến thư mục xây dựng, nơi có thể tìm thấy các tệp lớp cho use.jar.

Trong ví dụ này, chúng tôi tạo một tệp jar có tên util.jar sử dụng các lớp từ faxapp.util.*gói hàng. Tuy nhiên, chúng tôi loại trừ các lớp kết thúc bằng tên Test. Tệp jar đầu ra sẽ được đặt trong thư mục lib của ứng dụng web.

Nếu chúng ta muốn làm cho ut.jar trở thành một tệp jar thực thi, chúng ta cần thêm manifest với Main-Class thuộc tính meta.

Do đó, ví dụ trên sẽ được cập nhật thành:

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

Để thực thi nhiệm vụ jar, hãy bọc nó bên trong một mục tiêu, phổ biến nhất là mục tiêu xây dựng hoặc gói và thực thi chúng.

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

Chạy Ant trên tập tin này sẽ tạo ra tập tin use.jar cho chúng tôi.

Kết quả sau là kết quả của việc chạy tệp Ant:

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

BUILD SUCCESSFUL
Total time: 1.3 seconds

Hiện tại, tập tin use.jar đã được đặt trong thư mục đầu ra.

Tạo tệp WAR với Ant cực kỳ đơn giản và tương tự như tác vụ tạo tệp JAR. Rốt cuộc, tệp WAR, giống như tệp JAR chỉ là một tệp ZIP khác.

Nhiệm vụ WAR là một phần mở rộng của nhiệm vụ JAR, nhưng nó có một số bổ sung tuyệt vời để thao tác những gì đi vào thư mục WEB-INF / class và tạo tệp web.xml. Nhiệm vụ WAR rất hữu ích để chỉ định một bố cục cụ thể của tệp WAR.

Vì nhiệm vụ WAR là một phần mở rộng của nhiệm vụ JAR, tất cả các thuộc tính của nhiệm vụ JAR áp dụng cho nhiệm vụ WAR.

Thuộc tính Sự miêu tả
webxml Đường dẫn đến tệp web.xml
lib Một nhóm để chỉ định những gì đi vào thư mục WEB-INF \ lib.
các lớp học Một nhóm để chỉ định những gì đi vào thư mục WEB-INF \ lớp.
metainf Chỉ định hướng dẫn để tạo tệp MANIFEST.MF.

Tiếp tục của chúng tôi Hello WorldDự án Ứng dụng Fax, hãy để chúng tôi thêm một mục tiêu mới để tạo các tệp jar. Nhưng trước đó chúng ta hãy xem xét nhiệm vụ chiến tranh. Hãy xem xét ví dụ sau:

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

Theo các ví dụ trước, web.dir biến đề cập đến thư mục web nguồn, tức là thư mục chứa tệp JSP, css, javascript, v.v.

Các build.dirbiến tham chiếu đến thư mục đầu ra - Đây là nơi có thể tìm thấy các lớp cho gói WAR. Thông thường, các lớp sẽ được đóng gói vào thư mục WEB-INF / lớp của tệp WAR.

Trong ví dụ này, chúng tôi đang tạo một tệp chiến tranh có tên fax.war. Tệp WEB.XML được lấy từ thư mục nguồn web. Tất cả các tệp từ thư mục 'WebContent' dưới web được sao chép vào tệp WAR.

Thư mục WEB-INF / lib chứa các tệp jar từ thư mục thirdpartyjars. Tuy nhiên, chúng tôi loại trừ portlet.jar vì nó đã có trong thư mục lib của máy chủ ứng dụng. Cuối cùng, chúng tôi đang sao chép tất cả các lớp từ thư mục web của thư mục xây dựng và đưa vào thư mục WEB-INF / lớp.

Gói nhiệm vụ chiến tranh bên trong mục tiêu Ant (thường là gói) và chạy nó. Thao tác này sẽ tạo tệp WAR ở vị trí được chỉ định.

Hoàn toàn có thể lồng ghép các lớp, lib, metainf và webinf director để chúng nằm trong các thư mục rải rác ở bất kỳ đâu trong cấu trúc dự án. Nhưng các phương pháp hay nhất gợi ý rằng dự án Web của bạn nên có cấu trúc Nội dung Web tương tự như cấu trúc của tệp WAR. Dự án Ứng dụng Fax có cấu trúc được phác thảo bằng cách sử dụng nguyên tắc cơ bản này.

Để thực hiện nhiệm vụ chiến tranh, hãy bọc nó bên trong một mục tiêu, phổ biến nhất là mục tiêu xây dựng hoặc gói và chạy chúng.

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

Chạy Ant trên tệp này sẽ tạo fax.war nộp cho chúng tôi.

Kết quả sau là kết quả của việc chạy tệp Ant:

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

BUILD SUCCESSFUL
Total time: 12.3 seconds

Tệp fax.war hiện đã được đặt trong thư mục đầu ra. Nội dung của hồ sơ chiến tranh sẽ là:

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

Chúng tôi đã tìm hiểu các khía cạnh khác nhau của Ant bằng cách sử dụng Hello World Ứng dụng web fax theo từng bit và mảnh.

Bây giờ đã đến lúc kết hợp mọi thứ lại với nhau để tạo một tệp build.xml đầy đủ và hoàn chỉnh. Xem xétbuild.propertiesbuild.xml các tệp như sau:

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>

Trong ví dụ này:

  • Đầu tiên chúng tôi khai báo đường dẫn đến thư mục webapps trong Tomcat trong tệp thuộc tính xây dựng dưới dạng deploy.path Biến đổi.

  • Chúng tôi cũng khai báo thư mục nguồn cho các tệp java trong src.dir Biến đổi.

  • Sau đó, chúng tôi khai báo thư mục nguồn cho các tệp web trong web.dir Biến đổi. javadoc.dir là thư mục để lưu trữ tài liệu java và build.dir là đường dẫn để lưu trữ các tệp đầu ra của bản dựng.

  • Sau đó, chúng tôi khai báo tên của ứng dụng web, đó là fax trong trường hợp của chúng ta.

  • Chúng tôi cũng xác định đường dẫn lớp chính chứa các tệp JAR có trong thư mục WEB-INF / lib của dự án.

  • Chúng tôi cũng bao gồm các tệp lớp có trong build.dir trong đường dẫn lớp chủ.

  • Mục tiêu Javadoc tạo ra javadoc cần thiết cho dự án và mục tiêu sử dụng được sử dụng để in các mục tiêu chung có trong tệp xây dựng.

Ví dụ trên cho thấy hai mục tiêu triển khai: deploydeploywar.

Mục tiêu triển khai sao chép các tệp từ thư mục web sang thư mục triển khai bảo tồn dấu thời gian ngày sửa đổi cuối cùng. Điều này rất hữu ích khi triển khai đến một máy chủ hỗ trợ triển khai nóng.

Mục tiêu sạch xóa tất cả các tệp được tạo trước đó.

Mục tiêu triển khai xây dựng tệp chiến tranh và sau đó sao chép tệp chiến tranh vào thư mục triển khai của máy chủ ứng dụng.

Trong chương trước, chúng ta đã học cách đóng gói một ứng dụng và triển khai nó vào một thư mục.

Trong chương này, chúng ta sẽ triển khai ứng dụng web trực tiếp đến thư mục triển khai máy chủ ứng dụng, sau đó chúng ta sẽ thêm một vài mục tiêu Ant để bắt đầu và dừng các dịch vụ. Hãy để chúng tôi tiếp tục vớiHello Worldứng dụng web fax. Đây là phần tiếp theo của chương trước, các thành phần mới được tô đậm.

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>

Trong ví dụ này, chúng tôi đã sử dụng Tomcat làm máy chủ ứng dụng của mình. Đầu tiên, trong tệp thuộc tính xây dựng, chúng tôi đã xác định một số thuộc tính bổ sung.

  • Các appserver.home trỏ đến đường dẫn cài đặt đến máy chủ ứng dụng Tomcat.

  • Các appserver.lib trỏ đến các tệp thư viện trong thư mục cài đặt Tomcat.

  • Các deploy.path biến bây giờ trỏ đến thư mục ứng dụng web trong Tomcat.

Các ứng dụng trong Tomcat có thể được dừng và bắt đầu sử dụng ứng dụng trình quản lý Tomcat. URL cho ứng dụng người quản lý, tên người dùng và mật khẩu cũng được chỉ định trong tệp build.properties. Tiếp theo, chúng tôi khai báo một CLASSPATH mới chứacatalina-ant.jar. Tệp jar này được yêu cầu để thực thi các tác vụ Tomcat thông qua Apache Ant.

Catalina-ant.jar cung cấp các tác vụ sau:

Tính chất Sự miêu tả
InstallTask Cài đặt ứng dụng web. Tên lớp: org.apache.catalina.ant.InstallTask
Tải lại Tải lại ứng dụng web. Tên lớp: org.apache.catalina.ant.ReloadTask
ListTask Liệt kê tất cả các ứng dụng web. Tên lớp: org.apache.catalina.ant.ListTask
StartTask Khởi động một ứng dụng web. Tên lớp: org.apache.catalina.ant.StartTask
StopTask Dừng ứng dụng web. Tên lớp: org.apache.catalina.ant.StopTask
Tải lại Tải lại ứng dụng web mà không dừng lại. Tên lớp: org.apache.catalina.ant.ReloadTask

Tác vụ tải lại yêu cầu các tham số bổ sung sau:

  • URL đến ứng dụng người quản lý
  • Tên người dùng để khởi động lại ứng dụng web
  • Mật khẩu để khởi động lại ứng dụng web
  • Tên của ứng dụng web sẽ được khởi động lại

Hãy để chúng tôi phát hành deploy-warlệnh sao chép ứng dụng web vào thư mục ứng dụng web Tomcat và sau đó để chúng tôi tải lại ứng dụng Web Fax. Kết quả sau là kết quả của việc chạy tệp 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

Khi tác vụ trên được chạy, ứng dụng web sẽ được triển khai và ứng dụng web được tải lại.

Bạn có thể sử dụng Ant để thực thi mã Java. Trong ví dụ sau, lớp java nhận vào một đối số (địa chỉ email của quản trị viên) và gửi một email.

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
   { 
	   //......
   }
}

Đây là một bản dựng đơn giản thực thi lớp java này.

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

Khi bản dựng được thực thi, nó tạo ra kết quả sau:

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

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

BUILD SUCCESSFUL
Total time: 1 second

Trong ví dụ này, mã java thực hiện một việc đơn giản - để gửi email. Chúng tôi có thể đã sử dụng nhiệm vụ Ant được xây dựng để làm điều đó. Tuy nhiên, bây giờ bạn đã có ý tưởng, bạn có thể mở rộng tệp xây dựng của mình để gọi mã java thực hiện những việc phức tạp, ví dụ: mã hóa mã nguồn của bạn.

Nếu bạn đã tải xuống và cài đặt Eclipse, bạn chỉ cần thực hiện rất ít việc để bắt đầu. Eclipse đi kèm với plugin Ant, sẵn sàng để sử dụng.

Làm theo các bước đơn giản để tích hợp Ant vào Eclipse.

  • Đảm bảo rằng build.xml là một phần của dự án java của bạn và không nằm ở vị trí bên ngoài dự án.

  • Bật Ant View bằng cách làm theo Window > Show View > Other > Ant > Ant.

  • Mở Project Explorer, kéo build.xml vào Ant View.

Chế độ xem Ant của bạn trông tương tự như:

Nhấp vào các mục tiêu, xây dựng / dọn dẹp / sử dụng sẽ chạy Ant với mục tiêu.

Nhấp vào "fax" sẽ thực hiện mục tiêu mặc định - usage.

Plugin Ant Eclipse cũng đi kèm với một trình soạn thảo tốt để chỉnh sửa các tệp build.xml. Người chỉnh sửa biết về lược đồ build.xml và có thể hỗ trợ bạn hoàn thành mã.

Để sử dụng trình soạn thảo Ant, hãy nhấp chuột phải vào build.xml của bạn (từ Project Explorer) và chọn Mở bằng> Ant Editor. Trình chỉnh sửa Ant sẽ trông giống như sau:

Trình biên tập Ant liệt kê các mục tiêu ở phía bên tay phải. Danh sách mục tiêu đóng vai trò như một dấu trang cho phép bạn chuyển thẳng vào chỉnh sửa một mục tiêu cụ thể.

JUnit là khung kiểm thử đơn vị thường được sử dụng cho các phát triển dựa trên Java. Nó rất dễ sử dụng và dễ dàng mở rộng. Có một số phần mở rộng JUnit có sẵn. Nếu bạn chưa quen với JUnit, bạn nên tải xuống từ www.junit.org và đọc hướng dẫn sử dụng của nó.

Chương này trình bày cách thực hiện các bài kiểm tra JUnit bằng Ant. Ant làm cho nó thẳng tiến qua nhiệm vụ JUnit.

Các thuộc tính của nhiệm vụ JUnit được trình bày dưới đây:

Tính chất Sự miêu tả
dir Gọi VM từ đâu. Điều này được bỏ qua khifork bị vô hiệu hóa.
jvm Lệnh được sử dụng để gọi JVM. Điều này được bỏ qua khifork bị vô hiệu hóa.
cái nĩa Chạy thử nghiệm trong một JVM riêng biệt
lỗi Tên của thuộc tính cần đặt nếu có lỗi JUnit
sự thất bại Tên của thuộc tính để đặt nếu có lỗi JUnit
haltonerror Dừng thực thi khi xảy ra lỗi kiểm tra
haltonfailure Dừng thực thi khi xảy ra lỗi
bản in Khuyên Ant hiển thị số liệu thống kê đơn giản cho mỗi bài kiểm tra
đầu ra Khuyên Ant gửi đầu ra tới nhật ký và bộ định dạng của nó
tempdir Đường dẫn đến tệp tạm thời mà Ant sẽ sử dụng
hết giờ Thoát khỏi các bài kiểm tra mất nhiều thời gian chạy hơn cài đặt này (tính bằng mili giây).

Hãy để chúng tôi tiếp tục chủ đề của Hello World Ứng dụng web fax và thêm mục tiêu JUnit.

Ví dụ sau cho thấy một thực thi kiểm tra JUnit đơn giản:

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

Ví dụ này cho thấy việc thực thi JUnit trên lớp junit com.tutorialspoint.UtilsTest. Chạy đoạn mã trên sẽ tạo ra kết quả sau:

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 đi kèm với một tập hợp các nhiệm vụ được xác định trước, tuy nhiên bạn có thể tạo các nhiệm vụ của riêng mình, như thể hiện trong ví dụ bên dưới.

Nhiệm vụ kiến ​​tùy chỉnh nên mở rộng org.apache.tools.ant.Taskvà nên mở rộng phương thức execute (). Dưới đây là một ví dụ đơn giản:

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

Để thực hiện tác vụ tùy chỉnh, bạn cần thêm phần sau vào Hello World Ứng dụng web fax:

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

Thực hiện tác vụ tùy chỉnh trên sẽ in ra thông báo 'Hello World!'

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

Đây chỉ là một ví dụ đơn giản, bạn có thể sử dụng sức mạnh của Ant để làm bất cứ điều gì bạn muốn để cải thiện quá trình xây dựng và triển khai của mình.

In