执行jar时获取ClassNotFound异常 Am使用IntelliJ 12.0.4社区版 我创建了一个名为DB的Java控制台应用程序,主类名为DB 我将其打包到一个名为DB.jar的可执行jar文件中 在该应用程序中,我使用JDBC连接到Oracle数据库

执行jar时获取ClassNotFound异常 Am使用IntelliJ 12.0.4社区版 我创建了一个名为DB的Java控制台应用程序,主类名为DB 我将其打包到一个名为DB.jar的可执行jar文件中 在该应用程序中,我使用JDBC连接到Oracle数据库,java,intellij-idea,Java,Intellij Idea,我通过Intellij的项目结构(模块、库)将必要的JDBCJAR文件打包到DB.jar中 当我从IntelliJ中执行应用程序时,它会成功运行 如果我将DB.jar复制到某个目录并通过“java-jar DB.jar”执行它,我会在oracle.jdbc.driver.OracleDriver上得到一个ClassNotFound异常 我查看了DB.jar,JDBCJAR文件(ojdbc6.jar,ojdbc14.jar)在DB.jar中 有什么想法吗 可执行jar中的jar通常不在类路径上 您

我通过Intellij的项目结构(模块、库)将必要的JDBCJAR文件打包到DB.jar中

  • 当我从IntelliJ中执行应用程序时,它会成功运行

  • 如果我将DB.jar复制到某个目录并通过“java-jar DB.jar”执行它,我会在oracle.jdbc.driver.OracleDriver上得到一个ClassNotFound异常
  • 我查看了DB.jar,JDBCJAR文件(ojdbc6.jar,ojdbc14.jar)在DB.jar中
  • 有什么想法吗

  • 可执行jar中的jar通常不在类路径上

    您可以将它们放在与DB.jar相同的文件夹中,并执行以下操作:

    java -cp DB.jar;ojdbc6.jar;ojdbc14.jar <MainClass goes here>
    
    如果这个示例是应用程序启动的类,那么您可以使用命令行来启动它。这假设您在类路径的jar中的正确包位置有StartHere类:

    java -cp DB.jar;ojdbc6.jar;ojdbc14.jar com.mycompany.app.StartHere
    

    注意,这允许您在同一个jar中有多个应用程序。只需使用
    main()
    方法创建多个类,并使用命令行上显示的不同起始类运行它们。

    是否需要显式设置类路径以指向它们?看来这就是把它们放进罐子的意义。是的。这是个问题,不是吗?谢谢,我试试看。那么,将这些罐子捆绑到我的罐子里能给我带来什么好处吗?如果你真的很努力地眯着眼睛看,你会发现你已经在罐子里存储了这些罐子的正确版本,并且可以在将来提取它们并将它们放在文件夹中运行。您可能也希望jar中有一个“readme”文件来解释这一点;ojdbc14.jar-jar DB.jar,但仍然会得到相同的错误(grrr)
    java -cp DB.jar;ojdbc6.jar;ojdbc14.jar com.mycompany.app.StartHere