web-dev-qa-db-fra.com

Maven: Comment inclure des bocaux, qui ne sont pas disponibles dans les représentants, dans un projet J2EE?

dans mon projet J2EE, j'ai quelques dépendances, qui ne sont disponibles dans aucun référentiel Maven, car ce sont des bibliothèques propriétaires. Ces bibliothèques doivent être disponibles au moment de l'exécution. Elles doivent donc être copiées dans target /.../ WEB-INF/lib ...

À l'heure actuelle, je les répertorie en tant que dépendance du système dans mon POM, mais avec cette méthode, le problème est que ces copies ne sont pas copiées dans la construction cible pendant la compilation. Aussi cette méthode n'est pas très élégante.

Alors quel est le meilleur moyen de les intégrer dans Maven?

Remarque: je ne souhaite pas créer mon propre référentiel Maven.

94
samson

Comme vous avez dit que vous ne voulez pas configurer votre propre référentiel, cela vous aidera peut-être.

Vous pouvez utiliser le but install-file goal du plug-in maven-install pour installer un fichier dans le référentiel local. Si vous créez un script avec une invocation Maven pour chaque fichier et le conservez à côté des fichiers jar, vous (et toute autre personne disposant d'un accès) pouvez facilement installer les fichiers jar (et les fichiers pom associés) dans leur référentiel local.

Par exemple:

mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom

ou juste 

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.Oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar

Vous pouvez ensuite référencer les dépendances comme d'habitude dans votre projet.

Cependant, votre meilleur pari est toujours de configurer un référentiel interne distant et je vous recommande d'utiliser Nexus moi-même. Il peut fonctionner sur votre boîte de développement si nécessaire, et les frais généraux sont minimes.

52
Rich Seller

Pour les personnes désirant une solution rapide à ce problème:

<dependency>
  <groupId>LIB_NAME</groupId>
  <artifactId>LIB_NAME</artifactId>
  <version>1.0.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
</dependency>

donnez simplement à votre bibliothèque un identifiant de groupe et un artefact uniques et pointez-les où ils se trouvent dans le système de fichiers. Tu es prêt.

Bien sûr, il s’agit d’une solution miracle qui ne fonctionnera QUE sur votre ordinateur et si vous ne modifiez pas le chemin des bibliothèques. Mais parfois, c’est tout ce que vous voulez, exécuter et faire quelques tests.

EDIT: il suffit de reformuler la question et de s’apercevoir que l’utilisateur utilisait déjà ma solution en tant que solution temporaire. Je laisserai ma réponse comme une aide rapide pour les autres qui viennent à cette question. Si quelqu'un n'est pas d'accord, laissez-moi un commentaire. :)

184
Ric Jafe

Créez un dossier de référentiel sous votre projet. Prenons

${project.basedir}/src/main/resources/repo

Ensuite, installez votre jar personnalisé sur ce dépôt:

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]

Enfin, ajoutez les définitions de référentiel et de dépendance suivantes aux projets pom.xml:

<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>
22
mostar

Vous devez configurer un référentiel local qui hébergera de telles bibliothèques. Il y a un certain nombre de projets qui font exactement cela. Par exemple Artifactory .

8
Gregory Mostizky

Aucune des solutions ne fonctionne si vous utilisez la construction de Jenkins !! Lorsque pom est exécuté dans le serveur de compilation Jenkins .., ces solutions échoueront, car Jenkins exécutera pom essaiera de télécharger ces fichiers depuis le référentiel d'entreprise.

Copiez les fichiers jar sous src/main/resources/lib (créez le dossier lib). Ceux-ci feront partie de votre projet et iront jusqu'au serveur de déploiement. Dans le serveur de déploiement, assurez-vous que vos scripts de démarrage contiennent src/main/resources/lib/* dans classpath. Alto.

3
Apurva Singh

Si je comprends bien, si vous voulez exporter des dépendances au cours de la phase de compilation pour ne pas avoir à récupérer manuellement les bibliothèques nécessaires, vous pouvez utiliser le mojo copy-dependencies .

J'espère que cela pourra être utile dans votre cas ( exemples )

2
Erik Clairiot

vous pouvez les installer dans un référentiel local privé (par exemple .m2/repository dans votre répertoire personnel): plus de détails ici

2
dfa

Continuez à les utiliser comme dépendance du système et copiez-les dans target /.../ WEB-INF/lib ... à l'aide du plug-in Maven dependency:

http://maven.Apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

1
Corehpf

L'installation seule n'a pas fonctionné pour moi. 

mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ \
  -Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq \  
  -DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3
1
Jonathan Hendler

La solution de @Ric Jafe est ce qui a fonctionné pour moi.

Ceci est exactement ce que je cherchais. Une façon de faire passer le code de test de recherche. Rien d'extraordinaire. Oui, je sais que c'est ce qu'ils disent tous :) Les différentes solutions de plug-in Maven semblent excessives pour mes besoins. J'ai quelques pots qui m'ont été donnés en tant que bibliothèques tierces avec un fichier pom. Je veux qu'il soit compilé/exécuté rapidement. Cette solution que j’ai trivialement adaptée au python a fonctionné à merveille pour moi. Couper et coller dans mon pompon. Le code Python/Perl pour cette tâche se trouve dans ce Q & A: Puis-je ajouter des fichiers JAR au chemin de classes maven 2 Build sans les installer?

def AddJars(jarList):
  s1 = ''
  for elem in jarList:
   s1+= """
     <dependency>
        <groupId>local.dummy</groupId>
        <artifactId>%s</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/manual_jars/%s</systemPath>
     </dependency>\n"""%(elem, elem)
  return s1
1
Paul

Vous pouvez essayer d’utiliser maven-external-dependency-plugin, qui montre une bonne façon d’ajouter des fichiers JAR externes à tout projet Maven. 

https://code.google.com/p/maven-external-dependency-plugin/

0
Joarder Kamal