Java 无法使用Picocli进行编译
我是一名学生 我很想在我的项目中使用Picocli,不幸的是我不知道如何使用Picocli编译 我试图按照此处或此处给出的说明进行操作,但编译步骤并不详细。我没有使用Gradle或Maven,但它们并没有按要求列出 这就是它如何编译picocli.info网页中给出的校验和示例:Java 无法使用Picocli进行编译,java,picocli,Java,Picocli,我是一名学生 我很想在我的项目中使用Picocli,不幸的是我不知道如何使用Picocli编译 我试图按照此处或此处给出的说明进行操作,但编译步骤并不详细。我没有使用Gradle或Maven,但它们并没有按要求列出 这就是它如何编译picocli.info网页中给出的校验和示例: jar cf checksum.jar Checksum.java ; jar cf picocli-4.6.1.jar CommandLine.java && echo "hello&quo
jar cf checksum.jar Checksum.java ; jar cf picocli-4.6.1.jar CommandLine.java && echo "hello" > 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
源文件的jar文件(jar文件非常类似于zip文件)
您要做的是首先编译源代码。之后,我们可以将生成的Checksum.class
文件(注意.class
扩展名而不是.java
扩展名)放入Checksum.jar中。JavaSDK包括可用于编译源代码的javac
工具。具体步骤如下
首先,打开一个终端窗口,导航到一个包含Checksum.java
源文件和picocli-4.6.1.jar
库的目录
现在,要编译的命令(在Windows上)是:
Linux使用:
作为路径分隔符,而不是代码>,因此在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
您可以通过在紧跟类名之后的命令行上传递参数,将参数传递给校验和
程序:
java -cp .:picocli-4.6.1.jar Checksum --algorithm=SHA-1 /path/to/hello
当项目增长时,您可能希望将源代码和编译的类文件保存在单独的目录中。javac
compile实用程序有一个-d
选项,您可以在其中指定已编译类文件的目标。例如:
javac -cp picocli-4.6.1.jar:otherlib.jar -d /destination/path /path/to/source/*.java
jar -cvf MyJar.jar /destination/path/*.class /destination/path2/*.class
这将为指定目标目录中的指定源文件生成.class
文件(在上面的示例中为/destination/path
)
当您有许多类文件时,您可能希望将它们捆绑在一个jar文件中。您可以使用jar
命令进行此操作。在为编译的类文件创建jar时,我经常使用选项-v
(verbose)-c
(create)-f
(jar文件名)。例如:
javac -cp picocli-4.6.1.jar:otherlib.jar -d /destination/path /path/to/source/*.java
jar -cvf MyJar.jar /destination/path/*.class /destination/path2/*.class
享受吧 我认为您应该为CheckSum
提供完全限定的名称,比如com.foo.bar.CheckSum
-您是否指定了校验和所在的包?哇,非常感谢!你的产品看起来真的很好,所以我很沮丧不能使用它。同时感谢您提供有关.jar文件的信息,非常有帮助!:)别担心!享受吧!