web-dev-qa-db-fra.com

Maven: Construisez un seul module à partir d'un projet multi-module

J'ai un projet Maven multi-modules dans lequel je veux juste publier un module de mise à jour plutôt que le projet entier. Cela est dû à certaines exigences spécifiques, dans lesquelles une version d'un projet entier n'est pas appelée. Seul un sous-ensemble de la bibliothèque a besoin des correctifs, et donc de la version.

Cependant, lorsque j'exécute un mvn release:prepare, je reçois le message d'erreur Non-resolvable parent POM - J'ai configuré la relation POM parent dans le projet de module avec la balise relativePath, mais cela ne semble pas fonctionner.

Est-il possible de ne publier qu'un module plutôt que de publier l'ensemble du projet?.

Merci d'avance.

MODIFIER

Pom parent

<groupId>com.domain</groupId>
<artifactId>project-parent</artifactId>
<version>0.5.1-SNAPSHOT</version>

<packaging>pom</packaging>

<modules>
    <module>library1</module>
    <module>library2</module>
    <module>library3</module>
</modules>

Les modules POM sont les suivants:

<parent>
    <groupId>com.domain></groupId>
    <artifactId>project-parent</artifactId>
    <version>0.5.1-SNAPSHOT</version>
</parent>

<artifactId>library1</artifactId>

Maintenant, je veux juste publier la nouvelle version de library1 et pas d’autres

16
sangupta
mvn -pl .,library1 clean install

Le "." construira votre parent pom.xml et "library1" est le nom du module que vous lui avez donné.

Si vous ne voulez pas construire le pom.xml parent, vous pouvez aussi faire:

mvn -pl library1 clean install

ou dans votre cas, peut-être:

mvn -pl library1 deploy

J'ai utilisé "deploy" car "release" n'est pas une phase du cycle de vie de la génération Maven. 

15
Gene

Essayez d’exécuter les commandes maven à partir du répertoire/project parent avec le commutateur -pl <project name> .

8
matt b

Je pense que Maven essaie de vous dire que le parent que vous avez défini n'est pas publié/stable. Dans votre pom, la version parente est "0.5.1-SNAPSHOT", ce qui ne peut/ne devrait pas fonctionner si vous souhaitez publier un seul module de bibliothèque, car il indiquerait un élément non défini de manière unique. Existe-t-il une version stable sur laquelle vous pouvez pointer? Sinon, peut-être que le commutateur -am fonctionne en combinaison avec -pl?

Modifier

J'ai essayé cela tout à l'heure avec maven 3.2 et il me demande quelle version du parent devrait être définie/résolue. Comme je l’ai dit précédemment, vous avez besoin de numéros de version stables pour que la version fonctionne.

mvn release:prepare -pl library1
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building library1 1.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ library1 ---
[INFO] Verifying that there are no local modifications...
[INFO]   ignoring changes on: **\release.properties, **\pom.xml.next, **\pom.xml.releaseBackup,     **\pom.xml.backup, **\pom.xml.branch, **\pom.xml.tag [INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\temp\mavenTest\library1
[INFO] Checking dependencies and plugins for snapshots ...
There are still some remaining snapshot dependencies.
: Do you want to resolve them now? (yes/no) no: : yes
Dependency type to resolve,: specify the selection number ( 0:All 1:Project Dependencies 2:Plugins 3:Reports 4:Extensions ): (0/1/2/3) 1: : 1
Dependency 'testme:parent' is a snapshot (1.1-SNAPSHOT)
: Which release version should it be set to? 1.1: :
0
Konstantin

l'astuce est à la fois:

  1. répéter le paramètre -pl dans un paramètre supplémentaire -Darguments, pour transmettre le paramètre -pl aux processus Child-Maven
  2. le mystérieux mavenExecutor, pour pouvoir créer les processus Child-Maven en utilisant le paramètre -pl donné

Cela devrait fonctionner:

mvn -pl library1 -DmavenExecutorId=forked-path -Darguments="-pl library1" 
0
mmoossen