来自 c++/make 背景,我习惯于做这样的事情来构建和运行中小型程序:
make
./foobar
但是,对于 java/ant,我发现我必须做这样的事情:
ant
java -ea -cp build/ foobar
每次我想测试我的程序时都打字java -ea -cp build/ foobar
很烦人,我宁愿能够做一些简单的事情,比如./foobar
.
我想出了两个可能的解决方案来解决这个问题,但似乎都不是很好。首先是让compile
目标创建一个名为run
:
#!/bin/bash
java -ea -cp build/ foobar
然后就用它./run
来运行程序,但这似乎违背了 ant 的跨平台特性,而且看起来有点像 hack。
第二个选项是创建一个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 程序?还是我应该只使用我在这里发布的一种方法?