【问题标题】:What classpath do I need for an Ant taskdef?Ant taskdef 我需要什么类路径?
【发布时间】:2011-04-25 09:23:47
【问题描述】:

我是 Ant 新手。 有人可以告诉我为 taskdef 的“classpathref”赋予什么价值吗? 它会是类文件的路径吗? 如果是,可以举个例子,因为我试过了,但它不适合我。

【问题讨论】:

    标签: ant taskdef


    【解决方案1】:

    在 taskdef 中,classpathref 应该是对先前定义的 path 的引用。 该路径应包含一个 jar 存档,其中包含实现任务的类, 或者它应该指向文件系统中的目录,该目录是类层次结构的 root。 如果您的类驻留在包中,这将不是保存您的类的实际目录。

    这是一个例子。

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

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 2011-05-29
      • 2023-03-13
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2010-10-03
      • 2013-01-01
      相关资源
      最近更新 更多