如何在命令行中运行小/中型Java程序?

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


我通常会手写命令,然后依靠我的 shell 历史记录再次运行它。 <control>-r foob<return> 应该可以将我带到那里。我承认这对实际用户没有帮助。 - Tom Anderson
如果你想快速运行一个程序,我建议从集成开发环境(IDE)中运行。这样可以让你在输入时看到编译器错误,并且只需点击一个按钮即可进行“运行”或“调试”。 - Peter Lawrey
我不是Ant专家,但Gradle有一个应用程序插件,它提供了一个run任务来运行程序,以及一个installApp任务,用于创建特定于平台的启动脚本。可能也有Ant的等效物。 - Tom Anderson
@TomAnderson 这基本上是我迄今为止一直在做的,尽管我必须承认<control>-r技巧对我来说是新的,所以谢谢你 :) - Gordon Bailey
@PeterLawrey 好吧,我想这也说得过去 - 我主要使用命令行,因为我发现这是更好的学习和理解构建过程的方式,所以我暂时远离IDE。 - Gordon Bailey
@GordonBailey 命令行会让你吃尽苦头。一旦你学会了使用像Maven这样的构建系统和一个好的IDE,你就不想再回去用命令行了。 ;) - Peter Lawrey
1个回答

3

我觉得你想在开发阶段构建/运行。

如果是这样,那么获取Eclipse并使用它进行调试/运行,这是在Java下开发的最有效的方式。

通常情况下:

  • Ant用于打包阶段

  • shell用于运行程序,您需要针对每个环境(Linux / Windows / Mac OS)编写一个shell脚本


看起来这可能是正确的答案。我主要使用命令行学习Java编译过程,我猜除了我在问题中提出的方法外,没有更简洁的运行程序的方式了。如果接下来几个小时内没有其他答案,我会接受这个答案的。 - Gordon Bailey
为不同的操作系统提供不同的shell脚本是一种常见的方法。您还可以将这些shell脚本的生成作为ant构建文件的一部分。 - Dante WWWW
@GordonBailey 已经过去了几个小时 :-) - UBIK LOAD PACK
@PMDUBIK-INGENIERIE 现在已经过了几天 - 是我的错! - Gordon Bailey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接