2013-08-09 2 views
0
  • Использование IntelliJ 12.0.4 Community Edition.
  • Я создал приложение консоли Java под названием DB с основным именем класса DB.
  • Я упаковал его в исполняемый файл jar под названием DB.jar.
  • В этом приложении я подключаюсь к Oracle DB с помощью JDBC.
  • Я упаковываю необходимый JDBC опарник в DB.jar через IntelliJ в проекте структуры (модули, библиотека)Получение ClassNotFound Исключение при выполнении jar

  • Когда я исполняю приложение изнутри IntelliJ он работает успешно

  • Если скопировать БД .jar в какой-то каталог и выполнить его через «java -jar DB.jar». Я получаю исключение ClassNotFound в oracle.jdbc.driver.OracleDriver
  • Я посмотрел в DB.jar и jarb jar-файлах (ojdbc6.jar, ojdbc14 .jar) находятся в DB.jar
  • Любые мысли?

ответ

0

Банки в исполняемом банке обычно не находятся на пути к классам.

Вы можете поместить их в ту же папку, DB.jar и сделать:

java -cp DB.jar;ojdbc6.jar;ojdbc14.jar <MainClass goes here> 

и что должны запустить его.

Вы также можете поместить запись Class-Path в файл Manifest.MF внутри своей банки, чтобы ссылаться на другие банки относительно местоположения DB.jar в файловой системе компьютера. Ссылка на два других файла jar, а затем вы можете сделать java -jar DB.jar <MainClass goes here> (при условии, что две банки находятся в нужном месте.

Существует некоторое обсуждение here об общем разочаровании в том, что вы не можете делать то, что хотите (и что многие другие хотели в течение многих лет).

Classpath including JAR within a JAR

Объяснит о главном классе

При запуске приложения Java из командной строки, есть некоторый класс, где исполнение звезда ц. Это будет выглядеть примерно так:

package com.mycompany.app; 

public class StartHere { 

    public static void main(String[] args) { 
     // Your code goes here ... 
    } 
} 

Если этот пример был класс, где ваше приложение начинает вы будете использовать командную строку, чтобы это запустить его. Это предполагает, что вы имеете класс StartHere в нужном месте пакета в банку на пути к классам:

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

Обратите внимание, что это позволяет иметь несколько приложений в одном банке. Просто создайте несколько классов с помощью метода main() и запустите их с разными начальными классами, указанными в командной строке.

+0

Нужно ли мне явно указывать путь к classpath? Похоже, в этом смысл положить их в банку. – BobL

+0

Да. Это проблема не в этом. –

+0

Спасибо, я попробую. Так собирает ли банки в мою банку что-нибудь купить? – BobL

Смежные вопросы