2013-05-18 2 views
0

Возможно ли добавить JDBC в CLASSPATH? просто используйте исходный код.Возможно ли добавить JDBC в classpath?

Я создаю программу, которая соединяется с базой данных, но я не хочу, чтобы мои пользователи просили их добавить JDBC туда classpath, это может быть слишком сложно для них. возможно ли не добавить JDBC в путь к классам?

+0

Какой тип приложения. это? НАПРИМЕР. Веб-приложение, настольное приложение, приложение командной строки.? –

+0

desktop app andrew –

+0

См. Править для ответа. –

ответ

1

Да, это возможно.

На самом деле это не красивый подход ...

Вы можете использовать папку под названием LIB и поставить банку Odbc я там, использовать относительный путь к LIB банку, как «Библиотека/jodbc.jar»

Вы можете встроить банку в папку с именем resource, после чего каждый раз, когда вы запускаете приложение, вы ищете папку lib/jodbc.jar, если не существует, вы можете создать папку и скопировать файл ресурсов внутри вашего приложения в папку и сделать.

Я использую этот подход в некоторых приложениях и отлично работал до сих пор. У меня была та же проблема, сложный для пользователя добавить classpath, поэтому я использую только «portable» jre и libs внутри своих приложений.

Извините, что не показывайте примеры, но я сейчас в классе.

Если вам нужно больше примеров, дайте мне знать, и в понедельник я могу ответить.

Cya.


Сначала вам нужно добавить lib в свой проект.

Если вы используете NetBeans, зайдите в свои свойства проекта, в свою библиотеку добавьте банку, но сначала поместите папку в папку проекта с именем lib и с вашим .jar, затем добавьте банку и выберите относительную дорожка.


Чтобы скопировать ресурс:

//Create the /lib directory with the .jars and the service.exe 
    //The resource_path is the package where are your files... 
    String resource_path = "br/com/myservice/resources/"; 
    Util.copyResource(this.getClass().getClassLoader(), resource_path, "PAF_Service.exe", currentDirectory); 

    resource_path = resource_path + "lib/"; 
    String directory_lib = currentDirectory + "lib/"; 

    File dir_lib = new File(directory_lib); 
    if(!dir_lib.exists()){ 
     dir_lib.mkdir(); 
    } 

    Util.copyResource(this.getClass().getClassLoader(), resource_path, "ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar", directory_lib); 
    Util.copyResource(this.getClass().getClassLoader(), resource_path, "log4j-1.2.17.jar", directory_lib); 
    Util.copyResource(this.getClass().getClassLoader(), resource_path, "WinRun4J.jar", directory_lib); 

Метод copyResource:

public static boolean copyResource(ClassLoader classLoader, String resource_path, String resource, String destiny){ 
    FileOutputStream fos = null; 
    Boolean retorno = false; 
    try { 
     InputStream is = classLoader.getResourceAsStream(resource_path + resource); 

     if(is == null){ 
      System.out.println("Resource not found! >> " + resource_path + resource); 
      retorno = false; 
     } 

     fos = new FileOutputStream(new File(destiny, resource)); 
     byte[] buffer = new byte[1024]; 
     int read = -1; 
     while((read = is.read(buffer)) != -1) { 
      fos.write(buffer,0,read); 
     } 
     fos.flush(); 
     fos.close(); 
     retorno = true; 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      if(fos != null) 
       fos.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    return retorno; 
} 
+0

Я бы очень хотел, чтобы ваш пример понравился william. –

2

Нет, это не так. Или, что более точно, хотя можно добавить JDBC-банки во временный класс времени выполнения во время выполнения таким образом, который является относительно невидимым для пользователя, невозможно использовать JDBC без соответствующего драйвера.

Для развертывания приложений на рабочем столе Java, лучший вариант - это, как правило, установить приложение. используя Java Web Start. JWS работает в Windows, OS X & * nix.

Это больше усилий для вас, но легкий ветерок для конечного пользователя. Им никогда не нужно ничего знать о пути выполнения во время выполнения или о том, что есть или нет. Вы также можете дать им удобный ярлык на рабочем столе или пункт меню, чтобы запустить приложение.

1

Теоретически можно написать собственный драйвер JDBC. Если вы это сделали, ваш драйвер JDBC будет частью вашей кодовой базы и может находиться в JAR вашего приложения. Но это звучит как очень плохая идея ...

Также возможно создать «uber jar», который объединяет ваш код и сторонний код в один JAR-файл. Однако есть улов. Некоторые лицензии с открытым исходным кодом (например, LGPL) не позволяют вам это делать. Скорее, они могут потребовать, чтобы код, охватываемый лицензией, был предоставлен в форме, которая делает простой для конечного пользователя, чтобы заменить одну версию библиотеки на другую. Подход «uber jar» делает это трудным.

Однако лучший подход заключается в том, чтобы упаковать ваше приложение в виде нескольких JAR и организовать, чтобы установщик помещал JAR в нужное место и использовал сценарий оболочки или пользовательский запуск, чтобы гарантировать правильность CLASSPATH.

Или используйте WebStart, как @Andrew Thompson рекомендует. Это имеет и другие преимущества, такие как предоставление простого способа обработки обновлений или проверка актуальности установки JRE пользователя.

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