JarFile と JarURLConnection を使用して、jar ファイルからファイルをロードしています。次に、クラスを取得し、BCEL (ByteCode Engineering Library、Apache ライブラリ) 経由でロードします。BCELで一部のクラスを少し変更しているため、クラスローダーを直接使用することはできません。クラスをバイト単位で bcel ローダーにロードする必要があります。ただし、ロードしているクラスの 1 つがリソースを参照しています。このリソースは jar 内にあるため、ファイルを取得できます (JarFile のエントリを反復処理するときは、通常のファイルを無視し、後でロードするためにクラス ファイルを取得します)。しかし、クラスがファイルをリソースとしてロードするため、ファイルを持っているだけでは何の役にも立ちません。jar からそのリソースを取得する方法はありますか (それを取得して byte[],
ここにはたくさんのものがあります。何か混乱している場合は、コメントで尋ねてください。何か間違ったことを言った、または何かを完全に見逃した可能性があります:)ありがとう
ここで、私のクラス ローダーを少し示します (ClassLoader を拡張します)。
@Override
public URL getResource(String name) {
System.out.println("LOADING RESOURCE: " + name);
try {
return new URL(null, name, new Handler(files));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
現在、「LOADING RESOURCE: filename」が出力されていますが、MalformedURLException が返されます (プロトコル atm はなく、ファイル パスだけです。これは真に有効なパスではありませんが、それを Handler に渡そうとするだけです)。以下のクラス)。
class Handler extends URLStreamHandler {
@Override
protected URLConnection openConnection(URL u) throws IOException {
return new URLConnection(u) {
@Override
public void connect() throws IOException {
}
@Override
public InputStream getInputStream() throws IOException {
System.out.println("IS: " + url);
return /*method to get input steam*/;
}
};
}
}
/*入力ストリームを取得するメソッド*/ は実際のコードで設定されていますが、ここでは関係ありません。それで、これに関するさらなるアイデアはありますか?