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