如何安装 Jar?

How Do I Install a Jar?

我正在阅读 db2jcc4.jar 的一些文档时,以下内容引起了我的注意(强调已添加):

The following command will retrieve the JCC driver version if executed from the command line:

java com.ibm.db2.jcc.DB2Jcc -version

Or for drivers that are not yet installed:

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 移动到哪里才能被视为 installed.

的建议,我将不胜感激

It looks to me like the second command includes a flag, -cp, which modifies the classpath. I'm guessing that means that all I need to do is move my jar file into a specific directory.

我会说您需要在类路径中显式包含 jar 文件本身。就个人而言,我通常不会像您描述的那样尝试 "install" jar,而是创建某种脚本或可执行 jar 文件,这将有助于建立正确的类路径。

编辑:在将代码部署到应用程序服务器的上下文中,"installing" jar 会很有意义——通常在应用程序服务器上有一个可用的共享 lib 文件夹,您可以在其中简单地放下 jar 和代码将对服务器上的所有应用程序 运行 可用——这可能会成为管理上的一个难题,但是我通常更愿意拥有一个完全独立的部署,而不是在应用程序之间共享 jar 文件—— -然而,YMMV。

没有 "installing" 罐子这样的东西。要由 Java 应用程序使用,jar 必须可以在类路径中访问。看看这个link:

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

通过安装 java jar,这意味着该 jar 可用于您的程序(实际存在并在您的 class 路径中找到)。如果未设置 jar 的路径,则您必须选择: + 将 jar 文件复制到您现有的路径 + 在命令行中包含 jar 文件

java -cp <path_to>/db2jcc.jar com.ibm.db2.jcc.DB2Jcc -version

我怀疑 "Installing a JAR" 是一个选择不当的术语,可能意味着将 jar 放在 JVM 类路径上” - 即为了使其对应用程序可用。推荐的方法因不同而异Java 平台(无论是服务器平台还是客户端平台)。

例如,在Java EE服务器上,您可以将jar文件打包在应用程序中,或者将其定义为共享库,然后将其附加到服务器的类加载器或应用程序的类加载器以使其成为可用于该应用程序。第三方应用程序,例如各种 IBM 产品,将附带关于如何 'install' db2jcc4 驱动程序的自己的说明。

您这样评论:

Your link has this comment - (Classes that are part of the JRE, JDK platform, and extensions should be defined through other means, such as the bootstrap class path or the extensions directory.) - How would I go about adding the jar through that?

这是个坏主意,(至少)出于以下原因:

  • 将内容放入扩展目录可能会影响您执行的每个 Java 应用程序。不仅仅是您尝试 "install" 的应用程序。在某些情况下,这可能会由于版本冲突等原因导致意外损坏。

  • 当您更新 Java 安装时,标准安装程序、RPM 或任何将创建新安装树的程序。但它不会从现有安装中复制任何内容。因此 Java 更新可能会破坏任何依赖于 "extensions".

  • 内容的应用程序
  • 如果您尝试通过 "embedding" 一个 Java 安装来解决上述问题,您可能会失去对 Java 安装位置的跟踪。这使得应用 Java 安全补丁成为问题。当然,嵌入式 JRE 会占用大量磁盘 space ... 一次约 100Mb。