我正在阅读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.
这告诉我罐子尚未安装。在我使用Java的所有时间里,我从来没有听说过安装过jar。如何使第一个命令工作而不是出现此问题并打印堆栈跟踪?我如何安装jar ?
在我看来,第二个命令包含一个标志-cp
,它修改了类路径。我猜这意味着我需要做的就是将我的jar文件移动到一个特定的目录中。我尝试将它放在/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.33.x86_64/jre/lib
中,但是没有这样做,所以第二个命令就可以了。我很难过,并且非常感谢任何关于我需要移动这个罐子的建议,以便将其视为已安装。
答案 0 :(得分:0)
在我看来,第二个命令包含一个标志-cp,它修改了类路径。我猜这意味着我需要做的就是将我的jar文件移动到一个特定的目录中。
我想说你需要在类路径中明确地包含jar文件本身。就个人而言,我通常不会尝试安装"你描述的一个jar,而是创建某种脚本或可执行jar文件,这将有助于建立正确的类路径。
编辑:在将代码部署到应用程序服务器的上下文中,然后安装" jar会有意义 - 通常在应用程序服务器上有一个共享的lib文件夹,你可以简单地删除jar,代码将对服务器上运行的所有应用程序可用 - 这可能会变得有点然而,管理上的一个令人头疼的问题是,我常常希望在应用程序之间共享jar文件时完全自包含部署 - 但是,YMMV。
答案 1 :(得分:0)
没有“安装”罐子的东西。要由Java应用程序使用,必须在类路径中访问jar。看看这个链接:
http://docs.oracle.com/javase/tutorial/essential/environment/paths.html
答案 2 :(得分:0)
通过安装java jar,它们意味着jar可用于您的程序(实际存在并在类路径中找到)。如果没有设置jar的路径,那么你必须选择: +将jar文件复制到现有路径 +在命令行中包含jar文件
java -cp <path_to>/db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version
答案 3 :(得分:0)
我怀疑“安装JAR”是一个选择不当的术语,可能意味着将jar放在JVM类路径上“ - 即为了使它可供应用程序使用。建议的方法因Java而异平台(无论是服务器平台还是客户端平台)。
例如,在Java EE服务器上,您可以将jar文件打包在应用程序中,或将其定义为共享库,并将其附加到服务器的类加载器或应用程序的类加载器,以使其可供该应用程序使用。第三方应用程序(如各种IBM产品)将自行提供有关如何“安装”db2jcc4驱动程序的说明。
答案 4 :(得分:0)
您评论如此:
您的链接有此注释 - (属于JRE,JDK平台和扩展的类应该通过其他方式定义,例如引导类路径或扩展目录。) - 我将如何添加通过那个罐子?
这是一个坏主意,因为(至少)以下原因:
将内容放入extensions目录可能会影响您执行的每个Java应用程序。不只是您正在尝试的应用程序&#34;安装&#34;。在某些情况下,由于版本冲突等原因可能导致意外破损。
更新Java安装时,标准安装程序,RPM或其他任何内容将创建新的安装树。但它不会从现有安装中复制任何内容。因此,Java更新可能会破坏依赖于&#34;扩展&#34;中的内容的任何应用程序。
如果您尝试通过&#34;嵌入&#34;来解决上述问题在Java安装中,您可能会忘记Java安装的位置。这使得应用Java安全补丁成为问题。当然,嵌入式JRE占用了大量的磁盘空间......每次约100Mb。