2010-10-14 39 views
5

Tôi mới sử dụng Ant. Có thể ai đó vui lòng cho tôi biết giá trị để đặt cho 'classpathref' cho taskdef không? Nó sẽ là đường dẫn của tệp lớp? Nếu có, ví dụ có thể được đưa ra bởi vì tôi đã thử nó và nó không hoạt động cho tôi.Tôi cần loại đường dẫn nào cho nhiệm vụ Ant?

Trả lời

5

Trong taskdef, classpathref phải là tham chiếu đến một số đã được xác định trước path. Đường dẫn phải bao gồm một kho lưu trữ jar chứa lớp thực hiện nhiệm vụ, hoặc nó phải trỏ đến thư mục trong hệ thống tệp là gốc của hệ thống phân cấp lớp. Đây sẽ không phải là thư mục thực sự chứa lớp học của bạn nếu lớp học của bạn nằm trong một gói.

Đây là một ví dụ.

MyTask.java:

package com.x.y.z; 

import org.apache.tools.ant.BuildException; 
import org.apache.tools.ant.Task; 

public class MyTask extends Task 
{ 
    // The method executing the task 
    public void execute() throws BuildException { 
     System.out.println("MyTask is running"); 
    } 
} 

Lưu ý rằng tên gói là com.x.y.z, vì vậy khi triển khai - cho phép nói rằng các lớp học được đặt dưới một thư mục gọi classes - chúng ta có thể thấy lớp ở đây trong hệ thống tập tin :

$ ls classes/com/x/y/z 
MyTask.class 

Dưới đây là một build.xml đơn giản mà sử dụng các nhiệm vụ:

<project name="MyProject" basedir="."> 

<path id="my.classes"> 
    <pathelement path="${basedir}/classes" /> 
</path> 
<taskdef name="mytask" classpathref="my.classes" classname="com.x.y.z.MyTask"/> 
<mytask /> 

</project> 

Lưu ý rằng classpathref các điểm đã cho tại thư mục classes - gốc của phân cấp lớp.

Khi chạy, chúng tôi nhận được:

$ ant 
Buildfile: .../build.xml 
    [mytask] MyTask is running 

Bạn có thể làm tương tự như sử dụng một rõ ràng classpath, chứ không phải là một 'classpathref', ví dụ:

<property name="my.classes" value="${basedir}/classes" /> 
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/> 
Các vấn đề liên quan