web-dev-qa-db-fra.com

Maven: spécifiez le répertoire de sortie uniquement pour empaqueter un bocal?

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?

54
Bastl

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>
62
lweller

Expressions des paramètres

À 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ème query.url comme indiqué ci-dessous:

mvn myquery:query -Dquery.url=http://maven.Apache.org

Référence:

Configuration de $ {project.build.directory}

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.

Utilisation de profils

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

Configuration du plugin Jar

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
45
Sean Patrick Floyd

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
3
Aaron

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>
0
impossible