将包添加到类路径时出现包不存在错误

Posted

技术标签:

【中文标题】将包添加到类路径时出现包不存在错误【英文标题】:Package does not exist error when package was added to classpath 【发布时间】:2016-01-27 06:57:26 【问题描述】:

注意,链接的解决方案(例如Fatal Error: Unable to find package java.lang in classpath or bootclasspath)不起作用。

我收到此错误,但已导入包(commons....jar)

org.apache.commons.lang3.tuple //does not exist import
org.apache.commons.lang3.tuple.MutableTriple

源代码

import org.apache.commons.lang3.tuple.MutableTriple;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;

构建代码:

出口 JAVA_HOME=/库/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/javac -target 1.8 -source 1.8 -classpath \"../lib/commons-lang3-3.4.jar;../lib/httpclient-4.5.jar;../lib/httpcore-4.4.1.jar;../ lib/org.json-20120521.jar;../lib/pdfbox-app-2.0.0-20150606.170503-1383.jar;../src/:../lib/commons-lang3-3.4-javadoc.jar; ../lib/pdfbox-app-2.0.0-20150606.170503-1383-sources.jar" \ -d 输出 \ ../src/com/tymaf/pdf/*.java

如何解决这个问题?

【问题讨论】:

能否正确格式化您的问题?为什么 -classpath 和命令的其余部分之间有反斜杠?为什么在类路径周围有引号?您从哪个目录执行该命令,目录布局是什么? 您如何将外部库导入您的项目?你做了什么过程。你的问题很模糊,所以请说清楚。 格式化“构建代码”会很有帮助。这似乎是按顺序排列的多个命令,并且许多 `\` 可能是行连接符,可以在此处删除以提高可读性。 @user1122069 “从技术上讲,我是从另一个答案中得到的。”这表明我关心你的问题并花一些时间给你解决它的漏洞图。但您似乎不欣赏这一点;) 【参考方案1】:

仔细检查您的类路径。看起来你混合了分隔符 ;:

也不要将jar 包含在已编译的类(库本身)中。您在类路径中包含了无用的 java-docssources

../src/:
../lib/commons-lang3-3.4-javadoc.jar;
../lib/pdfbox-app-2.0.0-20150606.170503-1383-sources.jar

【讨论】:

【参考方案2】:

这是我的建议

.jar扩展如何编译使用

.jar 扩展可以根据您的环境和 IDE 以不同方式导入。

这里是如何从控制台作为本机模式工作的。

    从 http://www.java2s.com/Code/Jar/c/Downloadcommonslang333jar.htm 下载 .jar.zip

    在您的工作(项目)目录中创建一个文件夹,命名为libs

    解压下载的文件并将commons-lang3-3.3.jar复制到你的工作目录libs

    我还创建了一个仅用于测试的类,将其命名为 TheNewWork.java 并添加了 3 个导入。

    现在从您的工作目录c:\projects 进行编译:

    javac -classpath "/Projects/libs/commons-lang3-3.3.jar;" TheNewWork.java

    运行它:

    java -classpath "/Projects/libs/commons-lang3-3.3.jar;" TheNewWork

如果您有多个.jar,只需添加;(适用于Windows)和:(适用于Linux)。顺便说一句,我使用 Windows 10 cmder 控制台和 java jdk1.8.0_66。在其他操作系统控制台中,您可能需要使用.:Projects...etc 而不是/Projects...etc。但想法是一样的。

更新 在windows中可以设置类路径

set CLASSPATH=%CLASSPATH%;C:\Projects\libs\commons-lang3-3.3.jar

Linux 中的或

export CLASSPATH=".:/Projects/libs/commons-lang3-3.3.jar"

然后您可以运行javac TheNewWork.java,但以这种或其他方式执行它是个人喜好。在其他操作系统中也可以做一些类似的事情。

最后一件事,如果您懒惰并且既不想编写完整的命令行也不想创建类路径,您可以使用完整的命令行创建一个批处理文件并以这种方式运行它;)

一些参考资料:

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html https://www.chilkatsoft.com/java-classpath-Windows.asp

希望能解决你的问题

解决之前

解决后


注意 另外感谢@MarkPeters 在我之前的回答中通知了我:将应用程序依赖项直接添加到 JRE 库不是一个好方法,因为它使 JRE 只适合运行一个 Java 应用程序,而不是一个通用的运行时。此外,它会使 OP 想要执行的任何部署变得复杂。 lib/ext 用于扩展核心 Java API,如下所述:docs.oracle.com/javase/tutorial/ext/basics/install.html。不适用于正常的应用程序依赖项。

【讨论】:

以上是关于将包添加到类路径时出现包不存在错误的主要内容,如果未能解决你的问题,请参考以下文章

Java 包不存在错误

idea编译时出现错误:xx包不存在,但是代码里面不报错

idea编译时出现错误:xx包不存在,但是代码里面不报错

gradle 添加jar依赖,执行grade build时出现“程序包不存在”问题

java 提示包不存在

将 spring-cloud-sleuth 添加到类路径时出现“上下文初始化”错误