所以我很确定在问这个问题之前我的表现一如既往,所以这里就是这样。 我正在编写一个用于RC4加密的Java类,我想利用Google Guava中的Files类。我正在使用Ubuntu命令行上的javac进行编译。我试图将jar文件guava-10.0.1.jar链接到我的班级,但没有成功。
这是从顶部开始的片段:
import java.util.*;
import java.io.*;
import com.google.common.io.*;
class rc4 {
private static int S[] = new int[256];
private static int kLen;
public static void main(String[] args) {
...
特定于我调用的行如下所示,完全在try块中:
byte plain[] = Files.toByteArray(file);
然后我用这个编译:
$ javac -cp FULL/FILE/PATH/guava-10.0.1.jar rc4.java
它编译,但当我尝试使用我定义的选项来运行java rc4来访问该函数时,我收到错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/io/Files
at rc4.main(rc4.java:58)
Caused by: java.lang.ClassNotFoundException: com.google.common.io.Files
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 1 more
我尝试了几个不同的调用,并检查了jar以确保它不是罐子,罐子里,罐子里等等。然后我尝试使用清单文件:
Manifest-Version: 1.0
Created-By: me
Main-Class: rc4
Class-path: /FULL/FILE/PATH/guava-10.0.1.jar
然后创建一个jar:
jar cvf0m rc4.jar manifest.txt rc4.class
然后运行:
java -jar rc4.jar
我得到了与上面相同的错误,但是它说“rc4”无法找到。 所以,我有点迷失于我所缺少的东西。我仍然对Java很新鲜,所以如果我错过了一些非常明显的基本必要性,我真诚地为疏忽道歉,但如果有人能在这方面给我一些帮助,我会非常感激。
答案 0 :(得分:1)
编译不会将引用的库打包到jar中。您必须将库提取到jar文件中,或者在运行时传入guava类路径。
答案 1 :(得分:0)
要测试您的代码是否真正有效,您可以尝试手动指定类路径:
java -cp yourProject.jar:/path/to/guava-10.0.1.jar rc4
请注意,您需要在类路径上指定两个项目和lib,或者来自项目JAR的rc4
将无法找到! (顺便说一句:考虑在项目中使用包。)
然后,如果可行的话,是时候检查你的JAR清单了:
Class-Path
是否包含您的类路径,具有适当的大小写等等?请注意,您的属性改为Class-path
。)