Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant taskdef的类路径?_Ant_Classpath_Taskdef - Fatal编程技术网

Ant taskdef的类路径?

Ant taskdef的类路径?,ant,classpath,taskdef,Ant,Classpath,Taskdef,我正在用Ant定义一个新任务。 我将其导出为jar并添加到我的构建文件中: <taskdef classname="X" classpath="Y.jar"/> 问题是,这在运行时失败。 它告诉我它没有找到班级。 通过将jar添加到类路径中,它得到了纠正 我的问题是:有没有一种方法可以在不更改类路径的情况下从Ant构建文件中引用我的jar。我假设您查看了fortaskdef,它只显示了任务名称和实现类。但是,taskdef子类typedef,如果您查看后者,您将看到还有一个cl

我正在用Ant定义一个新任务。 我将其导出为jar并添加到我的构建文件中:

<taskdef classname="X" classpath="Y.jar"/>

问题是,这在运行时失败。 它告诉我它没有找到班级。 通过将jar添加到类路径中,它得到了纠正


我的问题是:有没有一种方法可以在不更改类路径的情况下从Ant构建文件中引用我的jar。我假设您查看了for
taskdef
,它只显示了任务名称和实现类。但是,
taskdef
子类
typedef
,如果您查看后者,您将看到还有一个
classpath
属性


但是,使用此属性意味着您的ant脚本绑定到特定环境;它们不是很便于携带。更好的方法是使用
-lib

将类路径传递给Ant,如果您知道jar的路径,那么在Ant脚本中您可以为自己的任务定义类路径

<taskdef name="myTaskName" classname="com.myorg.myclass">
  <classpath>
    <pathelement location="pathToMyJar.jar"/>
  </classpath>
</taskdef>

如果您使用的是
类路径
环境变量,请不要这样做。从环境设置中删除它,并养成显式指定类路径的习惯。因为否则,您将发现自己面临一个难以调试的问题,即从类路径加载库,而您并不期望它。或者其他人无法运行您的代码,因为他/她没有相同的
CLASSPATH
环境变量。我不明白为什么这是一种更好的方法。使用
-lib
选项指定类路径只会让用户知道这些路径。您仍然需要告诉用户在哪里查找它们(例如,在自述文件、帮助文件或回显消息中)。或者,您可以决定重新构造项目目录层次结构,将这些lib包含在特定的子目录中,成为“独立于环境的”。构建脚本应该考虑这些细节,理想情况下使用默认的
ant
调用生成一个合理的对象。