في العديد من مشاريع Java ، غالبًا ما يُرى أن المعلمات المخصصة للبرنامج تدعو إلى البرنامج النصي shell Compling Compling. على سبيل المثال،
$ ant_home/bin/ant ، $ groovy_home/bin/groovy
، حتى في برنامج جدولة Timemachine الخاص بنا ، يمكن رؤية
$ etmachine_home/bin/scheduler.sh
إنه ممل وسهل صنع هذه البرامج النصية للتغليف. معظم المشكلات تأتي من تعيين classpath الصحيح إلى البرنامج. إذا كنت تقوم بتطوير مشاريع داخلية لشركة ، فيمكنك الابتعاد عن المسار المتشابك ومشكلة المتغير البيئي. ولكن بالنسبة للمشاريع المفتوحة المصدر ، يحتاج الناس إلى جعل التغليف أكثر مرونة وعالمية. تم توفير معظم إصدارات .bat. Windows DOS هي في الواقع محطة وحشية ومقيدة دون تلبية احتياجات البرنامج النصي للمشروع بشكل جيد. لذلك ، غالبًا ما أشجع الآخرين على استخدام Cygwi قدر الإمكان. على الأقل لديها قذيفة باش حقيقية. المشكلات الشائعة الأخرى هي أن هذه العبوات ستفقد السيطرة قريبًا وأن العديد من البرامج النصية الزائدة ستظهر حول مشروعك.
Run-Java Packaging Script
إذا رأيت رمز $ timemachine_home/bin/smittuler.sh ، فسترى أنه يطلق عليه بالفعل نص Run-Java في نفس الدليل.
dir = $ (dirname $ 0) Scheduler_home = $ dir/run -java -dscheduler.home = "$ Scheduler_home" timemachine.tool.tool.dulerserver "" $@"
كما ترون ، يمكن لـ Run -Java استخدام خيار -D ، وليس فقط ، يمكنه أيضًا استخدام خيار -CP! علاوة على ذلك ، يمكنك تحديد هذه الخيارات وراء الفصل الرئيسي! هذا يمكن أن يجعل تشغيل java تعبئته البرامج النصية الأخرى ، ولا يزال بإمكانها إضافة سمات نظام إضافية و classpath.
على سبيل المثال ، يأتي Timemachine مع مكتبة Groovy ، بحيث يمكنك ببساطة تسميتها هكذا
Groovy: $ timemachine_home/bin/run-java groovy.groovymain test.groovy، دون تنزيل الفرع بأكمله مرة أخرى.
يمكنك بسهولة استخدامه في أي دليل ، ويؤكد دليله ثم تحميل أي حزمة جرة تلقائيًا في دليل LIB. الآن إذا كنت ترغب في إضافة المزيد من أكياس الجرة لتشغيل Groovy ، يمكنك استخدام خيار -CP على النحو التالي: خيارات CP:
$ timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovyعادة ، إذا قمت بإعداد Java ClassPath ، فغالبًا ما تتسبب في أخطاء عندما لا تكون حريصًا ، ولكن يمكنك تشغيلها مسبقًا مع Run-Java:
run_java_dry = 1 $ timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovy
تحتاج فقط إلى تشغيل رمز السطر أعلاه في سطر مطالبة الأوامر. سيؤدي إلى إخراج أوامر Java لجميع الخيارات والمعلمات مع إخراج كامل.
يحتوي Run-Scriping أيضًا على الكثير من الخيارات الأخرى ، ويمكنك فهمه من خلال عرض شرحه. يمكن تشغيل البرنامج النصي الحالي في أي Linux Bash و Windows Cygwin.
استخدم Run-Java من خلال Maven في التطوير
وفقًا للمثال المذكور أعلاه ، على افتراض أن بنية إصدار المشروع هي كما يلي:
$ timemachine_home +-bin/run-java +-lib/*
ولكن ما هو الدليل أثناء عملية التطوير؟ الحالة الشائعة هي: تريد تشغيل أحدث رمز تم تجميعه ضمن الهدف/الفئات بدلاً من تعبئة المشروع بأكمله أو نشره. يمكنك أيضًا استخدام Run-Java في هذه الحالة. بادئ ذي بدء ، أضف bin/run-java إلى مشروعك ، ثم قم بتشغيله
MVN ترجمة التبعية: الاعتماد على نسخ
سيتم إنشاء جميع ملفات JAR تحت الهدف/التبعية. ما عليك سوى القيام بذلك. سيقوم Run-Java تلقائيًا باكتشاف هذه الدليل وإنشاء ClassPath الصحيح لفصلك الرئيسي.
إذا كنت تستخدم Eclipse لتطويرها ، فسيتم دائمًا تحديث دليل الهدف/الفصول الدراسية ، ويمكن أن يصبح Run-Java كنزًا في تطوير مشروعك.
احصل على نص تغليف Java Run-Java
#!/usr/bin/env bash ## حقوق الطبع والنشر 2012 Zemian Deng ## المرخصة بموجب ترخيص Apache ، الإصدار 2.0 ("الترخيص") ؛# لا يجوز لك استخدام هذا الملف وفقًا لـ Livense. نسخة من الترخيص على ## http://www.apache.org/licenses/2.0## ما لم يكن مطلوبًا بموجب القانون المعمول به أو الموافقة على الكتابة ، يتم توزيع البرامج# تحت الترخيص على أساس "كما هو" ،# الأساس ،# بدون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية من المفترض أن يكون موجودًا في دليل "Bin" للتطبيق. في أي مكان في نظام الملفات وسيظل يشير إلى هذا التطبيق#. فئات الهدف/الاختبار "،#" الهدف/الفئات "، و" الهدف/التبعية "يمكن تعطيلها عن طريق الإعداد# recly_java_no_parse = 1. ## إذا كان" المعلمات الافتراضية " يجب أن يكون كل المسار في مسار Cygwin/UNIX ، وسيقوم هذا البرنامج النصي بالتواصل التلقائي بمسار Windows حيث يجب أن يقوم المستخدم بتخصيص Java ClassPath عن طريق ضبط Run_java_cp ، والذي سيؤدي إلى بادئة# classpath الحالية ، أو استخدامها ". -CP "الخيار ، الذي سيتم نشره إلى classpath الحالي. ## الاستخدام:# Run-Java [Java_opts] <Java_main_class> [-cp /more /classpath] [-dsyprop = value] ## مثال:# Run-Java مثال. مرحبًا # example.hello -dname = World # Run -Java org.junit.runner.junitcore exmple.hellotest -cp "c: /apps/lib/junit4.8.2/*" ## تم إنشاؤه بواسطة: zemian deng 03/09/ 2012. إن تطبيق DIR هو مستوى واحد أعلى من البرنامج النصي dir # parametersjava_home = $ {java_home: =/apps/jdk} # هذا هو الدليل الرئيسي لتطوير java = $ classpath} = $ {run_java_opts: =} # java Options (-xmx512m -xx: maxpermsize = 128m etc) run_java_debug = $ {run_java_debug: =} # إذا لم يكن فارغًا ، اطبع سطر java الكامل قبل التنفيذ : =} # إذا لم يكن فارغًا ، تخطي تحليل خيارات -D و -CP من وسيطات البرنامج النصي. run_java_no_autocp = $ {run_java_autocp: =} # إذا كان جارًا ، لا تلقائيًا. ليس فارغًا ، لا تُلزم exec java ، ولكن مجرد دعم proprint # هل isjava_cmd قابلة للتنفيذ java = javaif [-d "$ java_home"] ؛ إذا كان $ cygwin ؛ $ run_java_cp ؛ $ app_dir_win $ app_dir_win/class "] "$ app_dir_win/lib"] ؛ اختبار -lass "] ؛ -classes" ؛ /التبعية/*"؛ fi if [-d" $ app_dir/lib "] ؛ ثم run_java_cp =" $ run_java_cp: $ app_dir/lib/*" من المهم أن لا يمكن للمستخدمين تصدير Run_java_cp و run_java_opts# ey إلى نهاية البرنامج النصي java بدلاً من ذلك. = DECRAY -A NEW_ARGS IDX = 0 # تحليل جميع الوسائط وابحث عن "-cp" و "for arg in" $@ "؛ do if [[-n $ found_cp]] "] cygpath -w -a $ arg) run_java_cp = "$ run_java_cp ؛ p =" $ run_java_cp: $ arg "fi ound_cp = else case $ arg in '-cp') found_cp = 1 ؛ '-d' *) run_java_opts =" $ "$" $ "$ run_java_opts $ arg "؛ *) new_args [$ idx] =" $ arge "lee t idx = $ idx +1 ؛؛ esac fi done # عرض command java الكامل. if [-n" $ run_java_debug "] || [-nn "$ run_java_dry"] ؛ $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" "" "" "" "" "" "" "" "" "" "" "" "$ {new_args [@]}" fielse # عرض أمر Java الكامل. n "$ run_java_debug"] || [-n "$ run_java_dry" run_java_dry "] ؛ ثم" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" $@"fifi