Версия Maven - плагин версии maven-plugin 2.2
Maven - 3.1.0.
Я использую версии-maven-plugin: 2.2 в моем проекте pom.xml(как показано ниже). Помимо обычной конфигурации файла pom.xml, я просто показываю снимок основного кода ниже:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>tools-parent</artifactId>
<version>0.0.7-SNAPSHOT</version>
<packaging>pom</packaging>
<description>
Infrastructure related to the "vapp" and
"deployer" utilities.
</description>
<parent>
<groupId>com.company.product</groupId>
<artifactId>deploy-parent</artifactId>
<version>0.0.6-SNAPSHOT</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.4</version>
<configuration>
<connectionType>connection</connectionType>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<!-- Make sure that only non-snapshot versions are used for the dependencies. Only active when property 'snapshotDependencyAllowed' is false. -->
<id>enforce-no-snapshots</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<skip>${snapshotDependencyAllowed}</skip>
<rules>
<requireReleaseDeps>
<message>No Snapshots Allowed!</message>
</requireReleaseDeps>
<requireReleaseVersion>
<message>No Snapshots Allowed!</message>
</requireReleaseVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Теперь, когда я запускаю: mvn clean install, он успешно строится.
ПРИМЕЧАНИЕ. В моем проекте у меня есть родительский раздел, где я зависим от объекта-родителя-артефакта, чей идентификатор группы "com.company.product" - это тот же самый идентификатор группы, что я хочу для инструмента-родительского артефакта (чей pom.xml, который я вставил выше), но deploy-parent - это артефакт другого репозитория/проекта.
Когда я запускаю: mvn версии: set -DnewVersion = 0.0.7, я получаю следующее сообщение об ошибке.
[INFO] ------------------------------------------------------------------------
[INFO] Building tools-parent 0.0.7-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.2:set (default-cli) @ tools-parent ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /user/home/u100123/giga/tools
[INFO] Processing change of com.company.product:tools-parent:0.0.7-SNAPSHOT -> 0.0.7
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] tools-parent .................................... FAILURE [1.093s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.404s
[INFO] Finished at: Fri May 01 20:44:22 GMT-00:00 2015
[INFO] Final Memory: 12M/246M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:versions-maven-plugin:2.2:set (default-cli) on project tools-parent: Execution default-cli of goal org.codehaus.mojo:versions-maven-plugin:2.2:set failed. NullPointerException -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
СЕЙЧАС, когда я меняю версию версий maven-plugin на 2.1 (что я использовал ранее), команда mvn: set -DnewVersion = 0.0.7 работает успешно и файл pom.xml успешно изменяется на <version>0.0.7</version>
для инструмента-родительского артефакта.
С версией 2.2 это дает мне ошибку и не меняет версию на 0.0.7.
- Любые причины отказа 2.2? Что можно сделать для его решения?
Ответы
Ответ 1
Похоже на ошибку.
Решение:
1. Я должен добавить свойство <groupId>com.company.product</groupId>
вне... раздела , а также, то есть для родительских инструментов, версия NOW version-maven-plugin: 2.2 работает нормально, т.е. я добавил верхняя строка (как показано ниже). Единственное, что тогда использует родительский раздел (помимо наследования основного кода того, что развёртывает-родитель, выдает проект-родительский проект). Почему groupId необходимо определить вывод родительского раздела для инструментов artifactId-parent, когда он уже существует в родительском разделе для версии-maven-plugin: 2.2 для успешной работы.
Самое главное:. Эта проблема возникает только в том случае, если ваш pom.xml для проекта/модуля имеет раздел <parent>
, где родительский раздел artifactId не является родителем самого проекта (ситуация дяди Maven), то есть, если инструмент-родительский артефакт определен в родительском разделе другого модуля (скажем, tools-child), то версия 2.2 будет работать успешно. Но если в родительском разделе tools-child не содержится artifactId как "tools-parent" и что-то еще для ex: deploy-parent/some-different-project-artifact (, который находится в другом проекте в вашем исходном элементе управления инструмент), то для инструмента-child artifactId нам нужно groupId значение, также установленное вне родительского раздела (даже если groupId родительского раздела artifactId одинаково/отличается от инструментов - child groupId).
<groupId>com.company.product</groupId>
<artifactId>tools-parent</artifactId>
<version>0.0.7-SNAPSHOT</version>
<packaging>pom</packaging>
<description>
Infrastructure related to the "vapp" and
"deployer" utilities.
</description>
<parent>
<groupId>com.company.product</groupId>
<artifactId>deploy-parent</artifactId>
<version>0.0.6-SNAPSHOT</version>
</parent>
- ИЛИ
2. Вернитесь к версиям-maven-plugin: 2.1
Ответ 2
Чтобы добавить к части 2 ответа Аруна, способ использования версии 2.1 плагина:
mvn org.codehaus.mojo:versions-maven-plugin:2.1:set org.codehaus.mojo:versions-maven-plugin:2.1:commit -DnewVersion=0.0.7
Вы должны указать полный идентификатор группы и идентификатор артефакта.
Ответ 3
Обнаружена эта ошибка, сообщенная по проблеме:
https://github.com/mojohaus/versions-maven-plugin/issues/51
Ответ 4
Я столкнулся с NPE, но выяснилось, что причина была иной, чем предложенной ранее. Я отлаживал версию-maven-plugin и узнал, что NPE был вызван отсутствием объявления <version>
зависимостей в списке, указанном в <dependencyManagement>
. Это можно воспроизвести со следующим листингом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>npe</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>NPE Example</name>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!-- missing <version>4.2.0.RELEASE</version> -->
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
</dependencies>
</project>