Comment puis-je spécifier le répertoire de sortie uniquement pour empaqueter un pot?
http://maven.Apache.org/plugins/maven-jar-plugin/jar-mojo.html cela montre tous les paramètres, mais comment puis-je les définir dans la ligne de commande ou pom.xml?
en ligne de commande
-DoutputDirectory=<path>
et dans pom.xml
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<outputDirectory>/my/path</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
À propos de l'utilisation de la ligne de commande:
La documentation des paramètres spécifie que le paramètre est initialisé à la valeur de la propriété ${project.build.directory}
(qui est la propriété faisant référence au dossier cible)
Voici ce que cela signifie:
Pour les mojos qui sont destinés à être exécutés directement à partir de la CLI, leurs paramètres fournissent généralement un moyen à configurer via les propriétés système au lieu d'un
<configuration/>
section dans le POM. La documentation du plugin pour ces paramètres listera une expression qui dénote les propriétés système de la configuration. Dans le mojo ci-dessus, le paramètre url est associé à l'expression${query.url}
, ce qui signifie que sa valeur peut être spécifiée par la propriété systèmequery.url
comme indiqué ci-dessous:
mvn myquery:query -Dquery.url=http://maven.Apache.org
Référence:
Toutefois, ${project.build.directory}
n'est pas une propriété système, c'est une propriété de l'objet ProjectBuild
.
Vous ne pouvez pas définir les propriétés internes de maven directement sur la ligne de commande, mais vous pouvez y arriver avec une petite astuce en ajoutant des espaces réservés dans votre pom.xml:
<build>
<directory>${dir}</directory>
</build>
Maintenant, le répertoire de sortie est défini via la propriété de la ligne de commande (en utilisant -Ddir=somedirectory
). Inconvénient: maintenant, vous devez toujours utiliser le -Ddir
paramètre sur la ligne de commande.
Mais il y a aussi de l'aide ici. Utilisez simplement un profil lorsque vous souhaitez configurer le répertoire:
<profiles>
<profile>
<id>conf</id>
<build>
<directory>${dir}</directory>
</build>
</profile>
</profiles>
Vous pouvez maintenant faire
# everything goes in someOtherDir instead of target
mvn clean install -Pconf -Ddir=someOtherDir
ou tout simplement vieux
# everything goes in target
mvn clean install
Maintenant, si vous souhaitez simplement modifier le répertoire de sortie du pot à partir de la ligne de commande sans tout rediriger depuis la cible, nous modifierons le profil pour configurer le plugin à partir d'une propriété de ligne de commande:
<profiles>
<profile>
<id>conf</id>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<outputDirectory>${dir}</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
L'utilisation est identique à ci-dessus:
# everything goes in someOtherDir instead of target
mvn clean install -Pconf -Ddir=someOtherDir
Merci @Sean Patrick Floyd pour l'excellente explication.
Au lieu de créer un profil et d'utiliser mvn
toujours par le commutateur -P
, J'aimerais utiliser une autre façon de créer une valeur par défaut de la propriété $ {dir}.
Définissez simplement la valeur par défaut de ${dir}
Comme ${project.build.directory}
<properties>
<dir>${project.build.directory}</dir>
</properties>
et comme pour @Sean Patrick Floyd, définissez outputDirectory.
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<outputDirectory>${dir}</outputDirectory>
</configuration>
</plugin>
</plugins>
Vous pouvez maintenant faire
# everything goes in someOtherDir instead of target
mvn clean install -Ddir=someOtherDir
ou tout simplement vieux
# everything goes in target
mvn clean install
Si vous souhaitez également copier les fichiers de dépendance dans un dossier cible, utilisez maven-dependency-plugin.
<project>
...
...
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>