我正在用 Kotlin (Java) 创建一个 CLI 程序。我想将主函数/类绑定(bind)到单个命令,例如 program
.
但是,从我在网上搜索的内容来看,运行 Java 程序的唯一方法似乎是使用命令 java
。 .例如,java -jar program.jar args
, 或 java -cp "..." Program args
.但是用户每次打字都很不方便,我用BFG的时候就遇到过这种情况,一个用 Java 编写的命令行存储库清理工具。
我可以使用别名,但是当用户安装我的 CLI 程序时,没有标准的方法可以向系统添加别名。比如大部分人都用Bash,所以我得把别名设置为.bashrc
或 .profile
,但其他人可能会使用 zsh
或 csh
, 不是 .profile
.
我也可以用 native 程序包装它,但我需要用 native 语言编写它只是为了重定向命令,我不妨用那种语言重写整个东西。
在 Node.js 中,开发人员可以简单地在他们的 package.json
中指定他们的命令。以及通过 npm i -g
安装此软件包的所有人可以使用命令。 JVM 语言中最简单的替代方法是什么?
最佳答案
如果我是你,我会按照以下方式组织事情:
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
中创建符号链接(symbolic link)。或 /usr/local/bin
.如果您打算发布多个版本的代码,那么值得一看的是:modules .
你可以在这里阅读它们:https://www.owsiak.org/modules-as-a-convenient-way-of-choosing-build-chain-on-macos/
sample 目标
macOS
但会为 Linux
也是。
关于java - 为 Java 程序分配自己的命令的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62759694/