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

Maven Java Discussion :

Dépendance lib non Maven


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut Dépendance lib non Maven
    Bonjour.

    mon problème est le suivant
    j'ai des libs qui ne sont pas géré par maven
    je les utilise dans mes projets en mettant
    Code xml : 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
    17
    18
    19
    20
    21
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapjco</artifactId>
       <version>3.0.0</version>
       <scope>system</scope>
       <systemPath>D:/project/libs/libsap//sapjco.jar</systemPath>
    </dependency>
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapidocjco</artifactId>
       <version>2.0.0</version>
       <scope>system</scope>
       <systemPath>D:/project/libs/libsap/sapidocjco.jar</systemPath>
    </dependency>
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapidoc</artifactId>
       <version>2.0.0</version>
       <scope>system</scope>
       <systemPath>D:/project/libs/libsap/sapidoc.jar</systemPath>
    </dependency>

    j'obtiens un warning me disant que je devrais utiliser une variable.
    ça tombe plutôt bien vu que mes projets vont êtres utilisés et compilés sur windows comme sous Unix.
    j'ai donc définit dans le settings.xml de tous les développeurs et toutes les plateformes une propriété lib.sap qui pointe sur le dossier où ce trouve la lib.
    et mes pom ressemblent donc à
    Code xml : 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
    17
    18
    19
    20
    21
    22
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapidoc3</artifactId>
       <version>3.0.0</version>
       <scope>system</scope>
       <systemPath>${lib.sap}/sapidoc3.jar</systemPath>
    </dependency>
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapjco3</artifactId>
       <version>3.0.0</version>
       <scope>system</scope>
       <systemPath>${lib.sap}/sapjco3.jar</systemPath>
    </dependency>
    <dependency>
       <groupId>de.sap</groupId>
       <artifactId>sapjco3.dll</artifactId>
       <version>3.0.0</version>
       <scope>system</scope>
       <type>dll</type>
       <systemPath>${lib.sap}/sapjco3.dll</systemPath>
    </dependency>

    mais du coup j'ai des messages me disant que le chemin systemPath devrait être absolut mais qu'il vaut ${lib.sap}la propriété lib.sap est pourtant sur toutes les machine un chemin absolut.

    Que faire ???

    Merci
    A+JYT

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bonjour,

    Une dépendance en scope system est à proscrire absolument !
    Le plus simple, c'est d'installer les JAR dans le repository (local, donc sur la machine du développeur, ou mieux encore sur le repository d'entreprise si vous en avez un). Le fait que la dépendance soit "non mavenisée" n'est pas un problème. La commande suivante permettra de générer un pom basique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mvn install:install-file -Dfile=sapjco.jar -DgroupId=de.sap -DartifactId=sapjco -Dversion=3.0.0 -Dpackaging=jar -DgeneratePom=true
    mvn install:install-file -Dfile=sapidocjco.jar -DgroupId=de.sap -DartifactId=sapidocjco -Dversion=2.0.0 -Dpackaging=jar -DgeneratePom=true
    Une fois ces JAR déployés en local (ou dans le repository d'entreprise), il te suffira de les déclarer comme dépendances "normales".
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Bonjour

    Je n'ai jamais réussi à faire fonctionner JCO (http://www.sap.com/index.epx)
    en générant un POM
    JCO comporte plusieurs JAR des dll et so
    lorsque je les mets sous maven sur mon nexus en générant des pom indépendant je ne parviens pas à exécuter ni à compiler mes dev

    pour le moment la seul solution que j'ai trouvé est d'en passer par le scope system

    j'ai cherché à savoir si je pouvais faire un pom de plusieurs jars so et dll mais ça ne marche pas non plus.

    Merci
    A+JYT

  4. #4
    Membre émérite

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Par défaut
    Je crois comprendre le problème: le connecteur java JCO utilise le nom en dur (i.e. sans version) pour la dll,so et autres jnilib

    Une idée :

    -1- inclure la librairies native dans le jar que tu peux mettre dans Nexus
    Ensuite dans ton POM
    -2- décompresser le jar; et, copier les librairies dans l'appli
    -> possible utilisation de maven-dependency-plugin (phase prepare-package / goal unpack)
    -3- finaliser le packaging

    Mais bon, c'est assez lourdingue voire crad.... il doit bien avoir une meilleure solution.

    a+
    Philippe

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Mettre les jar dans le repository maven et les dll / so dans les répertoires système de l'OS ne serait pas une solution?

    J'ai une fois travaillé avec une librairie native sur laquelle je n'avais pas le controle, et c'était la supposition de base "la librairie est installée conformément aux recommendation du fournisseurs sur toute machine voulant exécuter le code". Donc on a tappé le jar dans maven (pour les dépendances) et on laissait à la responsabilité du gestionnaire de a machine l'installation des DLLS

    Sinon, je craint qu'il faille vivre avec le warning

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    merci

    le problème est que visiblement sapjco3.jar cherche le jar sapidoc3.jar et la lib native ....
    donc si on mets dans un pom on a sapjco-3.0.0 et pas sap3 idem pour les autres.

    on est donc partit sur l'idée que chacun est responsable de l'installation sur sa machine.

    mais pour que le tout compile et que karaf retrouve ses petit il faut dans les bundles ajouter une dépendance vers les lib
    d'où l'utilisation du scope system

    j'imagine que si ce scope existe il doit bien y avoir une façon de le gérer proprement.

    définir une variable sur chaque machine qui indique où trouver la lib nous paraissait la bonne solution.
    c'est en tout cas la seul qui fonctionne à notre connaissance.
    mais nous avons un invalid transitive dépendance qui traîné un peut partout

    A+JYT

Discussions similaires

  1. Dépendance entre projet Maven et projet non maven dans Eclipse
    Par identifiant_bidon dans le forum Maven
    Réponses: 1
    Dernier message: 24/02/2011, 13h25
  2. Inclure dépendances dans WAR (maven)
    Par dialloma dans le forum Maven
    Réponses: 8
    Dernier message: 05/06/2008, 11h08
  3. dossier lib non reconnu par eclipse
    Par yodark dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 10/12/2007, 14h55
  4. Réponses: 3
    Dernier message: 17/03/2007, 13h26
  5. Librairie msvcprtd.lib non trouvée
    Par Rupella dans le forum MFC
    Réponses: 2
    Dernier message: 16/02/2006, 14h19

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