给Java程序分配自己的命令的最简单方法是什么?

我正在用Kotlin(Java)创建一个CLI程序。我想将主要功能/类绑定到单个命令,例如program

但是,从我在网上搜索的内容来看,似乎运行Java程序的唯一方法是使用命令java。例如,java -jar program.jar argsjava -cp "..." Program args。但是它们给用户每次输入带来了很大的不便,这是我使用BFG(一种用Java编写的命令行存储库清理工具)时遇到的。

我可以使用别名,但是当用户安装我的CLI程序时,没有标准的方法向系统添加别名。例如,大多数人使用Bash,因此我必须将别名安装到.bashrc.profile,但是其他人可能使用zshcsh,而不会读{ {1}}。

我也可以用本机程序包装它,但是我需要用本机语言编写它,只是为了重定向命令,我也可能只是用该语言重写整个内容。

在Node.js中,开发人员只需在.profile中指定其命令,并且通过package.json安装此软件包的每个人都可以使用该命令。 JVM语言中最简单的替代方法是什么?

iCMS 回答:给Java程序分配自己的命令的最简单方法是什么?

如果我是你,我会按照以下方式组织事情:

your_app
|-- Hello.java
|-- bin
|   `-- hello.sh
`-- lib
    `-- hello.jar

Hello.java内有一个简单的代码:

public class Hello {
  public static void main(String [] arg) {
    if(arg.length > 0) {
      System.out.println("Hello: " + arg[0]);
    }
  }
}

,您可以这样构建它:

> javac Hello.java
> jar cf lib/hello.jar Hello.class

请注意,为简单起见,我这样做很丑陋。您绝对应该看一下名为Manifest-https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

的东西

然后,在hello.sh中,您可以输入类似以下内容:

#!/bin/bash

export HELLO_LOCATION=${HELLO_LOCATION:-$(cd $(dirname $0)/.. ; pwd)

java -cp $HELLO_LOCATION/lib/hello.jar Hello $*

一切就绪后,您可以随意将your_app放在文件系统中的任何位置。您要做的(使其可见)是将hello.sh放在PATH上。所以,你告诉人们去做:

export PATH=${SOME_LOCATION}/your_app/bin:${PATH}

从现在开始,每个人都可以做:

> hello.sh hello
Hello: hello

您也可以(为方便起见)在/usr/bin/usr/local/bin内创建符号链接。

如果您打算发布多个版本的代码,则值得一看的名称为:modules

您可以在这里阅读有关它们的信息:https://www.owsiak.org/modules-as-a-convenient-way-of-choosing-build-chain-on-macos/

样本目标为macOS,但同样也适用于Linux

本文链接:https://www.f2er.com/1989940.html

大家都在问