2012-04-18 23 views
5

Ich plane, einen Jar-Befehl mit einem Jar, der in einem anderen Jar enthalten ist, auszuführen.Wie führe ich ein Glas aus einem Glas aus?

public void obfuscate() 
{ 
    try 
    { 
     String jre = "\"" + System.getProperty("java.home") + "\\bin\\javaw.exe" + "\""; 
     String jar = " -jar"; 
     Runtime.getRuntime().exec(new String[] { jre, jar.trim(), "/lib/allatori.jar /lib/config.xml" }); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

allatori.jar Datei enthalten ist in meiner main.jar Datei als Ressource:

Der Befehl wird automatisch eine Java-JAR-Datei Code ähnlich verschleiern. config.xml Datei ist ebenfalls enthalten.

Wie kann ich meinen Befehl ausführen, so dass er die enthaltene JAR-Datei ausführt?

Ordnerstruktur des main.jar:

- main.jar 
    | 
    |- main_class.class 
    |- lib/ 
     |- allatori.jar 
     |- config.xml 
     |- jarToObfuscate.jar 

Antwort

1

Sie müssen es sicherlich außerhalb des Glases auspacken, bevor Sie es laufen lassen.

1

Sicher. Kopiere es nach draußen, erstelle einen Klassenlader, finde die Klasse, mit der du anfangen willst, und schon gehts los. An Ort und Stelle, solange es noch da ist? Nun, Sie müssten Ihren eigenen Code schreiben, um die Klassendateien aus der eingebetteten JAR-Datei zu holen und sie einem Klassenlader zur Verfügung zu stellen, wahrscheinlich müssten Sie ihn von Grund auf neu schreiben.

+0

* "wahrscheinlich müssten Sie es von Grund auf neu schreiben." * Siehe z. [Fat Jar] (http://fjep.sourceforge.net/) which * "Die One-JAR-Option integriert einen speziellen Class-Loader .. der JAR-Dateien in einem Jar verarbeitet." * & [JarClassLoader] (http: //www.jdotsoft.com/JarClassLoader.php) * "Der Klassenlader zum Laden von Klassen, nativen Bibliotheken und Ressourcen aus der obersten JAR und aus JARs innerhalb der obersten JAR." * nur ein paar der Top-Treffer bei einer Hauptsuche Engine .. –

+0

Der einfachste Weg wäre wahrscheinlich, eine Kopie des Jar programmatisch zu erstellen, dann starte es mit Runtime.exec und lösche es danach. Was halten Sie davon? – Manitoba