2013-01-14 46 views
0

我已经创建了一个连接到oracle数据库的类,有三个简单函数connect(),executeStatement()disconnect()。这个类需要一个oracle“thin”JDBC Jar才能工作,所以它是'引用库'的一部分。One Jar需要另一个罐子

我想现在要做的是导出我的,我上面提到的JAR文件类,所以其他程序可以利用它。但是,当我试图做到这一点,我会得到以下问题。

Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/driver/OracleDriver 
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 

我可以用什么方法使它成为我的Jar文件将带有的Oracle Jar文件?

+0

反而使用诸如Maven之类的依赖关系管理系统。使用Maven构建系统时,您的图书馆的用户将获得依赖关系。 – sorencito

回答

2

要加载多个罐子类,Java使用所谓的类路径。 这是一个罐子列表,但也包含与罐子内容相同结构的目录。

该列表由参数以下-cp定义java。 查看文档,例如这里。

java -cp jar1.jar;jar2.jar com.my.Class 

java -cp jar1.jar;jar2.jar -jar main.jar 

此外,您还可以学习有关MANIFEST.MF可以列出它的依赖罐子。

+0

翁德拉你可以更具体吗?这段代码是否放在某个文件中?这是命令行的东西?什么是你的语法的等价物,jar1,jar2 main.jar或com.my.Class是什么意思? – user1527739

+0

已更新。更新。 –

1

你必须添加所有由你的程序(包括代码)需要到classpath的罐子。例如:

的java -cp jar1.jar; jar2.jar com.my.Class

类路径定义了JVM将寻找代码时其装载它。以下是有关在命令行中运行Java程序的快速而简单的教程:

http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/

+0

是的,但我添加了一个解释,说明它为什么起作用。这是我对@Ondra所提供的对话的贡献,所以我觉得你对自己有点苛刻。 – chubbsondubs

+0

我很欣赏门把手的解释。不幸的是,我想要求更多的澄清。你可以将我链接到一个资源,或者提供关于这行代码行的细节,以及语法的含义?我可以找出它的大部分,但不明白“com.my.Class” – user1527739

+0

这不是Java代码。这是您用来在命令行上运行JVM(即java)的命令。这与操作系统有关,因为如何在命令行上执行命令因操作系统而异。但是这个命令的意思是执行java(第一个字),将下面的jar添加到classpath(-cp jar1.jar; jar2.jar)并在完全限定的类中执行main()方法(com.my.Class )。这是public static void main(String [] args)方法所在的Java类的名称。 com.my是课程所在的包装。 – chubbsondubs

0

如果你的意思是你希望你的jar文件是完全独立的,并没有依赖关系被暴露给客户端代码,那么你可以尝试Jar Jar Links这将重命名依赖关系并将它们包含在你的jar中。

其他的可能性是在回答这个similar question提及。

相关问题