私はc++/ makeのバックグラウンドから来て、中小規模のプログラムをビルドして実行するために次のようなことをすることに慣れています。
make
./foobar
ただし、java / antを使用すると、次のようなことを行う必要があります。
ant
java -ea -cp build/ foobar
java -ea -cp build/ foobar
プログラムをテストするたびに入力するのはかなり面倒です。むしろ、のような単純なことを実行できるようにしたいと思い./foobar
ます。
私はこの問題に対して2つの可能な解決策を考え出しましたが、どちらも非常に良いようには見えません。1つ目は、compile
ターゲットに次のファイルを作成させることですrun
。
#!/bin/bash
java -ea -cp build/ foobar
そして./run
、プログラムを実行するために使用しますが、これはantのクロスプラットフォームの性質に反しているようであり、ちょっとしたハックのようにも思えます。
2番目のオプションは、run
ターゲットを作成することです。次に例を示します。
<target name="run" depends="compile">
<java classname="foobar" fork="true">
<classpath>
<pathelement path="${build}"/>
<pathelement path="${java.class.path}"/>
</classpath>
<assertions>
<enable/>
</assertions>
</java>
</target>
この方法も機能し、少しきれいに見えますが、信じられないほど遅いです!例えば:
$ time ant run
Buildfile: /somepath/build.xml
init:
compile:
run:
[java] /* program output */
BUILD SUCCESSFUL
Total time: 1 second
real 0m2.683s
user 0m2.548s
sys 0m0.136s
上記はこれよりもほぼ20倍遅い(!):
$ time ./run
/* program output */
real 0m0.143s
user 0m0.124s
sys 0m0.020s
それで、コマンドラインから中小規模のJavaプログラムを実行するためのより良い/より標準的な方法はありますか?それとも、ここに投稿した方法の1つを使用する必要がありますか?