Как лучше всего избегать мавен-банок?

Я использую другой плагин (ant4eclipse) для хранения файлов. Каков наилучший способ избежать запуска плагина maven-jar?

  • Я пытался удалить <plugin>maven-jar-plugin</plugin>
  • Я пытался <exclude> ** / * < / exclude>
  • Я пытался <skip>true</skip>

Никто не работал

8 ответов

В Maven 3.0.x (я пробовал 3.0.2) можно отключить maven-jar-plugin связывая default-jar выполнение к несуществующей фазе, как предложил @bmargulies. К сожалению, это не работает в 2.2.1, но вы можете предотвратить его вмешательство в ваш собственный jar, установив альтернативу <finalName> а также <classifier> для default-jar исполнение; он все равно создаст jar, но он будет установлен как вторичный артефакт для проекта и не будет перезаписывать созданный вами. Вот пример, который должен работать как в Maven 2, так и в 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>never</phase>
            <configuration>
              <finalName>unwanted</finalName>
              <classifier>unwanted</classifier>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

После того, как вы отключили maven-jar-plugin, maven-install-plugin может доставить вам неприятности тоже. В Maven 3 его можно отключить так же, как maven-jar-plugin: bind default-install к несуществующей фазе. Однако в Maven 2 maven-install-plugin требует, чтобы target/classes каталог существует, и он установит фиктивную флягу, когда нет основного артефакта.

Это должно сработать - обратите внимание на использование <id>default-jar</id> а также <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>

В моем случае я только хотел отключить плагин jar, потому что jar был пуст. Вы можете использовать skipIfEmpty опция в конфигурации плагина

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

Что произойдет, если вы заявите об этом?

<packaging>pom</packaging>

Даже если он делает то, что вы ищете, будьте осторожны. Я не уверен, могут ли быть негативные побочные эффекты - например, другие проекты maven, которые зависят от того, не может ли ваша банка найти ее.

Используя maven 3.3.9, у меня сработало следующее:

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

Так что в случае maven-jar-plugin я привязал его к несуществующей фазе. Для maven-install-plugin я использовал параметр конфигурации "skip". В документации по этому поводу говорится: "Установите значение true, чтобы обойти установку артефактов. Используйте это для артефактов, которые не нужно устанавливать в локальный репозиторий".

Явно свяжите плагин jar с фазой, которая не существует.

Как уже говорили другие, отключить его невозможно, кроме как с помощью <packaging>pom</packaging>, который выключает все и, вероятно, не то, что вы хотите.

Даже если он будет сгенерирован дважды, рабочим решением будет привязать ваш процесс jar к package фаза, поскольку это гарантированно будет работать после значения по умолчанию. Перезаписав тот же JAR-файл, вы обнаружите, что ваш используется там, где был бы оригинал.

Я использую другой плагин, чтобы испортить мои файлы. Каков наилучший способ избежать запуска плагина maven-jar?

Во-первых, jar:jar по умолчанию цель связана с package фаза для проекта с упаковкой типа jar, Во-вторых, нет способа отсоединить плагин, привязанный к фазе. Итак, если вы используете другой плагин (?), Либо согласитесь произвести 2 JAR-файла, либо измените упаковку (но я не думаю, что это будет работать хорошо).

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>        
Другие вопросы по тегам