Một giải pháp làm việc khác sử dụng Thiết bị đo đạc phù hợp với tôi. Nó có lợi thế là sửa đổi tìm kiếm trình nạp lớp, tránh các vấn đề về khả năng hiển thị của lớp đối với các lớp phụ thuộc:
Tạo một lớp đại lý
Trong ví dụ này, nó phải nằm trên cùng một jar được gọi bởi dòng lệnh:
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);
}
}
}
Sửa đổi MANIFEST.MF
Thêm tài liệu tham khảo cho các đại lý:
Launcher-Agent-Class: agent.Agent
Agent-Class: agent.Agent
Premain-Class: agent.Agent
Tôi thực sự sử dụng Netbeans, vì vậy bài đăng này giúp về cách thay đổi manifest.mf
Đang chạy
Cái Launcher-Agent-Class
này chỉ được hỗ trợ trên JDK 9+ và chịu trách nhiệm tải tác nhân mà không xác định rõ ràng nó trên dòng lệnh:
java -jar <your jar>
Cách hoạt động trên JDK 6+ là xác định -javaagent
đối số:
java -javaagent:<your jar> -jar <your jar>
Thêm Jar mới trong thời gian chạy
Sau đó, bạn có thể thêm jar khi cần thiết bằng cách sử dụng lệnh sau:
Agent.appendJarFile(new JarFile(<your file>));
Tôi không tìm thấy bất kỳ vấn đề sử dụng này trên tài liệu.