165 votes

Maven: la meilleure façon de lier externes personnalisées JAR pour mon projet?

C'est mon premier couple de jours à l'apprentissage de Maven et je suis toujours aux prises avec les bases. J'ai un externe .fichier jar (non disponible au public de titres) que j'ai besoin de faire référence dans mon projet et je suis à essayer de comprendre ce que ma meilleure option est.

C'est un petit projet sans un référentiel central pour les bibliothèques, de sorte qu'il doit être soit un référentiel local (en quelque sorte ajouté au contrôle de code source, je ne sais pas si c'est censé être de cette façon?) ou les .pot doit être stocké sur le disque, en dehors de toute formelle référentiel.

1) qu'est-Ce que ma meilleure option pour ajouter de la .fichier jar pour mon projet de références avec maven étant donné que je veux à la fois le projet et la bibliothèque pour être en contrôle de code source?

2) j'ai toujours n'arrive pas à avoir de l'Éclipse voir la dépendance. J'ai ajouté manuellement à la section de la pom, et il s'affiche bien dans la liste de Dépendances dans m2eclipse. mvn compile et mvn package de réussir, mais l'exécution du programme se traduit par:

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

C'est après l'édition de la POM:

<dependency>
  <groupId>stuff</groupId>
  <artifactId>library</artifactId>
  <version>1.0</version>
  <systemPath>${lib.location}/MyLibrary.jar</systemPath>
  <scope>system</scope>
</dependency>

Dois-je exécuter mvn install:install-fichier même pensé que j'ai déjà la pom.xml modifiés comme ci-dessus?

Merci!

219voto

Charlie Wu Points 2308

Vous pouvez créer un Dépôt de Projet, de sorte que vous n'avez pas à run mvn install:install-file chaque fois que vous travaillez sur un nouvel ordinateur

<repository>
    <id>in-project</id>
    <name>In Project Repo</name>
    <url>file://${project.basedir}/libs</url>
</repository>

<dependency>
    <groupId>dropbox</groupId>
    <artifactId>dropbox-sdk</artifactId>
    <version>1.3.1</version>
</dependency>

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

détail de lire ce post de blog

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

67voto

stalker Points 482

Je pense que vous devriez utiliser mvn install:install-file pour remplir votre dépôt local avec la bibliothèque pots alors vous devez modifier le champ d'application du système de compilation.

Si vous démarrez avec maven je suggère l'utilisation de maven directement pas IDE plugins car il ajoute une couche supplémentaire de complexité.

Comme pour l'erreur, pouvez-vous mettre le nécessaire pots sur votre classpath? Si vous utilisez des types de la bibliothèque, vous devez avoir accès dans l'exécution. Cela n'a rien à voir avec maven lui-même.

Je ne comprends pas pourquoi vous voulez mettre la bibliothèque à la source - c'est pour des sources de code binaire pas les pots.

28voto

FractalizeR Points 12887

Le Maven manuel dit de faire ceci:

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

26voto

Kenny Cason Points 3523

mise à jour depuis, Nous avons installé notre propre serveur Nexus, beaucoup plus facile et plus propre.

Au sein de notre entreprise, nous avons eu quelques pots que nous avons quelques pots qui étaient courantes, mais n'ont pas été hébergée dans des dépôts maven, nous n'avons envie de les avoir dans le stockage local. Nous avons créé un très simple mvn (public) repo Github (mais vous pouvez l'héberger sur un serveur ou en local):
note que c'est seulement idéal pour la gestion de quelques rares chaning fichiers jar

  1. Créer repo GitHub:
    https://github.com/<user_name>/mvn-repo/

  2. Ajouter un Référentiel dans pom.xml
    (Notez que le chemin d'accès complet de fichier raw sera un peu différent que les pensions de nom)

    <repository>
        <id>project-common</id>
        <name>Project Common</name>
        <url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
    </repository>
    
  3. Ajouter la dépendance à l'hôte (Github ou serveur privé)
    un. Tout ce que vous devez savoir, c'est que les fichiers sont stockés dans le motif mentionné par @glitch
    /groupId/artifactId/version/artifactId-version.jar
    b. Sur votre hôte de créer les dossiers pour correspondre à ce modèle.
    j'.e si vous henter code hereave un fichier jar nommé service-sdk-0.0.1.jar, créez le dossier service-sdk/service-sdk/0.0.1/ et placez le fichier jar service-sdk-0.0.1.jar .
    c. Test en essayant de télécharger le jar à partir d'un navigateur (dans notre cas: https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar

  4. Ajouter la dépendance à votre pom.xml fichier:

    <dependency>
        <groupId>service-sdk</groupId>
        <artifactId>service-sdk</artifactId>
        <version>0.0.1</version>
    </dependency>
    
  5. Profitez de

12voto

Nehc Points 81

N'utilisez pas de systemPath. Contrairement à ce que les gens ont dit ici, vous pouvez mettre un externe jar dans un dossier sous votre contrôle répertoire du projet et n'ont Maven trouver comme les autres dépendances. Voici deux étapes cruciales:

  1. Utiliser "mvn install:install-fichier" avec DlocalRepositoryPath.
  2. Configurer un référentiel de dire que le chemin d'accès dans votre POM.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X