从jar运行项目时,会发生java.lang.Noclassdeffounderror。
例如: 1级包含主要方法:
包p;
导入p1.MyClass1;
导入p2.MyClass2;
公共类TestClass {
public int i;
public Object obj; //Line 5
public void aMethod(){
// Object obj = null; //第7行
if(i==0){
obj=new MyClass1();
System.out.println("if block: p1.MyClass1");
}else{
obj=new MyClass2();
System.out.println("else block: p2.MyClass2");
}
}
public static void main(String [] args){
TestClass t=new TestClass();
t.aMethod();
}
}
2:p1包的MyClass1:
包p1;
公共类MyClass1 {
public MyClass1() {}
}
3- p2包的MyClass2:
包p2;
公共类MyClass2 {
public MyClass2() {}
}
在上面的示例中,3个类是TestClass,MyClass1和MyClass2。 当我在构建之后运行上面的项目(TestClass是我的项目的主类)时使用jar并手动删除p2包它运行正常。 但是在TestClass中对于全局变量public Object obj(第5行)进行注释并在TestClass的方法aMethod(第7行)中删除注释局部变量Object obj之后。 然后我在手动删除p2包之后从jar构建并运行项目,控制台在线程“main”中显示异常java.lang.NoClassDefFoundError:p2 / MyClass2
at run time no need of p2 package but making the variable "obj" in class TestClass
到全局到本地(在方法aMethod()中)发生异常。 请解答我的问题,为什么会出错。