IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Intégration SQLite dans un JAR


Sujet :

Langage Java

  1. #1
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut Intégration SQLite dans un JAR
    je compile et exécute (avec driver sqlite-jdbc-3.36.0.3.jar) le source suivant sans problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.sql.*;
     
    public class Sqlitejdbc {
      public static void main( String args[] ) {
          Connection c = null;
     
          try {
             Class.forName("org.sqlite.JDBC");
             c = DriverManager.getConnection("jdbc:sqlite:test.db");
          } catch ( Exception e ) {
             System.err.println( e.getClass().getName() + ": " + e.getMessage() );
             System.exit(0);
          }
          System.out.println("Opened database successfully");
       }
    }
    mais quand je constitue un .jar avec le MANIFEST.MF suivant et l'exécute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Main-Class: Sqlitejdbc
    Class-Path: ./lib/sqlite-jdbc-3.36.0.3.jar
    X-COMMENT: author
    j'ai l'erreur suivante

    java.lang.ClassNotFoundException: org.sqlite.JDBC
    le driver (sous ./lib) se trouve bien dans le .jar

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Ah oui non mais "Class-Path" c'est pour désigner les autres jars qui se trouvent en dehors du jar en cours.

    Java ne fournit pas de solution simple pour construire un programme avec dépendances, en un seul fichier (sauf récemment, sous forme de programme natif installable, avec jpackage mais à condition d'être carré vis-à-vis des modules, ce que sqlite n'est probablement pas.)

    Du coup il faut chercher des solutions annexes, genre fat jars, ou la solution particulièrement robuste de Spring Boot (le plugin Maven ou Gradle).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le problème semble provenir de ça.
    le driver (sous ./lib) se trouve bien dans le .jar
    Non, le jar de sqlite-jdbc ne devrait pas être copié dans le .jar éxecutable résultant pourqu'il soit réferencié.
    Il doit pourtant se présenter dans le système de fichiers dans le répertoire du projet.

    Supposons que le jar éxecutable résultant soit nommé sqlitejdbc.jar.

    Dedans le sqlitejdbc.jar, il ne devrait pas structuré comme ceci où qu'on attend sqlite-jdbc soit réferencié quand le programme est démarré:
    Code text; faux : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <racine>
        \--- META-INF
            | MANIFEST.MF
        \--- lib
            | sqlite-jdbc-3.36.0.3.jar 
        | Sqlitejdbc.class

    mais plutôt comme ceci essentiellement:
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <root>
        \--- META-INF
            | MANIFEST.MF
        | Sqlitejdbc.class

    Et puis dans le système de fichiers, le répertoire du projet est structuré comme ceci:
    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <project_dir>
        | Sqlitejdbc.jar
        | test.db
        \--- lib
            | sqlite-jdbc-3.36.0.3.jar

    Voilà ce que je vois le problème d'après le MANIFEST.MF.

  4. #4
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    j'ai trouvé une solution

    j'ai extrait le répertoire org du driver (sqlite-jdbc-3.36.0.3.jar) que j'intègre dans le jar

    je n'ai même pas eu besoin de modifier le source

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Content que ça marche,

    mais cela entre en conflit avec les systèmes de déclarations de service des jars. Il semble que vous n'en ayez pas besoin en utilisant sqlite, tant mieux.

    Mais, cette solution marche dans des cas et pas dans d'autres. (Et il y a des plugins Maven/Gradle pour le faire automatiquement)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2013, 12h02
  2. Probleme avec une image dans un jar
    Par tirisus dans le forum JWS
    Réponses: 0
    Dernier message: 16/10/2009, 14h26
  3. Probleme de ressources bundles dans un jar
    Par dideux dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2006, 18h57
  4. Probleme de composant inclus dans un autre.
    Par viro dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/04/2004, 15h44
  5. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo