java - 执行时找不到 Jar 类
问题描述
我正在尝试使用 javax.jms 库:https ://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html ,为此我下载了 jar:http://www .java2s.com/Code/Jar/j/Downloadjavaxjms111sourcesjar.htm
具体来说,我正在尝试使用基于 Jar 反编译的 MessageListener 和 Message 类。我把这个 jar 文件放在我的 java 文件旁边,所以文件结构如下所示:
myDir
-|jms.jar
-|Main.java
主.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。
解决方案
我犯了2个错误
1:归功于@NormR,.:jms.jar(或 .; 对于我推测的 Windows) 2:在执行时链接 jar。因此,命令应该是:
javac -cp .:jms.jar Main.java
java -cp .:jms.jar Main
推荐阅读
- javascript - 如何使用角度从完整文件路径中获取文件名
- python - 按总和过滤数据帧
- javascript - 比较两个javascript对象数组并合并数据
- c++ - 如何将 QPushButtonGroup 添加到 GridLayout Qt C++
- python - Glob 和 pathlib Path.glob 对相同的模式产生不同的结果
- webpack - @use 在 sass 编译中被忽略
- angular - 如何从 Mongodb [Angular] 中删除数组的元素
- common-lisp - 我如何以编程方式写入 *standard-input* 以在 repl 进行评估?
- php - PHP CURL 不返回完整的令牌
- python - 在python脚本中将变量值传递给awk命令