3

来自 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 程序?还是我应该只使用我在这里发布的一种方法?

4

1 回答 1

3

在我看来,您想在开发阶段构建/运行。

如果是这样,那就弄个Eclipse,用它来调试/运行,这是java下最有效的开发方式。

通常:

  • Ant用于打包阶段

  • shell 用于运行程序,每个环境(Linux/Windows/Mac OS)编写一个

于 2012-09-03T17:57:12.820 回答