java - 使用 jar 文件编译和运行 java
问题描述
我正在尝试编译一个使用多个 jar 文件作为导入的 java 文件。我用来编译代码的命令:
javac -cp jackson-databind-2.12.1.jar:jackson-core-2.12.1.jar:jackson-annotations-2.12.1.jar TestRunner.java
结果创建了两个 .class 文件:TestRunner.class 和 TestRunner$1.class
然后我运行命令:
java TestRunner
但它会抛出一个错误,上面写着:
Error: Unable to initialize main class TestRunner Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/type/TypeReference
我已经在 javac 命令中包含了所有必需的库,并使用 IDE 对其进行了测试,它工作正常。我尝试了其他版本的杰克逊库,但我遇到了同样的错误。
解决方案
您需要在运行代码时指定类路径,方法是-cp
使用编译时使用的相同参数,以及编译类所在的文件夹。
在你的案例中,这意味着类似java -cp .:jackson-databind-2.12.1.jar:jackson-core-2.12.1.jar:jackson-annotations-2.12.1.jar TestRunner
您指定的库不包含在.class
生成的文件中,因此 Java 仍然需要它们了解如何调用不是来自您的类文件的代码。
推荐阅读
- android - 启用 proguard 后 JNI 检测到错误导致应用程序崩溃
- http - 如何定义使用“严格动态”但包含使用“不安全内联”的回退的内容安全策略 (CSP)?
- node.js - 如何在 WebStorm 上使用远程 node_modules(容器内)?
- unity3d - 在先前保存的点云中重新定位
- jsonschema - 如何根据 React Json Schema 表单中的默认值“锁定”字段值?
- git - GitKraken 存储库用户和密码被错误记住
- makefile - Makefile while loop try/catch 相当于先用 conda 然后用 pip 安装 python 依赖项
- regex - 如何在 Zend 框架 3 中从路由中提取特殊字符
- vhdl - VHDL Quartus 无法识别“+”和“-”
- javascript - Firebase 函数:更新集合中的所有文档