我从一个jar包导入一个类(默认jvm中不存在)并在另一个包中使用它。 就像我在包package1中有一个类program1.class,并且我从包package2中的另一个程序program2导入该类。
package package1;
public class Program1
{
public String sayHello()
{
return "Hello world";
}
}
并在
中导入此类package package2;
import package1.Program1;
public class Program2
{
public static void main(String args[])
{
System.out.println("I am in programme2");
System.out.println("I am in programme 1"+new Program1().sayHello());
}
}
我已经编译了程序1并将其打包 javac -d 。程序1.java jar cf Pack1.jar包1
第二个程序由 javac -d 。程序2.java jar cfm Pack2.jar Manifest.txt package2
我的 list 文件是
Main-Class: package2.Program2
现在我正在运行该程序 java -classpath路径/to/Pack1.jar -jar Pack2.jar
它给我的错误是: 我在计划2 未找到类定义错误 Package1/Program1
如果我通过将类指定为来运行它 java -classpath 路径/to/Pack1.jar;路径/to/Pack2(UnJar'ed) Pack2.program2 它正在工作,这很奇怪
表示指定包含main的class文件和指定程序的jar文件是有区别的。 我已经确保在 Manifest.mf 中正确设置了 Main-Class,而且还指定了 pack2 的类路径 那么为什么会出现这个错误
最佳答案
当您使用 -jar 选项时,所有其他类路径选项都将被忽略。这就是您收到 NoClassDefFoundException 的原因。
参见link在这里。
这是该链接的相关注释 --
-jar 执行封装在 JAR 文件中的程序。第一个参数是 JAR 文件的名称,而不是启动类名称。为了使此选项起作用,JAR 文件的 list 必须包含 Main-Class: classname 形式的行。在这里,classname 标识具有 public static void main(String[] args) 方法的类,该方法用作应用程序的起点。
有关使用 Jar 文件和 Jar 文件 list 的信息,请参阅 Jar 工具引用页和 Java 教程的 Jar 跟踪。当您使用此选项时,JAR 文件是所有用户类的源,并且其他用户类路径设置将被忽略。
修复方法是将类路径包含在您的 jar list 中。
关于java - 如果使用另一个包、类路径集,从 jar 文件运行 Java 程序将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8066892/