web-dev-qa-db-fra.com

construire un projet maven avec des bibliothèques propriétaires incluses

Comment créer maven pom, qui rendra le projet constructible, puis-je inclure des pots de propriété avec mon projet directement sans avoir à les retirer du référentiel? quelqu'un a fait ça avant?

MODIFIER :

Je ne veux pas le rendre exécutable en construisant Assembly avec un pot de dépendances, je veux qu'il soit constructible. Ainsi, toute personne ayant ce projet est en mesure de le construire, même si des bocaux ne se trouvent nulle part dans aucun référentiel.

39
London

1 Soit vous pouvez inclure ce pot dans votre chemin de classe d'application
2 vous pouvez installer un fichier jar particulier dans vos réopos maven en

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
47
Jigar Joshi

Les solutions possibles sont de mettre vos dépendances dans src/main/resources puis dans votre pom:

<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

Remarque: les dépendances du système ne sont pas copiées dans le pot/la guerre résultant
(voir Comment inclure les dépendances système dans war construit en utilisant maven )

35
ant

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

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

Ensuite, installez votre pot 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>
19
mostar

Pourquoi ne pas exécuter quelque chose comme Nexus , votre propre dépôt Maven que vous pouvez télécharger des fichiers jar propriétaires tiers, et également proxy d'autres référentiels publics, pour économiser sur la bande passante?

This a également de bonnes raisons d'exécuter votre propre gestionnaire de référentiel maven.

7
Larry Shatzer

Vous pouvez l'obtenir auprès de votre pilote local comme ci-dessous:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
7
Alireza Fattahi

Le moyen vraiment rapide et sale est de pointer vers un fichier local:

<dependency>
      <groupId>sampleGroupId</groupId>  
       <artifactId>sampleArtifactId</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

Cependant, cela ne vivra que sur votre machine (évidemment), car le partage a généralement du sens d'utiliser une archive m2 appropriée (nexus/artifactory) ou si vous n'en avez pas ou si vous ne voulez pas en créer un de maven local archive structurée et configurez un "référentiel" dans votre pom: local:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

éloigné:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>
5
fl0w

Un bon moyen d'y parvenir est d'avoir un serveur miroir Maven tel que Sonatype Nexus . Il est gratuit et très facile à configurer (application web Java). Avec Nexus, on peut avoir un référentiel privé (équipe, entreprise, etc.) avec une capacité de déployer des applications tierces et internes, tout en enregistrant d'autres référentiels Maven comme faisant partie du même serveur. De cette façon, les paramètres Maven locaux référenceraient uniquement le seul serveur Nexus privé et toutes les dépendances seront résolues en l'utilisant.

3
01es

Créez un nouveau dossier, disons local-maven-repo à la racine de votre projet Maven.

Ajoutez simplement un dépôt local dans votre <project> de votre pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Ensuite, pour chaque pot externe que vous souhaitez installer, allez à la racine de votre projet et exécutez:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

(Copié de ma réponse sur une question similaire )

1
Anthony O.

Vous pouvez utiliser le maven-Assembly-plugin et créer un pot avec toutes les dépendances incluses.

1
jvdbogae

Vous pouvez soit ajouter le pot à votre projet et jouer avec le plugin maven-Assembly, soit ajouter le pot à votre dépôt local:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true

Where: <path-to-file>  the path to the file to load
       <group-id>      the group that the file should be registered under
       <artifact-id>   the artifact name for the file
       <version>       the version of the file
       <packaging>     the packaging of the file e.g. jar
1
David J. Liszewski

Je pense que la "bonne" solution ici est d'ajouter vos bibliothèques propriétaires à votre propre référentiel. Cela devrait être simple: créez pom pour votre projet de bibliothèque et publiez la version compilée sur votre référentiel. Ajoutez ce référentiel à la liste des référentiels pour votre projet de messagerie et exécutez la génération. Je crois que cela fonctionnera pour vous.

1
AlexR