6

私はAntが初めてです。taskdef の「classpathref」に指定する値を教えてください。クラスファイルのパスになりますか?はいの場合、私はそれを試しましたが、うまくいかないため、例を挙げることができます。

4

1 に答える 1

8

taskdef では、classpathrefは以前に定義された への参照である必要がありますpath。パスには、タスクを実装するクラスを保持する jar アーカイブを含めるか、クラス階層のルートであるファイル システム内のディレクトリを指す必要があります。クラスがパッケージに存在する場合、これはクラスを保持する実際のディレクトリではありません。

これが例です。

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

パッケージ名はcom.x.y.zであることに注意してください。したがって、デプロイすると、クラスが というディレクトリの下に置かれるとしclassesましょう。クラスは、ファイル システムの次の場所に表示される場合があります。

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

タスクを使用する単純な build.xml を次に示します。

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

classpathref指定されたclassesディレクトリは、クラス階層のルートであることに注意してください。

実行すると、次のようになります。

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

classpathたとえば、「classpathref」ではなく明示的な を使用して同様のことができます。

<property name="my.classes" value="${basedir}/classes" />
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/>
于 2010-10-14T14:48:44.650 に答える