【问题标题】:reference a class that uses a third-party library in Java在 Java 中引用使用第三方库的类
【发布时间】:2019-12-16 07:23:55
【问题描述】:

我有一个使用从第三方库导入的类

import org.apache.commons.lang3.*;        
public  class test2 {
    public void printing() {
        System.out.println(StringUtils.capitalize("hello test2"));
    }
    public static void main(String[] args) {}
}

我在同一目录中有第二个班级

public class test {
    public static void main(String[] args) {
        System.out.println("hello test1");
        test2 t = new test2();
        t.printing();
    }
}

我尝试过使用这些命令进行编译

cmd> javac -cp "./lib/commons.jar" test.java
cmd> javac test.java

但两者都报错:error: cannot find symbol test2 t = new test2();

如何引用使用第三方库的类

注意:第一类单独编译没有问题。如果我从第一类中删除导入外部 jar,也会编译。外部 jar 文件位于同一目录中的 lib 文件夹中

我使用的 .jar 链接:https://www-us.apache.org/dist//commons/lang/binaries/commons-lang3-3.9-bin.zip

【问题讨论】:

  • error: cannot find symbol 还应该包含有关它无法找到的符号的信息。可以加入吗?
  • 编辑了它的 test2
  • public static class test2{..} 不能是带有static 关键字的顶级类,因此它不会编译,导致找不到该类的字节码。尝试删除 static 关键字。
  • 正确的语法是javac -cp <jar you want to include>;<jar you want to include> <source.java> 例子javac -cp mysql-connector-java-8.0.12.jar; Testing.java参考https://stackoverflow.com/a/52155432/1673458
  • 你能给我参考我的项目的命令吗?我适用于第二个文件的命令是 cmd> javac -cp "./lib/commons.jar" test.java 。这适用于单独编译第一类。能给我二班的cmd吗

标签: java class oop import


【解决方案1】:

以上是我的文件夹结构和编译的类。

我稍微改变了你的 test2.java 文件,这里是更新后的代码

import org.apache.commons.lang3.*;        
public class test2 {
    public void printing() {
        System.out.println(StringUtils.capitalize("hello test2"));
    }
}

这是命令 javac -cp "lib/common-lang3.jar" test2.java 如果这不起作用,请告诉我 甚至javac test.java 也在工作

【讨论】:

  • 我需要编译 test 而不是 test2 。 test2 编译得很好。我也尝试过从 test2 中删除静态仍然是相同的错误,同时编译测试
  • 好的,谢谢。但不明白原因
  • 但新问题是 java 测试现在不起作用,它给出错误:线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at test2.printing(test2. java:5) 在 test.main(test.java:7)
  • 错误:线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at test2.printing(test2.java:5) at test.main(test.java :7)
  • @cpt.John 来自类路径 -cp 的信息不仅在编译代码时需要,而且在运行时也需要(在编译时)编译器使用它来测试每个方法/类型/等是否实际存在,在运行时它需要这个位置来知道在哪里可以找到这些方法的主体/代码)。那么你是如何运行它的,你使用的是什么命令呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多