多くのJavaプロジェクトでは、プログラムのカスタムパラメーターがJavaコマンドパッケージシェルスクリプトを呼び出すことがよく見られます。例えば、
$ ant_home/bin/ant、$ groovy_home/bin/groovy
、Timemachineスケジューラプログラムでも見ることができます
$ etmachine_home/bin/scheduler.sh
これらのパッケージスクリプトを作ることは退屈で簡単です。ほとんどの問題は、正しいClassPathをプログラムに設定することから生じています。会社の内部プロジェクトを開発している場合、絡み合ったパスと環境変数の問題から離れることがあります。しかし、オープンソースプロジェクトの場合、人々はパッケージをより柔軟で普遍的にする必要があります。 .batバージョンのほとんどが提供されました。 Windows DOSは確かに、プロジェクトスクリプトのニーズを満たすことなく、残忍で制限されたターミナルです。したがって、私はしばしば他の人にCygwiを可能な限り使用することを奨励します。少なくとも本物のバッシュシェルがあります。他の一般的な問題は、これらのパッケージがすぐに制御を失い、プロジェクトの周りに多くの冗長なスクリプトが表示されることです。
Run-Javaパッケージスクリプトの紹介
$ Timemachine_home/bin/scheduler.shのコードが表示されている場合、実際に同じディレクトリのRun-Javaスクリプトと呼ばれていることがわかります。
dir = $(dirname $ 0)scheduler_home = $ dir/run -java -dscheduler.home = "$ scheduler_home" timemachine.tool.tool.dulerserver "" $@"
ご覧のとおり、Run -Javaは-Dオプションを使用できます。それだけでなく、-CPオプションも使用できます。さらに、メインクラスの背後にこれらのオプションを指定できます!これにより、Run-Javaが他のスクリプトによってパッケージ化され、さらにシステム属性とClassPathを追加できます。
たとえば、TimemachineにはGroovyライブラリが付属しているため、このように呼び出すだけです
Groovy:$ Timemachine_home/bin/run-java groovy.groovymain test.groovy、ブランチ全体を再度ダウンロードすることなく。
任意のディレクトリで簡単に使用でき、ディレクトリを確認し、LIBディレクトリにJARパッケージを自動的にロードできます。これで、Groovyを実行するためにJARバッグを追加したい場合は、次のように-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コマンドを出力します。
RunScriptには他の多くのオプションも含まれており、注釈を表示することで理解できます。現在のスクリプトは、Linux BashおよびWindows Cygwinで実行できます。
開発中のMavenを介してRun-Javaを使用します
上記の例によると、プロジェクトのリリース構造が次のとおりであると仮定します。
$ timemachine_home +-bin/run-java +-lib/*
しかし、開発プロセス中のディレクトリは何ですか?一般的なケースは、プロジェクト全体を梱包または公開する代わりに、ターゲット/クラスの下で最新のコンパイルされたコードを実行することです。この場合、Run-Javaを使用することもできます。まず第一に、プロジェクトにbin/run-javaを追加してから実行します
MVNコンパイル依存関係:コピー依存関係
すべてのJARファイルは、ターゲット/依存関係の下で生成されます。これを行う必要があります。 Run-Javaは、これらのディレクトリを自動的に検出し、メインクラスの正しいクラスパスを作成します。
Eclipseを使用して開発すると、ターゲット/クラスディレクトリが常に更新され、Run-Javaがプロジェクト開発の宝物になる可能性があります。
Run-Javaパッケージスクリプトを取得します
#!/usr/bin/env bash ## Copyright 2012 Zemian deng ## apacheライセンス、バージョン2.0(「ライセンス」)に基づいてライセンスされています。ライセンスのコピー## http://www.apache.org/licenses/6license-2.0##適用法で要求されていない場合、または書面で合意されていない限り、ライセンスの下でソフトウェア#は「そのまま」に基づいて配布されます、#明示的または黙示的な保証または条件なし。このスクリプトは、アプリケーションの「ビン」ディレクトリに配置されていると想定されています。 #ファイルシステム内の任意の場所を実行すると、このアプリケーション#ディレクトリを参照します。 「ターゲット/テストクラス」、#「ターゲット/クラス」、および「ターゲット/依存関係」hは、#setting run_java_no_parse = 1。すべてのパスの値は、Cygwin/Unixパスにある必要があります。このスクリプトは、必要な場所でWindowsパスを自動変換します。既存のclassPathにフィックスを投稿する「-cp」オプション:#run-java [java_main_class> [-cp /more /classpath = value] ##例:#run-java example.hello#hello -dname = world#run -java org.junit.runner.junitcore exmple.hellotest -cp "c:/apps/lib/junit4.8.2/" ##作成者:zemian deng 03/ 09/2012#この実行スクリプトd d ir(絶対パスへの解決)script_dir = $(cd $(dirname $ 0)&& pwd) #アプリケーション監督はスクリプト監督から1つのレベルアップであると仮定します#デフォルトパラメータJava_home = $ {java_home:=/apps/jdk}#これはjava開発のホームディレクトリです= $ classpath} $ classpathrun_java_opts = $ {run_java_opts:=}#javaオプション(-xmx512m -xx:maxpermsize = 128m etc)run_java_debug = $ {run_java_debug:=} parse:=}#if空ではない、スクリプト引数から-dおよび-cpオプションの自動解析をスキップします。run_java_no_autocp= $ {run_java_autocp:=}#noto notoの場合、java classpathrun_java_dry = $ {run_java_dry:=} exec java commit、ただし、#var _must_はfacese.cygwin = falseに設定されています。 = javaif [$ java_home "]; #provide windowsディレクトリ変換java_home_win = $(cygpath -aw "$ java_home")app_dir_win = $(cygpath -aw "$ app_dir") /config "; fi if [-d" $ app_dir_win/taget/test -classes "]; then run_java_cp =" $ run_java_cp; class "]; run_java_cp =" $ run_java_cp; "; run_java_cp =" $ run_java_cp; ; -Classes "; fi if [-d" $ app_dir/grasse "]; then run_java_cp =" $ run_java_cp:$ run_java_cp:$ app_dir/target/*" ; [-d "$ app_dir/lib"]; run_java_cpとrun_java_opts#eyは代わりにこのrun-javaスクリプトの終わりに渡すことができます。 idx = 0#すべての引数を解析し、「-cp」と「arg in "$@"; do if [[-n $ fund_cp]]; then ["$ os" = "windows_nt"]; then#を探してください。 Cygpathは「*」を自動的に展開するため、Cygpathを使用できません$ arg)run_java_cp = "$ run_java_cp; p =" $ run_java_cp:$ arg "fiought_cp = else case $ arg in '-cp')found_cp = 1; '-d' *)run_java_opts =" $ run_java_opts $ arg "; *)new_args [$ idx] = "$ arg" idx = $ idx +1; ;その後、「$ java_cmd」$ run_java_opts -cp "" $ run_java_cp "" $ {new_args [@]} "fi#run java main class userd変数-cp "$ run_java_cp" "" "" "" "" "" "" "" "" "" $ {new_args [@]} " ] || [-n "$ run_java_dry"]; "$ java_cmd" $ run_java_opts -cp "$ run_java_cp" "$@" fifi