ইনস্ট্রুমেন্টেশন ব্যবহার করে আরেকটি কার্যকরী সমাধান যা আমার পক্ষে কার্যকর। শ্রেণি লোডার অনুসন্ধান সংশোধন করে, নির্ভরশীল শ্রেণীর জন্য শ্রেণীর দৃশ্যমানতায় সমস্যাগুলি এড়ানো এর সুবিধা রয়েছে:
একটি এজেন্ট ক্লাস তৈরি করুন
এই উদাহরণস্বরূপ, এটি কমান্ড লাইনের দ্বারা অনুরোধ করা একই পাত্রে থাকতে হবে:
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 পরিবর্তন করুন
এজেন্টের রেফারেন্স যুক্ত করা:
Launcher-Agent-Class: agent.Agent
Agent-Class: agent.Agent
Premain-Class: agent.Agent
আমি আসলে নেটবিন ব্যবহার করি, সুতরাং এই পোস্টটি কীভাবে ম্যানিফেস্ট.এমএফ পরিবর্তন করতে সহায়তা করে
চলমান
এটি কেবল Launcher-Agent-Class
জেডিকে 9+ তে সমর্থিত এবং এজেন্টটিকে লোড করার জন্য এটি কমান্ড লাইনে সুস্পষ্টভাবে ব্যাখ্যা না করেই দায়বদ্ধ:
java -jar <your jar>
JDK 6+ এ যেভাবে কাজ করে তা -javaagent
আর্গুমেন্টকে সংজ্ঞায়িত করছে :
java -javaagent:<your jar> -jar <your jar>
রানটাইমে নতুন জার যুক্ত করা হচ্ছে
তারপরে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে প্রয়োজনীয় হিসাবে পাত্র যুক্ত করতে পারেন:
Agent.appendJarFile(new JarFile(<your file>));
ডকুমেন্টেশনে এটি ব্যবহার করে আমি কোনও সমস্যা পাইনি।