无法使用 Picocli 编译

Unable to compile using Picocli

我是一名开发学生 我很想在我的项目中使用 Picocli,不幸的是我不明白如何使用 Picocli 进行编译 我尝试按照此处给出的说明进行操作 https://picocli.info/ or here https://picocli.info/quick-guide.html 但编译步骤并不详细。我既没有使用 Gradle 也没有使用 Maven,但它们并没有真正按要求列出。

这就是它试图编译 picocli.info 网页中给出的校验和示例的方式:

jar cf checksum.jar Checksum.java ; jar cf picocli-4.6.1.jar CommandLine.java && echo "hello" >  hello

然后我简单地复制粘贴这个给定的命令:https://picocli.info/#_running_the_application

java -cp "picocli-4.6.1.jar:checksum.jar" CheckSum --algorithm SHA-1 hello

并得到以下结果:

Error: Could not find or load main class CheckSum
Caused by: java.lang.ClassNotFoundException: CheckSum

我尝试自己编译所有内容,然后像这样添加 .jar :

java CheckSum -jar picocli-4.6.1.jar

但是错误输出如下所示:

Exception in thread "main" java.lang.NoClassDefFoundError: picocli/CommandLine
at CheckSum.main(Checksum.java:33)
Caused by: java.lang.ClassNotFoundException: picocli.CommandLine
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more

加了依赖没看懂

我错过了什么?

提前致谢

问题是命令jar cf checksum.jar Checksum.java只创建一个包含Checksum.java 源文件[=79=的jar文件(jar文件与zip文件非常相似) ].

您要做的是先编译 源代码。之后,我们可以将生成的 Checksum.class 文件(注意 .class 扩展名而不是 .java 扩展名)放入 checksum.jar 中。 Java SDK 包含可用于编译源代码的javac 工具。详细步骤如下。

首先,打开终端 window 并导航到包含 Checksum.java 源文件和 picocli-4.6.1.jar 库的目录。

现在,编译命令(在 Windows 上)是:

javac -cp .;picocli-4.6.1.jar Checksum.java

Linux使用:作为路径分隔符,而不是;,所以Linux,编译命令为:

javac -cp .:picocli-4.6.1.jar Checksum.java

The -cp option allows you to specify the classpath, which should contain the directories and jar/zip files containing any other class files that your project uses/depends on. Since Checksum.java uses the picocli classes, we put the picocli jar in the classpath. Also add the current directory . to the classpath when the current directory contains any classes. I just add . habitually now.

现在,如果您列出当前目录中的文件,您应该会看到在该目录中创建了一个文件 Checksum.class

我们的 Checksum class 有一个 main 方法,所以我们现在可以 运行 使用 java 工具的程序:

在 Windows:

java -cp .;picocli-4.6.1.jar Checksum

在 Linux:

java -cp .:picocli-4.6.1.jar Checksum

Note that when running the program with java you specify the class name Checksum, not the file name Checksum.class.

您可以将参数传递给 Checksum 程序,方法是在紧跟在 class 名称之后的命令行中传递参数:

java -cp .:picocli-4.6.1.jar Checksum --algorithm=SHA-1 /path/to/hello

当您的项目增长时,您可能希望将源代码和编译的 class 文件保存在不同的目录中。 javac 编译实用程序有一个 -d 选项,您可以在其中指定已编译的 class 文件的目标。例如:

javac -cp picocli-4.6.1.jar:otherlib.jar -d /destination/path /path/to/source/*.java 

这应该为指定目标目录中的指定源文件生成 .class 个文件(上例中的 /destination/path)。

当您有许多 class 文件时,您可能希望将它们捆绑在一个 jar 文件中。您可以为此使用 jar 命令。在为已编译的 class 文件创建 jar 时,我经常使用选项 -v(详细)-c(创建)-f(jar 文件名)。例如:

jar -cvf MyJar.jar /destination/path/*.class /destination/path2/*.class

尽情享受吧!