كيف تدير الجرة المصنوعة من أمر "لين جرة"؟

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

  •  25-09-2019
  •  | 
  •  

سؤال

هذه متابعة ل هذا السؤال.

بعد تشغيل "Lein Jar" ، أحصل على "MyProject -1.0.0.0.snapshot.jar" ، والذي لا يحتوي على clojure-1.2.0-beta1.jar و clojure-contrib-1.2.0-beta1.jar.

وتشغيل "Lein Uberjar" يعطيني ملفين جرة. الأول (الذي ينتهي بـ -standalone.jar) هو الجرة التي تحتوي على كل شيء ، والثاني هو نفسه الجرة الناتجة عن "جرة لين".

هذا هو مسألة الجرة مع الثانية. لا توجد مشكلة في الركض مع الجرة الأولى ، كما أوضحت في السابق بريد.

عندما أركض

java -cp PATH_TO_THE_CLOJURE_AND_CONTRIB.jar:$CLASSPATH -jar myproject-1.0.0-SNAPSHOT.jar'

, ، أحصل على الخطأ التالية.

Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

ما قد يكون خطأ ، اعتقدت أنه يمكنني استخدام "myproject -1.0.0-snapshot.jar بنفس الطريقة مع" myProject -1.0.0-snapshot-standalone.jar "إذا كنت أشير إلى ملفات JAR باستخدام خيار -CP.

هل هناك أي شيء كان علي فعله؟

وأضاف

java -cp ALLTHE_JAR_PATH myproject.core

يحل المشكلة.

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

المحلول

إذا كنت تستخدم Lininingen 1.2 ، فمن المحتمل أن تتعرض لخطأ حيث يتم حذف التبعيات قبل إنشاء uberjar (من الواضح أنه يهزم نقطة أوبرجار). يرجى إما خفض التصنيف إلى 1.1 وانتظار الإصدار الجديد (الذي يجب أن يصل قريبًا) أو استخدام الخروج من رأس لين (كما هو موضح في القسم الخاص بـ Lininingen في Lein's Readme).

بمجرد القيام بذلك ، يجب أن تكون قادرًا على إنتاج جرة مستقلة lein uberjar ويقول java -jar name-of-your-standalone.jar لإطلاق التطبيق الخاص بك.

كبديل ، يمكنك إنشاء جرة عادية مع lein jar ويقول شيئًا مثل java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (أين your-app.main هل الفصل الرئيسي لطلبك ؛ أيضا ، استبدال $PROJECT_ROOT مع المسار المناسب وتزويد الطريق إلى your-app.jar, ، بالتاكيد). ال lib/* سيعمل الشيء فقط على JDK 1.6 ؛ مع 1.5 يجب عليك تضمين كل جرة بشكل منفصل. لاحظ أنه عند استخدام -jar, -cp و $CLASSPATH يتم تجاهلها ؛ فقط classpath المحدد في بيان الجرة (إن وجد) يتم أخذها في الاعتبار.

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