تعديل مسار الفصل الديناميكي في Java: دليل شامل
عند تطوير تطبيقات Java، قد يكون من الضروري تعديل مسار الفصل ديناميكيًا. تتيح لك هذه الإمكانية إضافة ملفات JAR أو إزالتها من وقت تشغيل مسار الفصل، مما يتيح لك تحميل مكتبات إضافية أو تخصيص سلوك التطبيق بسرعة.
قبل المتابعة
قد تتساءل لماذا يحتاج المرء إلى تعديل مسار الفصل ديناميكيًا. ينشأ أحد السيناريوهات الشائعة عند استخدام Clojure REPL (حلقة تقييم القراءة والطباعة)، حيث قد ترغب في تحميل ملفات JAR إضافية في مسار الفصل للوصول إلى ملفات مصدر Clojure محددة. تنشأ هذه الحاجة دون إعادة تشغيل Clojure، خاصة عند استخدامه مع Slime على Emacs.
تغيير Classpath باستخدام Java 9 والإصدارات الأحدث
في Java 9 والإصدارات اللاحقة، تتم إضافة تتطلب ملفات JAR إلى مسار الفصل استخدام Instrumentation API وJava Agent. يمكنك تحديد وكيل مضمن في بيان ملف Launcher/jar الرئيسي باستخدام سمة "Launcher-Agent-Class".
اعتبارات System ClassLoader في Java 9
البدء من Java 9، لم يعد النظام java.lang.ClassLoader مثيلًا لـ java.net.URLClassLoader. يستلزم هذا التغيير استخدام أساليب بديلة، مثل java.lang.ModuleLayer، للتأثير على مسار الوحدة النمطية بدلاً من مسار الفئة.
تعديل مسار الفصل الديناميكي لـ Java 8 والإصدارات السابقة
بالنسبة لـ Java 8 والإصدارات السابقة، يتضمن تغيير مسار الفصل إنشاء ClassLoader جديد. فيما يلي بعض النقاط الأساسية التي يجب مراعاتها:
مثال للتعليمات البرمجية لتعديل Classpath الديناميكي
يوضح مثال التعليمات البرمجية التالي كيفية إنشاء و استخدم URLClassLoader لتعديل مسار الفصل:ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
// أضف دليل "conf" إلى مسار الفصل
URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{new File("conf").toURL()},currentThreadClassLoader);
// استبدل محمل فئة الموضوع
الموضوع. استثناء {
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class clazz = URLClassLoader.class;
// استخدم الانعكاس لإضافة عنوان URL إلى أداة تحميل الفصل
طريقة الطريقة = clazz.getDeclaredMethod("addURL"، new Class[]{URL.class});
way.setAccessible(true);
way.invoc(classLoader, new Object[]{url});
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3