web-dev-qa-db-fra.com

Quelle est la meilleure façon d'éviter le pot de maven?

J'utilise un plugin différent (ant4Eclipse) pour stocker mes fichiers. Quelle est la meilleure façon d'éviter l'exécution du plugin maven-jar?

  • J'ai essayé de supprimer le <plugin>maven-jar-plugin</plugin>
  • J'ai essayé de <exclude> ** / * < / exclude>
  • J'ai essayé de <skip>true</skip>

Aucun n'a fonctionné

45
unj2

Dans Maven 3.0.x (j'ai essayé 3.0.2), vous pouvez désactiver maven-jar-plugin en liant le default-jar exécution dans une phase inexistante, comme @ bmargulies suggéré . Malheureusement, cela ne fonctionne pas dans 2.2.1, mais vous pouvez l'empêcher d'interférer avec votre propre pot en définissant une alternative <finalName> et <classifier> pour le default-jar exécution; il créera toujours un bocal, mais il sera défini comme un artefact secondaire pour le projet et n'écrasera pas celui que vous avez créé. Voici un exemple qui devrait fonctionner à la fois dans Maven 2 et Maven 3:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <version>0.1-SNAPSHOT</version>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
            <configuration>
              <finalName>unwanted</finalName>
              <classifier>unwanted</classifier>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Une fois que vous avez désactivé maven-jar-plugin, maven-install-plugin peut aussi vous causer des ennuis. Dans Maven 3, il peut être désactivé comme maven-jar-plugin: lier default-install à une phase inexistante. Cependant, dans Maven 2 maven-install-plugin requiert que le target/classes existe et il installera le pot factice lorsqu'il n'y a pas d'artefact principal présent.

49
peterj

Cela devrait faire l'affaire - notez l'utilisation de <id>default-jar</id> et <phase/>.

  <build>
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase/>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
33
redhot

Dans mon cas, je voulais seulement désactiver le plugin jar car le pot était vide. Vous pouvez utiliser l'option skipIfEmpty dans la configuration du plugin

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <skipIfEmpty>true</skipIfEmpty>
    </configuration>
</plugin>
6
bheussler

Que se passe-t-il si vous le déclarez?

<packaging>pom</packaging>

Même s'il fait ce que vous recherchez, soyez prudent. Je ne sais pas s'il pourrait y avoir des effets secondaires négatifs - tels que d'autres projets Maven qui dépendent de votre pot ne pouvant pas le localiser.

5
Drew Wills

En utilisant maven 3.3.9, ce qui suit a fonctionné pour moi:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.2</version>
    <executions>
        <execution>
            <id>default-jar</id>
            <phase>none</phase>
            <configuration>
                <finalName>unwanted</finalName>
                <classifier>unwanted</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>3.0.0-M1</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

Donc, dans le cas du plugin maven-jar, je l'ai lié à une phase inexistante. Pour le plugin maven-install, j'ai utilisé le paramètre de configuration "skip". Le documentation à ce sujet indique: "Définissez-le sur true pour contourner l'installation des artefacts. Utilisez-le pour les artefacts qui n'ont pas besoin d'être installés dans le référentiel local."

3
Erik Nellessen

Liez explicitement le plugin jar à une phase qui n'existe pas.

3
bmargulies

Comme d'autres l'ont dit, il n'est pas possible de le désactiver, sauf en utilisant <packaging>pom</packaging>, qui désactive tout et n'est probablement pas ce que vous voulez.

Même s'il générera deux fois, une solution de travail consiste à lier votre processus jar à la phase package, car cela est garanti pour s'exécuter après la valeur par défaut. En écrasant le même fichier JAR, vous constaterez que le vôtre est utilisé là où l'original aurait été.

2
Brett Porter

J'utilise un plugin différent pour stocker mes fichiers. Quelle est la meilleure façon d'éviter l'exécution du plugin maven-jar?

Premièrement la jar:jar l'objectif est lié par défaut sur la phase package pour un projet avec un packaging de type jar. Deuxièmement, il n'y a aucun moyen de dissocier un plugin lié à une phase. Donc, si vous utilisez un autre plugin (?), Acceptez de produire 2 JAR ou de changer le packaging (mais je ne pense pas que cela fonctionnera bien).

0
Pascal Thivent