回答編集履歴

1 文法の修正

katliner

katliner score 9

2018/02/05 23:29  投稿

自己解決しました
どうやらJarFileClassLoaderでは独自のClassLoaderを作ってしまうらしく
importは同じクラスに見えますがClassLoaderが違うと同じクラスとは扱えないということだったみたいです。[参照先](https://stackoverflow.com/questions/34553597/java-lang-classcastexception-com-sun-proxy-proxy47-cannot-be-cast-to)
importは同じクラスに見えますがClassLoaderが違うと同じクラスとは扱えないということだったみたいです。[その記事](https://stackoverflow.com/questions/34553597/java-lang-classcastexception-com-sun-proxy-proxy47-cannot-be-cast-to)
ということでClassLoader loader = new JarFileClassLoader(new File("test.zip"), ClassLoader.getSystemClassLoader());とせず、
ClassLoader loader = new URLClassLoader(new URL[] {new File("test.zip").toURL()},this.getClass().getClassLoader());
としてClassLoaderを作れば外部ファイルのClassLoaderでも同じClassLoaderとして扱ってくれるようになり、import先が同じものになりました。
アノテーションの取得は
clas.getAnnotation(Mod.class)
だけで取得できるようになりました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る