Java 链接外部jar文件时出现问题,尽管进行了多次尝试

Java 链接外部jar文件时出现问题,尽管进行了多次尝试,java,error-handling,jar,manifest,javac,Java,Error Handling,Jar,Manifest,Javac,所以我很确定在问这个问题之前我已经尽力了,现在开始。 我正在为RC4加密编写一个Java类,我想利用GoogleGuava中的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[

所以我很确定在问这个问题之前我已经尽力了,现在开始。 我正在为RC4加密编写一个Java类,我想利用GoogleGuava中的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以确保它不是一个jar,在一个jar中,在一个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还是一个新手,所以如果我缺少一些重要的显然是基本的必需品,我真诚地为我的疏忽道歉,但如果有人能在这方面给我一些帮助,我将非常感谢。

编译不会将引用库打包到您的jar中。您必须要么提取库,要么在运行时插入jar文件或传入guava类路径。

要测试代码是否实际工作,可以尝试手动指定类路径:

java -cp yourProject.jar:/path/to/guava-10.0.1.jar rc4

注意,您需要在类路径上同时指定项目和LIB,否则将找不到来自项目JAR的代码> RC4<代码>(作为旁白:考虑在项目中使用包)。 然后,如果这样做有效,那么是时候检查您的JAR清单了:

  • 它是否位于名为META-INF的JAR文件内的目录中
  • 它叫MANIFEST.MF吗
  • 类路径
    是否包含您的类路径、大小写是否正确等等?请注意,您的属性称为
    类路径

  • 我想留下我自己的答案,但我不确定要补充什么。它总结了这个问题。关于问题的标题,Java中没有“链接”。它都是运行时参考。嘿,谢谢你的回答。所以,还是以不同的模式,因此我使用了“链接”但是当我用javac编译的时候不是这样的:我认为这是另一张海报所建议的,但是你更清楚一点。谢谢你们两位。是的,我终于可以检查了,它确实运行了!我会重新检查我的舱单。编辑:是的,我确实有一个小写字母“p”,它是这样写的。我被困在一个奇怪的无限循环中,但它在运行。我现在感到非常失明,但非常感谢你抽出时间。