2012-04-18 2 views
5

Tôi định thực hiện lệnh jar bằng cách sử dụng một cái lọ được bao gồm trong một cái bình khác.Làm cách nào để thực hiện một cái bình từ bên trong một cái lọ?

Lệnh sẽ tự động xáo trộn một file jar Java sử dụng mã tương tự như:

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 tập tin được bao gồm trong tập tin main.jar của tôi như là một nguồn tài nguyên. config.xml tệp cũng được bao gồm.

Làm cách nào tôi có thể chạy lệnh để nó thực hiện tệp jar được bao gồm?

thư mục cấu trúc của main.jar:

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

Trả lời

1

Bạn chắc chắn sẽ phải giải nén nó bên ngoài bình trước khi chạy nó.

1

chắc. Sao chép nó bên ngoài, tạo một trình nạp lớp, tìm lớp bạn muốn bắt đầu và tắt đi. Tại chỗ trong khi nó vẫn còn đó? tốt, bạn phải viết mã của riêng bạn để kéo các tệp lớp ra khỏi tệp jar được nhúng và làm cho chúng có sẵn cho trình nạp lớp, có thể bạn phải viết nó từ đầu.

+0

* "có thể bạn phải viết từ đầu." * Xem ví dụ: [Fat Jar] (http://fjep.sourceforge.net/) mà * "Tùy chọn One-JAR tích hợp một Trình nạp lớp chuyên dụng .. xử lý các tệp jar bên trong một cái bình." * & [JarClassLoader] (http: //www.jdotsoft.com/JarClassLoader.php) * "Trình nạp lớp để tải các lớp, các thư viện gốc và các tài nguyên từ JAR hàng đầu và từ các JAR bên trong JAR hàng đầu." * chỉ là một vài trong số các truy cập hàng đầu trên một tìm kiếm lớn động cơ .. –

+0

Cách dễ nhất có thể sẽ tạo ra một bản sao của chương trình jar, sau đó chạy nó với Runtime.exec, và xóa nó sau. Bạn nghĩ gì về điều đó? – Manitoba