كيفية إضافة مكتبة أصلية إلى "java.library.path" مع إطلاق Eclipse (بدلاً من تجاوزها)

StackOverflow https://stackoverflow.com/questions/661320

سؤال

حصلت على مكتبة أصلية تحتاج إلى إضافتها java.library.path. مع حجة JVM -djava.library.path = المسار ... يمكنني ضبط المسار كما أريد.

مشكلتي هي أن مكتبتي الأخرى (Pentaho Reporting) تبحث عن الخطوط بناءً على Java.library.path الافتراضي (بما في ذلك أدلة النظام وما إلى ذلك) والإعداد اليدوي يتجاوز المسار الافتراضي ..

هكذا: كيف يمكنني يضيف إدخال المسار إلى java.library.path الافتراضي بدلاً من تجاوزه (والذي يبدو أنه يتم مع -djava.library.path)؟ (لا أرغب في إضافة المسار الافتراضي باليد ، وهو ما لن يكون لطيفًا من أجل النشر)

تحرير: آسف لمفقود التفاصيل ؛ أنا أعمل مع Eclipse. (يتم النشر مع JNLP ويمكنني استخدامه هناك nativelib تحت مصادر)

هل كانت مفيدة؟

المحلول

لقد نسيت هذه المشكلة ... كنت أسأل بالفعل مع Eclipse ، آسف لعدم ذكر ذلك في الأصل. ويبدو أن الإجابة بسيطة للغاية (على الأقل مع 3.5 ؛ ربما مع الإصدارات القديمة أيضًا):

وسيطات تكوين Java Run: وسيطات VM:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

يجب ألا تنسى علامات الاقتباس ، وإلا هناك مشاكل في المساحات في المسار.

نصائح أخرى

إذا كنت ترغب في إضافة مكتبة أصلية دون التدخل java.library.path في وقت التطوير في Eclipse (لتجنب تضمين المسارات المطلقة والاضطرار إلى إضافة معلمات إلى تكوين التشغيل الخاص بك) ، يمكنك توفير المسار إلى موقع المكتبات الأصلية لكل جرة في جافا بناء مسار مربع الحوار تحت موقع المكتبة الأصلية. لاحظ أن اسم ملف المكتبة الأصلي يجب أن يتوافق مع اسم ملف JAR. انظر أيضا هذا وصف مفصل.

SWT يضع DLLs الأصليين الضرورية في جرة. ابحث عن "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" على سبيل المثال.

يجب أن تكون DLLs في جذر الجرة ، ويجب توقيع الجرة ويجب أن تظهر DLL مع checksum في meta-inf/manceest.mf لـ VM لالتقاطها.

في Windows ، مثل هذا:

-djava.library.path = "c:/mylibpath ؛ ٪ path ٪"

٪ PATH ٪ هو الخاص بك -djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi؟id=102239 ينص على أنه لا يوجد أي ميكانيكا بديلة يتم تنفيذها في قاذفة Eclipse ، على الأقل لا تصل إلى Juno.

وبالتالي ، من المستحيل (تقريبًا) إلحاق أو إعداد مجلد مكتبة آخر إلى java.library.path عند إطلاق Eclipse دون معرفة مسبقة بالإعداد الافتراضي.

لقد كتبت تقريبًا ، لأنني يجب أن يكون من الممكن السماح لـ Eclipse Startup ، وتفريغ محتوى java.library.path وإيقاف Eclipse في أمر واحد. سيتم تحليل التفريغ ثم يتم أخذها كمدخلات لإطلاق Eclipse ، أي

#!/bin/bash
# get default value of java.library.path (somehow)
default_lib_path=$( start_dump_stop_eclipse_somehow )  

# now launch Eclipse
eclipse --launcher.appendVmargs \
         -vmargs \
         -Djava.library.path="/my/native/lib/folder:${default_lib_path}"

هل يمكنك الحصول على هذا عن طريق الاتصال System.Load () برمجيا لتحميل مكتبتك الأصلية؟ هذه الطريقة (على عكس System.LoadLibrary ()) يسمح لك بتحديد مسار مطلق.

في أنظمة UNIX ، يمكنك إلحاق متغير بيئة LD_LIBRARY_PATH. على Windows ، يقوم JVM تلقائيًا بتعيين خاصية النظام ، java.library.path ، إلى المسار ؛ لذلك إذا كان DLL على طريقك ، فأنت ضبطت.

نافذة-> تفضيلات-> java-> jres المثبتة. ثم اختر JRE الحالي (JDK) وانقر فوق تحرير. املأ وسيطات VM الافتراضية: -djava.library.path =/usr/local/xuggler/lib. فعله!

يعمل الحل الذي يقدمه روب إلسنر في أحد التعليقات أعلاه بشكل مثالي (OSX 10.9 ، Eclipse Kepler). يتعين على المرء إلحاق مساراتهم الإضافية التي تفصلها ":".

يمكنك أيضًا استخدام $ {system_property: java.library.path} - Rob Elsner 22 نوفمبر في الساعة 23:01

يجب أن يتوافق اسم ملف المكتبة الأصلي مع اسم ملف JAR. هذا مهم جدا جدا. يرجى التأكد من أن اسم جرة واسم DLL متماثلان. أيضًا ، يرجى الاطلاع على المنشور من Fabian Steeg My Download for Jawin كان يحتوي على أسماء مختلفة لـ DLL و JAR. كان Jawin.jar و Jawinد.dll ، لاحظ "D" إضافي في اسم ملف DLL. أنا ببساطة أعيد تسميته إلى Jawin.dll ووضعه كمكتبة أصلية في Eclipse كما هو مذكور في Post "http://www.eclipsezone.com/eclipse/forums/t49342.html"

لسبب ما لم أتمكن من الحصول على مجلدات متعددة للعمل (حسنًا ، لقد حدث لفترة من الوقت ولكن بمجرد أن أحتاج إلى مزيد من DLLs وإضافة المزيد من المجلدات ، لا يوجد بها مسافات بيضاء في المسار). ثم قمت بنسخ جميع dlls اللازمة إلى مجلد واحد وكان ذلك كـ java.library.path وعملت. ليس لدي تفسير - إذا فعل أي شخص ، فسيكون ذلك رائعًا.

تفترض العديد من الإجابات الحالية أنك تريد تعيين هذا لمشروع معين ، لكنني كنت بحاجة إلى ضبطه على Eclipse بحد ذاتها من أجل دعم المصادقة المتكاملة لسائق SQL Server JDBC.

للقيام بذلك ، تابعت هذه التعليمات لإطلاق Eclipse من خط الأوامر Java بدلاً من قاذفةه العادية. ثم قمت فقط بتعديل هذا البرنامج النصي لإضافة وسيطة -djava.library.path إلى خط الأوامر Java.

على Windows ، لقد وجدت أن الشيء المهم هو ابدأ Eclipse من سطر الأوامر بدلاً من قائمة START أو اختصار ، شريطة أن يكون DLL الأصلي في دليل في طريقك. على ما يبدو ، هذا يضمن أن الدليل المناسب على الطريق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top