さまざまなスタックスレッドを検索し、回答を見つけられない半日後、私は自分自身に質問しようとします。1つのクラスで最初からjarを作成する
以下の方法では、以下の操作が行われます。 プロジェクトでは、Aというクラスがあります。このクラスはプロジェクトでは使用されていません。テストファイルを作成してjavafxウィンドウを表示するにはmain()の内側と小さなコードがあります。メソッドのエクスポートによって、そのクラスを持つjarファイルが作成され、メインクラスとしてマークされます。 私はlib.jarをoutput.jarファイルにスラップする方法を探しています。 output.jarは起動時にjavafxウィンドウを表示せず、テストファイルを作成するので、その原因を知っていれば気軽に投稿できます。 :)
public void export() {
Manifest man = new Manifest();
man.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
man.getMainAttributes().put(Attributes.Name.CLASS_PATH, ". mylib.jar");
man.getMainAttributes().put(Attributes.Name.MAIN_CLASS, A.class.getName());
try {
JarOutputStream f = new JarOutputStream(new FileOutputStream("output.jar"), man);
InputStream c = getClass().getResourceAsStream("A.class");
JarEntry e = new JarEntry("A.class");
f.putNextEntry(e);
byte[] buffer = new byte[1024];
while (true) {
int count = c.read(buffer);
if (count == -1)
break;
f.write(buffer, 0, count);
}
f.closeEntry();
JarEntry cp = new JarEntry(".classpath");
f.putNextEntry(cp);
String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<classpath>"
+ "<classpathentry kind=\"src\" path=\"src\"/>"
+ "<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>"
+ "<classpathentry kind=\"lib\" path=\"mylib.jar\"/>"
+ "<classpathentry kind=\"output\" path=\"bin\"/>"
+ "</classpath>";
f.write(s.getBytes());
f.closeEntry();
f.close();
} catch (IOException e) {}
}
お気軽にご質問ください。
良い点、ありがとう:) – Poody
実行可能なjarファイルのために.classpathファイルが必要であるとは確信していません。 – Poody
正しいですが、.classpathはjarファイルに存在する必要はありません。私の答えを訂正し、ファイル名に ".class"を加えました。 –