【发布时间】:2015-01-21 21:34:11
【问题描述】:
我正在阅读 db2jcc4.jar 的一些文档时,以下内容引起了我的注意(已添加重点):
如果从命令行执行,以下命令将检索 JCC 驱动程序版本:
java com.ibm.db2.jcc.DB2Jcc -version或者对于尚未安装的驱动程序:
java -cp ./db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version
我只有db2jcc4.jar 文件——它没有附带安装程序或任何东西。我可以运行第二个命令,它工作正常,但第一个给了我这个堆栈跟踪:
Exception in thread "main" java.lang.NoClassDefFoundError: com.ibm.db2.jcc.DB2Jcc
Caused by: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Jcc
at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:665)
at java.lang.ClassLoader.loadClass(ClassLoader.java:644)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
at java.lang.ClassLoader.loadClass(ClassLoader.java:627)
Could not find the main class: com.ibm.db2.jcc.DB2Jcc. Program will exit.
这告诉我 jar 尚未安装。在我使用 Java 的所有时间里,我从未听说过安装 jar。如何使第一个命令起作用而不是出现此问题并打印堆栈跟踪?如何安装 jar?
在我看来,第二个命令包含一个标志-cp,它修改了类路径。我猜这意味着我需要做的就是将我的 jar 文件移动到特定目录中。我试着把它放在/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33.x86_64/jre/lib 中,但没有成功,所以第二个命令可以工作。我很困惑,如果我需要将这个 jar 移动到哪里才能被视为 已安装,我将不胜感激。
【问题讨论】:
-
我不建议将 jar 安装为 JRE 扩展,它会将您的应用程序耦合到 JRE 安装。为什么不将第二个选项用作 shell 脚本的一部分?
-
@ChristianWilkie:我的问题更多是关于“安装”文档的含义,而不是如何实际运行这个特定命令。我在 jar 中的某些类出现了一些非常奇怪的行为,有时会找到类,而有时却找不到类(尽管类加载器日志显示它已明确加载)。我只是在阅读完整的文档时突然想到,根据他们的定义,我没有“安装” jar,所以我想知道如何才能满足这一点。一旦我这样做了,问题就消失了,我接受了答案。