我有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程序呢?还是我应该使用我在这里发布的方法之一?
<control>-r foob<return>
应该可以将我带到那里。我承认这对实际用户没有帮助。 - Tom Andersonrun
任务来运行程序,以及一个installApp
任务,用于创建特定于平台的启动脚本。可能也有Ant的等效物。 - Tom Anderson<control>-r
技巧对我来说是新的,所以谢谢你 :) - Gordon Bailey