Dalam banyak proyek Java, sering terlihat bahwa Parameter Kustom Program memanggil Java Command Packaging Shell Script. Misalnya,
$ Ant_home/bin/semut, $ groovy_home/bin/groovy
, Bahkan dalam program penjadwal timemachine kami, dapat dilihat
$ etmachine_home/bin/scheduler.sh
Sangat membosankan dan mudah membuat skrip pengemasan ini. Sebagian besar masalah datang dari mengatur classpath yang benar ke program. Jika Anda mengembangkan proyek internal untuk perusahaan, maka Anda dapat menjauh dari jalur kusut dan masalah variabel lingkungan. Tetapi untuk proyek open source, orang perlu membuat kemasan lebih fleksibel dan universal. Sebagian besar versi .bat disediakan. Windows DOS memang terminal yang brutal dan terbatas tanpa memenuhi kebutuhan skrip proyek Anda dengan baik. Karena itu, saya sering mendorong orang lain untuk menggunakan Cygwi sebanyak mungkin. Setidaknya ia memiliki cangkang bash nyata. Masalah umum lainnya adalah bahwa kemasan ini akan segera kehilangan kendali dan banyak skrip yang berlebihan akan muncul di sekitar proyek Anda.
PENDAHULUAN RUN-JAVA PENDAHULUAN PENDAHULUAN
Jika Anda melihat kode $ timemachine_home/bin/scheduler.sh, Anda akan melihat bahwa itu sebenarnya disebut skrip run-java di direktori yang sama.
Dir = $ (dirname $ 0) scheduler_home = $ dir/run -java -dscheduler.home = "$ scheduler_home" timemachine.tool.tool.dulerserver "" $@"
Seperti yang Anda lihat, run -java kami dapat menggunakan opsi -D, tidak hanya itu, tetapi juga dapat menggunakan opsi -CP! Selain itu, Anda dapat menentukan opsi ini di belakang kelas utama! Ini dapat membuat run-java dikemas oleh skrip lain, dan masih dapat menambahkan atribut sistem tambahan dan classpath.
Misalnya, timemachine dilengkapi dengan perpustakaan yang asyik, jadi Anda bisa menyebutnya seperti ini
Groovy: $ timemachine_home/bin/run-java groovy.groovymain test.groovy, Tanpa mengunduh seluruh cabang lagi.
Anda dapat dengan mudah menggunakannya di direktori apa pun, ia mengkonfirmasi direktori dan kemudian secara otomatis memuat paket JAR apa pun di direktori LIB. Sekarang jika Anda ingin menambahkan lebih banyak tas jar untuk menjalankan Groovy, Anda dapat menggunakan opsi -CP sebagai berikut: Opsi CP:
$ Timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovyBiasanya, jika Anda mengatur Java Classpath, Anda sering menyebabkan kesalahan saat Anda tidak hati-hati, tetapi Anda dapat menjalankannya terlebih dahulu dengan run-java:
Run_java_dry = 1 $ timemachine_home/bin/run-java -cp "$ home/apps/my-app/lib/*" groovy.groovymain test.groovy
Anda hanya perlu menjalankan kode baris di atas di baris prompt perintah. Ini akan menghasilkan perintah Java dari semua opsi dan parameter dengan output lengkap.
Run-Script juga berisi banyak opsi lain, dan Anda dapat memahaminya dengan melihat anotasi. Skrip saat ini dapat berjalan di Linux Bash dan Windows Cygwin.
Gunakan run-java melalui pakar dalam pengembangan
Menurut contoh yang disebutkan di atas, dengan asumsi struktur rilis proyek adalah sebagai berikut:
$ Timemachine_home +-bin/run-java +-lib/*
Tapi apa direktori selama proses pengembangan? Kasus umum adalah: Anda ingin menjalankan kode yang dikompilasi terbaru di bawah target/kelas alih -alih mengemas atau menerbitkan seluruh proyek. Anda juga dapat menggunakan run-java dalam kasus ini. Pertama-tama, tambahkan bin/run-java ke proyek Anda, dan kemudian jalankan
MVN Kompilasi Ketergantungan: Ketergantungan Salin
Semua file jar akan dihasilkan di bawah target/ketergantungan. Anda hanya perlu melakukan ini. Run-Java akan secara otomatis mendeteksi direktori ini dan membuat classpath yang benar untuk kelas utama Anda.
Jika Anda menggunakan Eclipse untuk berkembang, maka direktori target/kelas Anda akan selalu diperbarui, dan run-java dapat menjadi harta karun dalam pengembangan proyek Anda.
Dapatkan skrip pengemasan run-java
#!/USR/BIN/Env Bash ## Hak Cipta 2012 Zemian Deng ## dilisensikan di bawah lisensi Apache, versi 2.0 (lisensi ");# Anda tidak boleh menggunakan file ini sesuai dengan Livense.# Anda dapat memperoleh a Salinan lisensi di ## http://www.apache.org/licenses/2.0## kecuali jika disyaratkan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak# ed di bawah lisensi didistribusikan berdasarkan "sebagaimana adanya",# Tanpa jaminan atau ketentuan apa pun, baik tersurat maupun tersirat.# Lihat lisensi untuk bahasa yang mengatur bahasa dan batasan# Batas di bawah lisensi.# Skrip pembungkus yang menjalankan aplikasi Java6 di Unix/Cygwin Env diasumsikan berada di direktori "bin" aplikasi. Di mana saja di sistem file dan masih akan merujuk pada direktori aplikasi ini. Target/Test-Classes "," Target/Kelas ", dan" Target/Ketergantungan "H. Ini dapat dinonaktifkan dengan# pengaturan run_java_no_parse = 1. ## Jika" parameter default Dari semua jalur harus di jalur Cygwin/Unix,# dan skrip ini akan mengonversi jalur Windows di mana diperlukan. -CP "Opsi, yang akan memposting ke classpath yang ada. ## penggunaan:# run-java [java_opts] <java_main_class> [-cp /more /classpath] [-dsysprop = value] ## Contoh:# run-java contoh. Halo # example.hello -dname = dunia # run -java org.junit.runner.junitcore exmple.hellotest -cp "c: /apps/lib/junit4.8.2/*" ## Dibuat oleh: Zemian Deng 03/09/ 2012 # Run ini skrip d d ir (resolve to absolute path) script_dir = $ (cd $ (dirname $ 0) && pwd) # dir ini di mana skrip ini live.app_dir = $ (cd $ script_dir/.. && pd) # asumsikan # Dir aplikasi adalah satu level naik dari skrip dir # parameter default ParametersJava_home = $ {java_home: =/apps/jdk} # Ini adalah direktori home dari java development = $ classpath} # prefix classpath sebelum -Classpath opsi, default ke $ classpathrun_java_opts = $ {Run_java_opts: =} # java options (-xmx512m -xx: maxpermsize = 128m dll) run_java_debug = $ {run_java_debug: =} # jika tidak kosong, cetak line perintah java penuh sebelum menjalankannya.run.rune_joVer_JoVer_joVer_nova_noVer_nova_noVer_nova_noVer_noVer_nova_noVse =noVe_noVse =nparse_parse =npars : =} # Jika tidak kosong, lewati parsing otomatis -d dan -cp opsi dari argumen skrip.run_java_no_autocp = $ {run_java_autocp: =} # jika tidak, jangan diatur secara otomatis java classpathrun_java_dry = $ {runjava = {runjava = {Java = oVa = oVa = ifa = oVa_java_dry = $ {$ {JAVA = {JAVA = oVA = {JAVA = JAVA_JAVA_DRY = $ {$ {$ { tidak kosong, jangan mengeksekusi java komit, tetapi hanya proprint # os dukungan khusus. Adalah Java yang dapat dieksekusi isjava_cmd = javaif [-d "$ java_home"]; Jika $ cygwin; lalu konversi direktori windows java_home_win = $ (cygpath -aw "$ java_home") app_dir_win = $ (cygpath -aw "$ app_dir" jika [ -d "$ app_dir_win/ $ Run_java_cp; $ App_dir_win/target/class "]; lalu run_java_cp =" $ run_java_cp; "App_dir_win/lib"]; lalu run_java_cp = "$ run_java_cp; $ app_dir_win/lib/*"; Test -Class "]; -Classes"; /Ketergantungan/*"; fi if [-d" $ app_dir/lib "]; lalu run_java_cp =" $ run_java_cp: $ app_dir/lib/*"; d" Setelah kelas utama Java dari argumen skrip# ini dilakukan untuk kenyamanan Sake jadi pengguna untuk tidak mengekspor run_java_cp dan run_java_opts# ey dapat masuk ke akhir skrip run-java ini sebagai gantinya.# Ini dapat dinonaktifkan dengan self_java_parse = 1.if [-z "$ run_java_no_parse"]; = DECLARE -A NEW_ARGS IDX = 0 # Parse semua argumen dan cari "-cp" dan "untuk arg in" $@ "; lakukan jika [[-n $ found_cp]]; lalu jika [" $ os "=" windows_nt "]; lalu # tidak dapat menggunakan cygpath di sini, karena cygpath akan mengembang secara otomatis"*", yang tidak kita inginkan. Pengguna hanya harus menggunakan jalur OS saat menentukan opsi" -cp ". #arg = $ ( Cygpath -w -a $ arg) run_java_cp = "$ run_java_cp; p =" $ run_java_cp: $ arg "fi found_cp = else case $ arg in '-cp') found_cp = 1; '-d' *) run_java_opts =" $ Run_java_opts $ arg "; *) new_args [$ idx] =" $ arg "lee t idx = $ idx +1 ;; esac fi selesai # menampilkan perintah java penuh. If [-n" $ run_java_debug "] || [-n "$ Run_java_dry"]; lalu echo "$ java_cmd" $ run_java_opts -cp "" $ run_java_cp "" $ {new_args [@]} "fi # run java variabel userder Userdene if [-z" $ run_java_dry "; $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" "" "" "" "" "" "" "" "" "" "" "$ {new_args [@]}" fielse # tampilan perintah java penuh. if [ - - n "$ run_java_debug"] || run_java_dry "]; lalu" $ java_cmd "$ run_java_opts -cp" $ run_java_cp "" $@"fifi