システムクラスローダーを使用して他のいくつかのクラスをロードする別のクラスのラッパーとして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);
}
}
}