java - Java手动添加lib,没有IDE
问题描述
有时我会在小例子中使用sublime+cmd 。我已经下载了一些 .jar,将它们添加到我的项目的 lib 目录中,导入了必要的类。
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
这样编译:
javac Example.java -classpath ./lib/;./lib/jackson-core-2.12.5.jar;./lib/jackson-databind-2.12.5.jar;./lib/jackson-annotations-2.12.5.jar
启动后(java示例)它给出了响应:
线程“主”java.lang.NoClassDefFoundError 中的异常:com/fasterxml/jackson/databind/ObjectMapper 在 Example.convertToJSON(Example.java:55) 在 Example.main(Example.java:49) 引起:java.lang.ClassNotFoundException:com.fasterxml.jackson.databind.ObjectMapper 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ... 2 更多
解决方案
Java 是动态链接的。在类路径中使用 Ceratin JAR 进行编译不会将它们“嵌入”到您的 jar 中,并且您还需要在执行程序时在类路径中提供它们:
java -cp ./lib/;./lib/jackson-core-2.12.5.jar;./lib/jackson-databind-2.12.5.jar;./lib/jackson-annotations-2.12.5.jar com.mypackage.Example
推荐阅读
- java - 优化代码以在 java 上传递 TLE 的建议
- c# - 仅使用公钥验证签名(C#)
- docker - 运行 DLL 的 Docker Windows 容器
- javascript - 根据字符串选择变量
- jquery - Ajax JSONP Parseerror-Callback-Not-Called with Tomcat 9
- android - 在 Android 原生 AAR 上嵌入 .NET 库的属性和操作
- mysql - MySql 多个删除语句
- python - python:使用变量创建交互式公式
- php - 获取PHP中第二个下划线后的字符串
- swift - 在包含对象的数组中,更改一项的属性不会更改对象本身