2016-04-09 14 views
0

Ich habe ein Programm, das in der Lage sein muss, eine ausführbare JAR-Datei von sich selbst zu erstellen, aber ich habe leider einige Schwierigkeiten, damit es funktioniert. Dies ist die Methode, die ich zur Zeit bin mit der JAR-Datei zu erstellen:Erstellen JAR des Programms selbst

public static void createJar() throws IOException { 
    Manifest manifest = new Manifest(); 
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); 
    manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, "JarTest"); 

    JarOutputStream jos = null; 
    try { 
     String jarPath = System.getProperty("user.dir") + "/Test.jar"; 
     jos = new JarOutputStream(new FileOutputStream(jarPath), manifest); 
    } 
    catch (IOException e) {e.printStackTrace();} 

    ArrayList<String> fileList = new ArrayList<String>(); 
    String codeDir = System.getProperty("user.dir") + "/bin/jartest/"; 
    Files.list(Paths.get(codeDir)).forEach(entry -> { 
     fileList.add(((Path)entry).toString()); 
    }); 

    int len = 0; 
    byte[] buffer = new byte[1024]; 
    for(String file : fileList) { 
     //create JarEntry 
     JarEntry je = new JarEntry(file); 
     je.setComment("Creating Jar"); 
     je.setTime(Calendar.getInstance().getTimeInMillis()); 
     System.out.println(je); 
     jos.putNextEntry(je); 

     //write the bytes of file into jar 
     InputStream is = new BufferedInputStream(new FileInputStream(file)); 
     while((len = is.read(buffer, 0, buffer.length)) != -1) 
      jos.write(buffer, 0, len); 
     is.close(); 
     jos.closeEntry(); 
     System.out.println("Done"); 
    } 
    jos.close(); 
} 

Wenn ich ausführen dieses keine Fehler passieren, und ich habe eine JAR-Datei erhalten namens „test.jar“ erzeugt in meinem Eclipse-Projektordner. Aber wenn ich die JAR öffnen sich die .class-Dateien gibt es nicht, stattdessen sehe ich:

enter image description here

Ich weiß, dass es die .class-Dateien, da die Linie der Suche nach System.out.println(je); erfolgreich druckt den absoluten Pfad von jedem sie, warum werden sie nicht in die JAR gesteckt?

+0

Es, dass eine Art von Übung? Warum nicht das JAR-Tool verwenden? – Henry

+0

Es ist eine Übung, um ein sich selbst replizierendes Programm, wie einen Computerwurm, zu erstellen. –

+0

Wenn Sie 'jar tvf Test.jar' verwenden, werden erwartete Einträge und Größen angezeigt? –

Antwort

0

Es löste sich, als ich diese beiden Zeilen geändert:

String jarPath = System.getProperty("user.dir") + "/Test.jar"; 
String codeDir = System.getProperty("user.dir") + "/bin/jartest/"; 

Um diese:

String jarPath = "Test.jar"; 
String codeDir = "bin/jartest/"; 

Ich kann jetzt die .class Dateien im JAR sehen.

Verwandte Themen