【问题标题】:Compile and build with single command line Java (Linux)使用单个命令行 Java (Linux) 编译和构建
【发布时间】:2014-11-07 16:05:14
【问题描述】:

有没有办法以这样的方式设置别名,以便我可以输入命令,然后在一行中输入参数?

例如,而不是

javac Program.java && java Program

我可以去

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

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

【问题讨论】:

标签: java linux command-line alias


【解决方案1】:

alias 不接受参数,定义这样的函数:

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

然后使用它:

jcar Program

jcar 是 java-compile-and-run 的首字母缩写词)

【讨论】:

  • 函数在哪里定义?在 .bashrc 中?编辑:是的,就是这样。我想到了。我很感激!
  • 添加一个分号,如果你只想在命令行中定义它,写jcar() { javac $1.java && java $1 ; },而不是.bashrc或类似的。
  • 对我来说,如果没有分号,它根本不起作用,这是一个语法错误。
【解决方案2】:

我打算给你一个 Makefile 来回答你,但它不够通用。每当你想编译一个更复杂的程序(比如说 2 个文件)时,你也需要编译第二个。它可能在一个包中,在这种情况下,您所要求的不再起作用。如果您必须处理库,也是如此。

出于所有这些原因,我强烈建议您选择您选择的建筑实用程序,makesconsant,让我们提一下maven。对于小型项目,我发现后一种方式变得复杂。但是ant 是我最好的 java 程序候选人。最后,您只需 ant run 即可运行您的程序并在需要时重新编译它。用蚂蚁来看看hello world tutorial

【讨论】:

    【解决方案3】:

    除了 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
    }
    

    【讨论】:

    • 这更像是一个“jcarar” -> java-compile-and-run-and-remove
    【解决方案4】:

    加上enrico.bacis'和notcompletelyrational的回答,如何在一个包下运行并清理包编译文件:

    jcar() { javac -d . $1.java && java ${PWD##*/}.$1 && rm -rf ${PWD##*/}/ }

    顺便说一下,这个函数应该分别添加到 Mac OS 的 ~/.bash_profile 和 Linux 的 ~/.bashrc 中。

    运行它:

    jcar ProgramName
    

    【讨论】:

      【解决方案5】:

      我喜欢将完整的 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
      }
      

      【讨论】:

        【解决方案6】:

        我最喜欢的解决方案如下所示:

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

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

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

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

        【讨论】:

          【解决方案7】:

          从 Java 11 开始,您可以使用单个命令

          java example.java
          

          https://openjdk.java.net/jeps/330

          链接:How to compile and run in single command in java

          【讨论】:

            猜你喜欢
            • 2023-03-29
            • 2017-10-14
            • 2011-01-27
            • 2015-08-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-14
            • 2013-09-25
            相关资源
            最近更新 更多