تحديد CLASSPATH لفئات داخل JAR نفسها
سؤال
وإذا كان لدي فئة org.foobar.MyClass وتريد وضعه في ملف JAR، لا بد لي من وضعه في JAR ل/ المنظمة / foobar / الدليل، أو يمكن وضعه في / بن / المنظمة / foobar / وتحديد حد ما / بن / كما CLASSPATH داخل JAR نفسها؟
المحلول
والطريقة المعتادة أن الجميع يفعل ذلك - حتى الآن أنا لم أر قط JAR تفعل شيئا مختلفا - هو وضع الطبقة org.foobar.MyClass في ملف JAR في JAR ل/ المنظمة / foobar / الدليل. لا أستطيع أن أتخيل سبب وجيه لفعل شيء مختلف، لأن من شأنه أن يعيق الاستخدام العادي من هذا JAR من قبل أي شخص لا تفعل أشياء غير عادية.
نصائح أخرى
ويمكنك تضمين خاصية الدرجة الاولى مسار في المانيفستو الخاص بك، يعدد جرة ملفات التطبيق الخاص بك يعتمد على. وسيتم النظر في مسارات نسبة إلى موقع JAR القابل للتنفيذ.
وعلى سبيل المثال إذا app.jar يحتوي هذا في MANIFEST.MF:
ومن الدرجة الاولى مسار: lib1.jar، ليب / lib2.jar
وبعد ذلك سوف JVM تتوقع أن تجد lib1.jar في نفس دير كما app.jar ودليل فرعي يسمى ليب تحتوي على lib2.jar.
وأعتقد أنك يمكن تحقيق ذلك باستخدام ملف البيان. إذا كنت أتذكر بشكل صحيح، يمكنك تحديد موقع ملف معين داخل الجرة.
والاسم في ملف جرة أن تطابق اسم الفئة. ما لم يكن بالطبع كنت أكتب محمل فئة مخصصة للقيام أشياء غريبة.
ويمكنك تحديد "الدليل" ضمن ملف جرة باستخدام URL جرة. ومع ذلك، لا أعتقد URLClassLoader
يعالج هذا بشكل صحيح (لم يحاكم).
وهناك ميزة أن لا وجود لها وفقا لمعايير لإضافة الملفات جرة الأخرى على إلى classpath من خلال تحديدها في البيان.
وماذا كنت ستفعل هذا الأخير؟ انه من الاسهل لمجرد وضعها في الدليل الصحيح استنادا إلى اسم الحزمة، التي تتجنب الحاجة إلى تحرير ملف البيان أو القيام بأي نوع آخر من إعدادات خاصة.