使用单个命令行编译和构建Java(Linux)

wdebmtf2  于 2023-03-07  发布在  Linux
关注(0)|答案(8)|浏览(121)

有没有办法设置一个别名,这样我就可以输入命令,然后在一行中输入参数?
例如,代替

javac Program.java && java Program

我就能去

newcommand Program.java //or "newcommand Program", whichever is easier

它将执行与上面一行相同的命令。

bhmjp9jg

bhmjp9jg1#

alias不能接受参数,定义一个函数如下:

jcar() { javac $1.java && java $1 ; }

那就用它:

jcar Program
  • jcar是java编译和运行的首字母缩写)*
t8e9dugd

t8e9dugd3#

补充一下enrico.bacis的回答,如果我只是测试一个程序,我个人不喜欢让Program.class文件塞满我的工作空间,所以我会
jcar() { javac $1.java && java $1 && rm $1.class}
此外,我发现捕获ctrl-c很有帮助,这样即使我中途结束程序,它仍然会删除.class

jcar() {
trap "rm $1.class" SIGINT SIGTERM
javac $1.java
java $1
rm $1.class
}
6kkfgxo0

6kkfgxo04#

我喜欢将完整的Program.java文件名作为输入参数传递,这样可以方便地自动完成。
下面是notcompletelyrational脚本的编辑版本,它需要jcar Program.java这样的命令,而不是jcar Program

jcar() {
  f=$1
  f2=${f%.*}
  trap "rm $f2.class" SIGINT SIGTERM
  javac $1
  java $f2
  rm $f2.class
}
2admgd59

2admgd595#

我最喜欢的解决方案是这样的:

function jcar { javac ${1%.*}.java && java ${1%.*}; }

它可以处理各种输入,例如

jcar myfile
jcar myfile.
jcar myfile.java
jcar myfile.class

它可以让你更快地使用Tab键:)

mw3dktmi

mw3dktmi6#

我本打算给你一个Makefile的片段来回答你,但是它不够通用。无论何时你想编译一个更复杂的程序(比如说2个文件),你都需要编译第二个文件。它可能在一个包中,在这种情况下,你所要求的不再有效。如果你必须处理库,情况也是如此。
由于所有这些原因,我强烈建议您选择一个构建实用程序,makesconsant,让我们提一下maven,对于小项目,我发现后面的方法会变得复杂,但是对于java程序,ant是我最好的候选者,最后,您可以只使用ant run,它将运行您的程序,并在需要时重新编译它。请查看带有ant的hello world tutorial

nqwrtyyt

nqwrtyyt7#

除了enrico.bacis和notcompletelyrational的答案,如何在一个包下运行它并清理包编译的文件:
jcar() { javac -d . $1.java && java ${PWD##*/}.$1 && rm -rf ${PWD##*/}/ }
顺便说一下,这个函数应该分别添加到Mac OS的~/.bash_profile和Linux的~/.bashrc中。
要运行它:

jcar ProgramName
xxls0lw8

xxls0lw88#

如果你想在一个命令中编译和运行你的Java程序,试试这个:

javac Driver.java ; java Driver

其中您的文件名为Driver.java
这将编译程序,然后按顺序执行它。

相关问题