Nach einem halben Tag der Suche nach verschiedenen Stack-Threads und keine Antwort finden, werde ich versuchen, mich zu fragen.Erstellen von Glas von Grund auf neu mit einer Klasse
Die folgende Methode ist voller Versuche, das Folgende zu tun. In einem Projekt habe ich eine Klasse namens A. Diese Klasse wird nicht im Projekt verwendet, es hat main() innerhalb und kleinen Code, um eine Testdatei zu erstellen und ein javafx-Fenster anzuzeigen. Der Methodenexport erstellt eine JAR-Datei mit dieser Klasse und markiert sie als Hauptklasse. Ich suche nach einer Möglichkeit, eine lib.jar in die output.jar-Datei, wie auch immer möglich, zu schlagen. Ich muss beachten, dass .. output.jar erstellt wird, beim Starten zeigt es nicht das javafx-Fenster, sondern erstellt die Testdatei, also wenn Sie die Ursache dafür wissen, fühlen Sie sich frei, auch beizutragen. :)
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) {}
}
Fühlen Sie sich frei, weitere Fragen zu stellen.
Guter Punkt, danke :) – Poody
Ich bin nicht einmal sicher, dass Sie eine .classpath-Datei für eine ausführbare JAR-Datei benötigen – Poody
Sie haben Recht, der .classpath muss nicht in der JAR-Datei vorhanden sein. Korrigiert meine Antwort, fügte ".class" dem Dateinamen hinzu. –