Benim için çalışan Enstrümantasyon kullanan başka bir çalışma çözümü. Bağımlı sınıflar için sınıf görünürlüğü sorunlarından kaçınarak sınıf yükleyici aramasını değiştirme avantajına sahiptir:
Bir Ajan Sınıfı oluşturun
Bu örnek için, komut satırı tarafından çağrılan aynı kavanozda olması gerekir:
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);
}
}
}
MANIFEST.MF dosyasını değiştirin.
Temsilciye referans ekleme:
Launcher-Agent-Class: agent.Agent
Agent-Class: agent.Agent
Premain-Class: agent.Agent
Aslında Netbeans kullanıyorum, bu yazı manifest.mf nasıl değiştirilir
Koşu
The Launcher-Agent-Class
yalnızca JDK 9+ üzerinde desteklenir ve aracıyı komut satırında açıkça tanımlamaksızın yüklemekten sorumludur:
java -jar <your jar>
JDK 6+ üzerinde çalışma şekli şu -javaagent
argümanı tanımlamaktır :
java -javaagent:<your jar> -jar <your jar>
Çalışma zamanında yeni kavanoz ekleme
Daha sonra aşağıdaki komutu kullanarak gerektiği şekilde jar ekleyebilirsiniz:
Agent.appendJarFile(new JarFile(<your file>));
Bunu dokümantasyonda kullanırken herhangi bir sorun bulamadım.