我正在实现一个ant任务作为另一个类的包装器,它使用系统类加载器加载其他几个类。现在,任务就是在这些其他类的罐子一样,所以我不知道它为什么不找他们,因为运行
请注意,我的类都在$CLASSPATH
环境变量的任务为。会不会发生的问题,如果我export LOCALCLASSPATH=$CLASSPATH
小例子:
<taskdef name="mytask" classname="my.package.MyTask" />
<target name="compile">
<mytask />
</target>
,你可以很容易地看到这里的问题
public class MyTask extends Task {
public void execute() throws BuildException {
try {
ClassLoader cl = ClassLoader.getSystemClassLoader();
// this will only print the ant jar file path
for(URL url: ((URLClassLoader)cl).getURLs()){
log(url.getFile());
}
cl.loadClass("my.package.OtherClass"); // throws an exception
} catch (Exception ex) {
throw new BuildException(ex);
}
}
}
你的问题与'委托类加载器'有关:http://ant.apache.org/faq.html#delegating-classloader – Jayan 2013-03-13 11:16:04
据我所知,没有 – 2013-03-13 11:28:43
Hm,LOCALCLASSPATH从CLASSPATH中复制了VALIES。请添加ant版本,操作系统版本到您的问题。它可以帮助某个人。 – Jayan 2013-03-13 16:40:00