无法使用 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
尽情享受吧!
我是一名开发学生 我很想在我的项目中使用 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. SinceChecksum.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 nameChecksum
, not the file nameChecksum.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
尽情享受吧!