我正在实现一个 ant 任务作为另一个类的包装器,该类使用系统类加载器加载其他几个类。现在,任务在这些其他类的同一个 jar 中,所以我想知道为什么它没有找到它们,因为任务正在运行
请注意,我的类在$CLASSPATH
env 变量中。如果我不会出现问题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);
}
}
}