web-dev-qa-db-fra.com

Comment inclure des fichiers jar locaux dans le projet Maven

Je ne veux pas installer quelques pots dans un référentiel Maven (à la fois local/distant). En particulier, j'ai quelques fichiers jar situés dans

c:\work\projects\myapp\src\main\webapp\WEB-INF\lib\test.jar

c:\work\projects\myapp\src\main\webapp\WEB-INF\lib\test2.jar

Comment les inclure dans mon projet lors de leur ouverture/modification avec NetBeans?

23
cometta

Avez-vous envisagé d'ajouter ces deux fichiers JAR en tant que system dépendances ? par exemple.,

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>Sun.jdk</groupId>
      <artifactId>tools</artifactId>
      <version>1.5.0</version>
      <scope>system</scope>
      <systemPath>${Java.home}/../lib/tools.jar</systemPath>
    </dependency>
  </dependencies>
  ...
</project>

Juste un mot de note, ce n'est PAS recommandé et devrait être utilisé avec parcimonie, si jamais.

22
The Alchemist

Bien que cela fonctionne pour utiliser la référence systemPath, il est préférable de créer un référentiel local. Et heureusement, c'est facile à faire.

Création d'un référentiel local contenant des pots non disponibles dans un référentiel public

REMARQUE: j'utilise Eclipse, donc certaines des instructions sont spécifiques à Eclipse. La plupart sont facilement généralisables.


Hypothèses

  • Le pot a été créé par Maven dans un autre projet avec les éléments suivants ...

    <groupId>com.foo</groupId>
    <artifactId>test</artifactId>
    <version>0.1.1</version>
    <packaging>jar</packaging>
    

Dans Project (qui veut accéder aux pots)

  • Créer un répertoire de dépôt juste à côté du répertoire de base du projet
  • Pour chaque pot accessible localement ...
    • ajouter des répertoires pour chaque niveau du groupID (ex./repo/ com/foo)
    • ajouter le nom du pot (aka artifactId) sans la version (ex./repo/com/foo/tester)
    • ajouter un répertoire pour la version du pot (ex./repo/com/foo/test/0.1.1)
    • placez le pot dans ce répertoire (ex. /repo/com/foo/test/0.1.1/test-0.1.1.jar)

Dans pom.xml (pour le projet qui veut accéder aux pots)

  • Définir le référentiel local

    <repositories>
      <repository>
        <id>data-local</id>
        <name>data</name>
        <url>file://${project.basedir}/repo</url>
      </repository>
    </repositories>
    
  • Ajoutez la dépendance au pot local. D'après notre exemple ci-dessus, ce serait ...

    <dependency>
      <groupId>com.foo</groupId>
      <artifactId>test</artifactId>
      <version>0.1.1</version>
    </dependency>
    

Reconstruire

  • Rt cliquez sur pom.xml -> Exécuter en tant que -> build Maven
44
E L Rayle

Dans le passé, je l'ai fait en créant une arborescence de répertoires de référentiel "local" dans le projet lui-même, et en y faisant référence dans le POM en déclarant un référentiel local avec un chemin relatif du projet.

Mais c'est un hack. (Peut-être pas si hacky - selon le commentaire de @ Pascal. Je suis toujours un peu novice Maven, malgré son utilisation pendant environ un an.)

13
Stephen C

Aucune des autres réponses n'a fonctionné pour moi. J'ai dû exécuter une commande légèrement différente ...

mvn deploy:deploy-file -Durl=file:///path/to/yourproject/repo/ -Dfile=mylib-1.0.jar -DgroupId=com.example -DartifactId=mylib -Dpackaging=jar -Dversion=1.0

Voir les étapes complètes dans cet article: https://devcenter.heroku.com/articles/local-maven-dependencies

7
Eric