Solusi kerja lain menggunakan Instrumentasi yang bekerja untuk saya. Ini memiliki keuntungan dari memodifikasi pencarian loader kelas, menghindari masalah pada visibilitas kelas untuk kelas dependen:
Buat Kelas Agen
Untuk contoh ini, itu harus berada di jar yang sama dipanggil oleh baris perintah:
package agent;
import java.io.IOException;
import java.lang.instrument.Instrumentation;
import java.util.jar.JarFile;
public class Agent {
public static Instrumentation instrumentation;
public static void premain(String args, Instrumentation instrumentation) {
Agent.instrumentation = instrumentation;
}
public static void agentmain(String args, Instrumentation instrumentation) {
Agent.instrumentation = instrumentation;
}
public static void appendJarFile(JarFile file) throws IOException {
if (instrumentation != null) {
instrumentation.appendToSystemClassLoaderSearch(file);
}
}
}
Ubah MANIFEST.MF
Menambahkan referensi ke agen:
Launcher-Agent-Class: agent.Agent
Agent-Class: agent.Agent
Premain-Class: agent.Agent
Saya benar-benar menggunakan Netbeans, jadi posting ini membantu tentang cara mengubah manifest.mf
Lari
Ini Launcher-Agent-Class
hanya didukung pada JDK 9+ dan bertanggung jawab untuk memuat agen tanpa secara eksplisit mendefinisikannya pada baris perintah:
java -jar <your jar>
Cara yang bekerja pada JDK 6+ adalah mendefinisikan -javaagent
argumen:
java -javaagent:<your jar> -jar <your jar>
Menambahkan Jar baru di Runtime
Anda kemudian dapat menambahkan toples seperlunya menggunakan perintah berikut:
Agent.appendJarFile(new JarFile(<your file>));
Saya tidak menemukan masalah menggunakan ini pada dokumentasi.