В соответствии с документацией , выпуск Maven :выполняет цель проверки проекта, а затем разветвляет новый экземпляр Maven для его сборки. По какой-то причине разветвленный экземпляр игнорирует settings.xml
пользователя, что вызывает ошибку в моем случае, потому что этот файл имеет определение свойства, которое используется для составления URL-адреса репозитория в родительском pom.
Пользовательский settings.xml
Определение свойства в профиле «нексус», который всегда активен.
nexus
http://host.com/nexus/content/repositories
nexus
Родительский pom.xml
Использование определенного свойства для составления URL-адреса репозитория.
nexus
${dist.url}/releases
Команда выполнена:
mvn release:perform
Вывод (после того, как он указывает на успешную проверку, сборку, тестирование и упаковку проекта):
[INFO] Uploading: ${dist.url}/releases/com/acme/access/my-project/1.0/my-project-1.0.jar
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD FAILURE
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 3.659s
[INFO] [INFO] Finished at: Wed Aug 01 14:40:23 EDT 2012
[INFO] [INFO] Final Memory: 21M/307M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [WARNING] The requested profile "nexus" could not be activated because it does not exist.
[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project my-project: Failed to deploy artifacts: Could not transfer artifact com.acme.access:my-project:jar:1.0 from/to nexus (${dist.url}/releases): Error transferring file: no protocol: ${dist.url}/releases/com/acme/access/my-project/1.0/my-project-1.0.jar -> [Help 1]
Обратите внимание, как разветвленный экземпляр Maven пытается загрузить в ${dist.url}, что указывает на то, что свойство, определенное в settings.xml, не было прочитано. Также в предупреждающем сообщении сообщается, что профиль «nexus» не найден. Я предполагаю, что основной экземпляр Maven передал информацию о профиле разветвленному экземпляру, чтобы он знал, что нужно ее искать, но, поскольку он проигнорировал (или не нашел )пользовательский файл settings.xml, он не смог найти этот профиль.
Единственный найденный мной способ обойти это — вручную указать местоположение файла settings.xml
с помощью аргумента -s
командной строки Maven, «обернутого» аргументом плагина arguments
, как в
mvn release:perform -Darguments="-s C:\Users\theuser\.m2\settings.xml"
Плагин ведет себя ожидаемым/правильным образом? Есть ли способ сохранить определение свойства внутри пользовательского settings.xml
без указания местоположения файла, как я сделал выше?
Дополнительная информация:
Проблема, по-видимому, связана именно с тем, что плагин не находит settings.xml
пользователя, поскольку копирование информации профиля в глобальный settings.xml
заставляет его работать.
Пользовательский settings.xml
имеет правильное имя/созданный, потому что запуск help:active-profiles
указывает на то, что профиль активен. Сборка и развертывание вручную с помощью mvn clean deploy
также работает правильно (, т. е. URL репозитория вычисляется правильно, и артефакт загружается ).