首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从子文件夹导入包:线程“主”java.lang.NoClassDefFoundError中的异常

从子文件夹导入包:线程“主”java.lang.NoClassDefFoundError中的异常
EN

Stack Overflow用户
提问于 2016-03-28 12:33:42
回答 2查看 258关注 0票数 0

我有这样的目录结构:

代码语言:javascript
复制
src
  MyPackageFile1.java
  MyPackageFile2.java
vendor
  something.jar
Example.java

注意,src下的所有文件都有一个package com.example;声明,而Example.java不属于该包:这是使用该包的一个例子(所以它有import xyz.pushpad.*;)。

我成功地编译了:

代码语言:javascript
复制
javac -classpath vendor/something.jar src/*.java Example.java 

然而,当我跑步时:

代码语言:javascript
复制
java Example

我得到:

代码语言:javascript
复制
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/DeliveryException
  at java.lang.Class.getDeclaredMethods0(Native Method)
  at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
  at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
  at java.lang.Class.getMethod0(Class.java:3018)
  at java.lang.Class.getMethod(Class.java:1784)
  at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.example.MyPackageFile1
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 7 more
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 12:48:49

如果MyPackageFile1.javaMyPackageFile1.java是在包com.example中声明的,那么有三个问题:

  1. 您的源目录结构错误。应该是这样: src com示例MyPackageFile1.java MyPackageFile2.java
  2. 您使用了错误的类路径分隔符。由于您使用的是Linux (基于路径名语法),类路径分隔符是:而不是;
  3. 用于运行代码的Classpath是错误的。java命令行应该如下所示: java -cp供应商/某样东西:src:.示例

不过,这一切都很烦人。

  • 除非您的代码库需要模块化为多个代码树,否则您应该将示例源代码放到src目录中。 src Example.java com示例MyPackageFile1.javaMyPackageFile2.java
  • 将源代码和编译后的代码放在同一棵树中是个坏主意。一个更好的主意是使用-d选项。 mkdir bin javac -cp bin:-d /omething.jar-d bin src/ Example e.java src/com/ -cp示例/MyPackageFile1.java src/com/-cp/MyPackageFile12java-cp bin:vendor/
  • 你应该用某种工具.如果您希望您的构建是一致的和可复制的。
票数 1
EN

Stack Overflow用户

发布于 2016-03-28 12:37:47

与编译命令类似,run命令还需要类路径上的jar文件。

代码语言:javascript
复制
java -cp vendor/something.jar;src com.example.Example

Example.java移到新目录src/com/something

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36262400

复制
相关文章

相似问题

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