java - 如果使用另一个包、类路径集,从 jar 文件运行 Java 程序将不起作用

标签 java

我从一个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/

相关文章:

java - Jersey Hello World 什么也不显示

java - Eclipse下自动从插件文件夹创建Jar

java - jsp:param 不显示期望值

java - 在 Android Java 中设计一个库

java - 部署 Spring 应用程序时出现连接超时错误

java - 什么会导致 Swing 应用程序不一致地抛出空指针异常?

java - JSF/Hibernate NotBlank 验证

java - 打开 Java 应用程序在 OS X Mavericks 上无声地失败

java - AOP 异常处理

java - 如何设置 Swing 计时器在启动时执行