Maven: le meilleur moyen de lier un JAR externe personnalisé à mon projet?

Ce sont mes premiers jours à apprendre Maven et je suis toujours aux sockets avec les bases. J’ai un fichier .jar externe (non disponible dans les repositorys publics) que je dois référencer dans mon projet et j’essaie de déterminer quelle est ma meilleure option.

Il s’agit d’un projet à petite échelle sans référentiel central pour les bibliothèques. Il doit donc s’agir d’un référentiel local (d’une manière ou d’une autre ajouté au contrôle des sources, ne pas savoir si cela fonctionne comme ça?) Ou .jar doit être stocké sur disque en dehors de tout référentiel formel.

1) Quelle est ma meilleure option pour append le fichier .jar aux références de mon projet avec maven, étant donné que je souhaite que le projet et la bibliothèque soient tous deux sous contrôle de code source?

2) Je n’arrive toujours pas à voir Eclipse voir la dépendance. Je l’ai ajouté manuellement à la section du pom, et cela apparaît très bien dans la liste des dépendances de m2eclipse. mvn comstack et mvn package réussissent tous les deux, mais l’exécution du programme entraîne:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: LibraryStuff cannot be resolved to a type 

C’est après avoir édité le POM en tant que:

  stuff library 1.0 ${lib.location}/MyLibrary.jar system  

Dois-je exécuter mvn install: install-file même si j’ai déjà le pom.xml modifié comme ci-dessus?

Merci!

Je pense que vous devriez utiliser mvn install:install-file pour remplir votre référentiel local avec les mvn install:install-file de la bibliothèque, vous devez alors changer la scope du système pour la comstackr.

Si vous commencez avec maven, je suggère d’utiliser maven directement pas les plug-ins IDE, car cela ajoute une couche de complexité supplémentaire.

En ce qui concerne l’erreur, mettez-vous les pots requirejs sur votre classpath? Si vous utilisez des types de la bibliothèque, vous devez également y avoir access lors de l’exécution. Cela n’a rien à voir avec maven lui-même.

Je ne comprends pas pourquoi vous voulez mettre la bibliothèque au contrôle des sources – ce n’est pas pour les codes binarys de code source.

Vous pouvez créer un référentiel In Project afin de ne pas avoir à run mvn install:install-file chaque fois que vous travaillez sur un nouvel ordinateur

  in-project In Project Repo file://${project.basedir}/libs   dropbox dropbox-sdk 1.3.1  

/groupId/artifactId/version/artifactId-verion.jar

détail lire cet article de blog

http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/

Le manuel Maven dit ceci:

 mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar 

mise à jour Nous venons tout juste d’installer notre propre serveur Nexus, beaucoup plus facile et plus propre.

Dans notre entreprise, nous avions des bocaux qui étaient des bocaux mais qui n’étaient pas hébergés dans des référentiels Maven, et nous ne voulions pas non plus les stocker dans un stockage local. Nous avons créé un référentiel mvn (public) très simple sur Github (mais vous pouvez l’héberger sur n’importe quel serveur ou localement):
notez que ceci n’est idéal que pour gérer quelques fichiers jar qui changent rarement

  1. Créer un repo sur GitHub:
    https://github.com//mvn-repo/

  2. Ajouter un référentiel dans pom.xml
    (Notez que le fichier brut du chemin complet sera un peu différent du nom du repository)

      project-common Project Common https://github.com//mvn-repo/raw/master/  
  3. Ajouter une dépendance à l’hôte (Github ou serveur privé)
    une. Tout ce que vous devez savoir, c’est que les fichiers sont stockés dans le modèle mentionné par @glitch
    /groupId/artifactId/version/artifactId-version.jar
    b. Sur votre hôte, créez les dossiers correspondant à ce modèle.
    Par exemple, si vous avez un fichier jar nommé service-sdk-0.0.1.jar , créez le dossier service-sdk/service-sdk/0.0.1/ et placez-y le fichier jar service-sdk-0.0.1.jar .
    c. Testez-le en essayant de télécharger le fichier JAR depuis un navigateur (dans notre cas: https://github.com//mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Ajoutez une dépendance à votre fichier pom.xml:

      service-sdk service-sdk 0.0.1  
  5. Prendre plaisir

Cela peut être facilement réalisé en utilisant l’élément nested dans l’élément .

Par exemple:

    ldapjdk ldapjdk system 1.0 ${basedir}\src\lib\ldapjdk.jar   

Référence: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm

N’utilisez pas systemPath. Contrairement à ce que les gens ont dit ici, vous pouvez placer un fichier jar externe dans un dossier sous votre répertoire de projet extrait et refuge que Maven trouve comme d’autres dépendances. Voici deux étapes cruciales:

  1. Utilisez “mvn install: install-file” avec -DlocalRepositoryPath.
  2. Configurez un référentiel pour pointer vers ce chemin dans votre POM.

C’est assez simple et vous pouvez trouver un exemple étape par étape ici: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html

Changez votre SystemPath .

  stuff library 1.0 ${project.basedir}/MyLibrary.jar system  

Maven pour append des pots non-maven au projet Maven

Projet Maven et bocaux non Maven

Ajoutez les plugins maven install dans votre section build

  org.apache.maven.plugins maven-install-plugin ${version.maven-install-plugin}   install-external-non-maven1-jar clean  default jar1.group non-maven1 ${version.non-maven1} ${project.basedir}/libs/non-maven1.jar jar true   install-file    install-external-non-maven2-jar clean  default jar2.group non-maven2 ${version.non-maven2} ${project.basedir}/libs/non-maven2.jar jar true   install-file    install-external-non-maven3-jar clean  default jar3.group non-maven3 ${version.non-maven3} ${project.basedir}/libs/non-maven3.jar jar true   install-file     

Ajouter la dépendance

   jar1.group non-maven1 ${version.non-maven1}   jar2.group non-maven2 ${version.non-maven2}   jar3.group non-maven3 ${version.non-maven3}   

Références Note Je suis le propriétaire du blog

Le fichier pom.xml va examiner votre référentiel local pour essayer de trouver la dépendance correspondant à votre artefact. En outre, vous ne devriez pas vraiment utiliser les atsortingbuts system scope ou systemPath, ceux-ci sont normalement réservés aux éléments du JDK et non à JRE.

Consultez cette question pour savoir comment installer les artefacts Maven.

Si vous rencontrez le même problème et que vous utilisez spring-boot v1.4 + , vous pouvez le faire de cette manière.

Il existe un includeSystemScope que vous pouvez utiliser pour append des dépendances à la scope du système.

par exemple

J’utilise le pilote Oracle dans mon projet.

  com.oracle ojdbc14 10.2.0.3.0 system ${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar  

puis faites inclure includeSystemScope = true pour inclure le jar dans le chemin / BOOT-INF / lib / **

  org.springframework.boot spring-boot-maven-plugin  true   

et exclure de la ressource pour éviter les doublons, le pot est assez gras ~

  src/test/java   src/main/resources  **/*.jar     

Bonne chance!

La meilleure solution est d’installer un référentiel: Nexus ou Artifactory. Si vous donne un endroit pour mettre des choses comme ça, et en plus cela accélère les choses en mettant en cache vos données de l’extérieur.

Si la chose à laquelle vous avez affaire est open source, vous pouvez également envisager de la placer dans le centre.

Voir le guide

Notez que tous les exemples qui utilisent

 ... 

exiger externe

 ... 

renfermant des étiquettes. Ce n’est pas clair de certains exemples.

Si le fichier JAR externe est créé par un projet Maven uniquement, vous pouvez copier l’intégralité du projet sur votre système et exécuter un projet.

 mvn install 

dans le répertoire du projet. Cela appenda le fichier jar dans le répertoire .m2 qui est le repository local de maven.

Maintenant vous pouvez append le

  copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project copy-from-the=maven-pom-of-existing-project  

Cela garantira que vous

 mvn exec:java 

travaux. Si vous utilisez suggéré ici

 system 

Ensuite, vous devrez append des classes individuellement tout en utilisant l’exécution via la ligne de commande.

Vous pouvez append les jars externes par la commande suivante décrite ici

 mvn install:install-file -Dfile= -DgroupId= \ -DartifactId= -Dversion= -Dpackaging= 

Avec Eclipse Oxygen, vous pouvez faire les choses suivantes:

  1. Placez vos bibliothèques dans WEB-INF / lib
  2. Projet -> Configurer le chemin de génération -> Ajouter une bibliothèque -> Bibliothèque d’applications Web

Maven les prendra lors de l’installation du projet.