注:これは、ここでの私の質問のフォローアップです。
ディレクトリの内容を取得し、すべてをJARファイルにバンドルするプログラムがあります。これを行うために使用するコードは次のとおりです。
try
{
FileOutputStream stream = new FileOutputStream(target);
JarOutputStream jOS = new JarOutputStream(stream);
LinkedList<File> fileList = new LinkedList<File>();
buildList(directory, fileList);
JarEntry jarAdd;
String basePath = directory.getAbsolutePath();
byte[] buffer = new byte[4096];
for(File file : fileList)
{
String path = file.getPath().substring(basePath.length() + 1);
path.replaceAll("\\\\", "/");
jarAdd = new JarEntry(path);
jarAdd.setTime(file.lastModified());
jOS.putNextEntry(jarAdd);
FileInputStream in = new FileInputStream(file);
while(true)
{
int nRead = in.read(buffer, 0, buffer.length);
if(nRead <= 0)
break;
jOS.write(buffer, 0, nRead);
}
in.close();
}
jOS.close();
stream.close();
つまり、すべてが順調で、jarが作成され、7-zipでその内容を調べると、必要なすべてのファイルが含まれています。ただし、URLClassLoaderを介してJarのコンテンツにアクセスしようとすると(jarはクラスパス上になく、意図しないため)、nullポインター例外が発生します。
奇妙なことに、EclipseからエクスポートしたJarを使用すると、そのコンテンツに好きなようにアクセスできます。これは、私がどういうわけか正しくJarを作成しておらず、何かを省略していると私に信じさせます。上記の方法に欠けているものはありますか?