我是一个开发学生,我很想在我的项目中使用Picocli,不幸的是,我不知道如何使用Picocli编译,我试着按照这里给出的https://picocli.info/或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女巫,我不明白,因为我增加了依赖性。
我错过了什么?
提前感谢
发布于 2021-01-26 01:19:55
问题是,命令jar cf checksum.jar Checksum.java只创建包含Checksum.java源文件的jar文件(jar文件与zip文件非常相似)。
相反,您要做的是首先编译源代码。之后,我们可以将生成的Checksum.class文件(注意.class扩展名而不是.java扩展名)放到checksum.jar中。Java包括可用于编译源代码的javac工具。详细步骤如下。
首先,打开一个终端窗口并导航到一个同时包含Checksum.java源文件和picocli-4.6.1.jar库的目录。
现在,要编译的命令(在Windows上)是:
javac -cp .;picocli-4.6.1.jar Checksum.javaLinux使用:作为路径分隔符,而不是;,因此在Linux上,要编译的命令是:
javac -cp .:picocli-4.6.1.jar Checksum.java
-cp选项允许您指定类路径,它应该包含目录和jar/zip文件,其中包含项目使用/依赖的任何其他类文件。由于Checksum.java使用picocli类,所以我们将picocli jar放在类路径中。当当前目录包含任何类时,还将当前目录.添加到类路径。我现在只是习惯性地添加.。
现在,如果您列出当前目录中的文件,您应该会看到在这个目录中已经创建了一个文件Checksum.class。
我们的Checksum类有一个main方法,所以现在我们可以使用java工具运行程序:
在Windows上:
java -cp .;picocli-4.6.1.jar Checksum在Linux上:
java -cp .:picocli-4.6.1.jar Checksum注意,在使用
java运行程序时,您指定的是类名Checksum,而不是文件名Checksum.class。
您可以将参数传递给Checksum程序,方法是在紧接类名之后的命令行上传递它们:
java -cp .:picocli-4.6.1.jar Checksum --algorithm=SHA-1 /path/to/hello当项目增长时,您可能希望将源代码和已编译的类文件保存在单独的目录中。javac编译实用程序有一个-d选项,您可以在该选项中为已编译的类文件指定目的地。例如:
javac -cp picocli-4.6.1.jar:otherlib.jar -d /destination/path /path/to/source/*.java 这将为指定目标目录中的指定源文件生成.class文件(在上面的示例中为/destination/path)。
当您有许多类文件时,您可能希望将它们捆绑在一个jar文件中。为此,您可以使用jar命令。在为已编译的类文件创建jar时,我经常使用选项-v (详细) -c (create) -f (jar文件名)。例如:
jar -cvf MyJar.jar /destination/path/*.class /destination/path2/*.class享受吧!
https://stackoverflow.com/questions/65894401
复制相似问题