Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用Picocli进行编译_Java_Picocli - Fatal编程技术网

Java 无法使用Picocli进行编译

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

我是一名学生 我很想在我的项目中使用Picocli,不幸的是我不知道如何使用Picocli编译 我试图按照此处或此处给出的说明进行操作,但编译步骤并不详细。我没有使用Gradle或Maven,但它们并没有按要求列出

这就是它如何编译picocli.info网页中给出的校验和示例:

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文件的信息,非常有帮助!:)别担心!享受吧!