首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException,但是类在类路径上,在同一个jar中

ClassNotFoundException,但是类在类路径上,在同一个jar中
EN

Stack Overflow用户
提问于 2013-05-23 14:37:51
回答 1查看 1.6K关注 0票数 2

问题

是什么导致了ClassNotFoundException

详细信息

在尝试加载我认为在类路径上的类时,我得到了一个ClassNotFoundException --类是com.ldbc.driver.db.BasicDbcom.ldbc.driver.db.Db的一个实现

当我尝试运行这个命令时:

代码语言:javascript
复制
java -cp core/target/core-0.1.jar:distribution/target/ldbc-driver-0.1.tar.gz com.ldbc.driver.Client -db com.ldbc.driver.db.BasicDb

我知道错误:

代码语言:javascript
复制
java.lang.ClassNotFoundException: com.ldbc.driver.db.BasicDb
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at com.ldbc.driver.util.ClassLoaderHelper.loadClass(ClassLoaderHelper.java:163)
    at com.ldbc.driver.util.ClassLoaderHelper.loadDb(ClassLoaderHelper.java:29)
    at com.ldbc.driver.Client.start(Client.java:167)
    at com.ldbc.driver.Client.main(Client.java:80)

它发生在这一行上:

代码语言:javascript
复制
Class<?> loadedClass = classLoader.loadClass( className );

为了检查类是否在类路径上(在我的一个罐子中),我执行了以下操作:

代码语言:javascript
复制
grep "BasicDb" distribution/target/ldbc-driver-0.1.tar.gz

->返回匹配

代码语言:javascript
复制
grep "BasicDb" core/target/core-0.1.jar

->返回1 match:Binary file core/target/core-0.1.jar matches

如果我在编译时导入类,它可以正常工作,例如:

代码语言:javascript
复制
import com.ldbc.driver.db.basic.BasicDb;

虽然我的grep测试似乎表明类是类路径上的,并且只存在一次,但我想测试是否由于某种原因将不同的类附加到不同的根类加载器。

但是,当打印出来时,似乎在任何地方都使用相同的类加载器:

代码语言:javascript
复制
ClassLoaderHelper classloader = sun.misc.Launcher$AppClassLoader@489a44f1
Client classloader = sun.misc.Launcher$AppClassLoader@489a44f1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-23 14:42:04

com.ldbc.driver.db.BasicDb与导入com.ldbc.driver.db.basic.BasicDb中的内容

您使用错误的BasicDb包名称启动应用程序,作为应用程序参数。

代码语言:javascript
复制
java -cp core/target/core-0.1.jar:distribution/target/ldbc-driver-0.1.tar.gz com.ldbc.driver.Client -db com.ldbc.driver.db.BasicDb
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16716835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档