【问题标题】:Jar Class not found upon execution执行时找不到 Jar 类
【发布时间】:2020-06-25 21:40:51
【问题描述】:

我正在尝试使用 javax.jms 库:https://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html,为此我下载了 jar:http://www.java2s.com/Code/Jar/j/Downloadjavaxjms111sourcesjar.htm

具体来说,我正在尝试使用 MessageListener 和 Message 类,我知道它们是基于 Jar 反编译的。我把这个jar文件放在我的java文件旁边,这样文件结构如下:

myDir
    -|jms.jar
    -|Main.java

Main.java:

import javax.jms.MessageListener;
import javax.jms.Message;

public class Main {
    public static void main(String[] args) {
        MessageListener listener = new MessageListener() {
            @Override
            public void onMessage(Message msg) {
              
            }
        };
        System.out.println("Hello World");
    }
}

我可以在 myDir 中使用 javac -cp jms.jar Main.java 编译它。这将创建 Main.class。但是,当我运行 java Main 时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/jms/MessageListener

这会让我相信 MessageListener 不包含在 jar 中,但它是并且文件结构是 javax/jms/MessageListener 检出。我犯了什么愚蠢的错误?

当我在没有 -cp js 的情况下编译时,它会失败,说:

error: package javax.jms does not exist

因此,至少编译器正在查看 jar。

【问题讨论】:

  • 您是否尝试使用 -cp .;jms.jar 选项,以便 java 程序知道查看 jar 文件?
  • 当我添加 .;它不编译 -bash: jms.jar: command not found

标签: java jar jms


【解决方案1】:

我犯了两个错误

1:归功于@NormR,.:jms.jar(或 .; 对于 Windows 我猜) 2:执行时链接jar。因此,命令应该是:

javac -cp .:jms.jar Main.java
java -cp .:jms.jar Main

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 2016-02-16
    • 2012-11-05
    • 2016-09-29
    • 2020-09-24
    • 2017-01-28
    • 2017-04-08
    • 2014-09-04
    相关资源
    最近更新 更多