- 我正在使用 IntelliJ 12.0.4 社区版。
- 我创建了一个名为 DB 的 Java 控制台应用程序,主类名称为 DB。
- 我将它打包成一个名为 DB.jar 的可执行 jar 文件。
- 在该应用程序中,我使用 JDBC 连接到 Oracle DB。
我通过 Intellij 的项目结构(模块、库)将必要的 JDBC jar 文件打包到 DB.jar 中
当我从 IntelliJ 中执行应用程序时,它运行成功
- 如果我将 DB.jar 复制到某个目录并通过“java -jar DB.jar”执行它,我会在 oracle.jdbc.driver.OracleDriver 上得到 ClassNotFound 异常
- 我查看了 DB.jar,jdbc jar 文件(ojdbc6.jar、ojdbc14.jar)在 DB.jar 中
- 有什么想法吗?
问问题
1614 次
1 回答
0
可执行 jar 中的 jar 通常不在类路径中。
您可以将它们放在与 DB.jar 相同的文件夹中并执行以下操作:
java -cp DB.jar;ojdbc6.jar;ojdbc14.jar <MainClass goes here>
那应该运行它。
您还可以将Class-Path
Manifest.MF 文件中的条目放在您的 jar 中,以引用相对于计算机文件系统中 DB.jar 位置的其他 jar。引用另外两个jar文件然后就可以java -jar DB.jar <MainClass goes here>
了(假设两个jar在正确的位置。
这里有一些关于无法做你想做的事情(以及许多其他人多年来想要做的事情)的普遍挫败感的讨论。
解释主类
当您从命令行运行 java 应用程序时,有一些类开始执行。它看起来像这样:
package com.mycompany.app;
public class StartHere {
public static void main(String[] args) {
// Your code goes here ...
}
}
如果此示例是您的应用程序启动的类,您将使用命令行 this 来启动它。这假设您在类路径的 jar 中的正确包位置中有 StartHere 类:
java -cp DB.jar;ojdbc6.jar;ojdbc14.jar com.mycompany.app.StartHere
请注意,这允许您在同一个 jar 中拥有多个应用程序。只需使用一个main()
方法创建多个类,并使用命令行上显示的不同起始类运行它们。
于 2013-08-09T18:54:25.400 回答