Публиковать артефакты SNAPSHOT в Maven, используя IVY - что за магия?
У нас небольшая запутанная ситуация ...
По большей части мы использовали IVY и ANT для управления нашими сборками и зависимостями. Сейчас компания движется к использованию Maven. У нас есть ряд проектов, называемых общими библиотеками, которые используются несколькими основными продуктами.
Общие библиотеки используют IVY и публикуются в хранилище IVY. Нам также нужно сделать общие библиотеки доступными для наших новых проектов Maven. Поэтому, когда создаются и публикуются общие библиотеки, я модифицировал скрипт для публикации в Maven (Artifactory), а также в IVY. Вот две цели, которые теперь вызываются при публикации построенных проектов IVY:
<target name="publish-ivyrepo" depends="load-ivysettings">
<ivy:resolve file="ivy.xml" />
<ivy:publish
module="${ant.project.name}"
artifactspattern="${dist.dir}/[artifact].[ext]"
resolver="integration"
pubrevision="${build.version}"
status="integration"
overwrite="true"
update="true"/>
</target>
<target name="publish-artifactory" depends="load-ivysettings">
<ivy:resolve file="ivy.xml" />
<ivy:publish
module="${ant.project.name}"
artifactspattern="${dist.dir}/[artifact].[ext]"
resolver="artifactory"
pubrevision="${build.version}-SNAPSHOT"
status="integration"
overwrite="true"
update="true"/>
</target>
А вот настройки IVY, детализирующие резольверы:
<sftp name="integration" checkmodified="true" changingPattern=".*" host="host" user="ivy" userPassword="abc">
<ivy pattern="${ivy.integration.default.root}/${ivy.public.default.ivy.pattern}"/>
<artifact pattern="${ivy.integration.default.root}/${ivy.public.default.artifact.pattern}"/>
</sftp>
<url name="artifactory" checkmodified="false" changingPattern=".*" m2compatible="true">
<ivy pattern="http://server/artifactory/libs-snapshot-local/${maven.default.ivy.pattern}"/>
<artifact pattern="http://server/artifactory/libs-snapshot-local/${maven.default.artifact.pattern}"/>
</url>
Этот вид работы заключается в том, что теперь я вижу общие библиотеки Jar внутри Artifactory, где SNAPSHOT заменяет уникальную метку времени. Однако исходный файл jar и файл IVY xml не имеют замещенной SNAPSHOT. Кроме того, файл POM не генерируется (хотя я не знаю, если это необходимо.
Так что, похоже, все в порядке, хотя есть вопросы относительно необходимости использования файла POM и наименования версии XML-файла IVY и jar-кода источника. Однако, когда я сейчас продолжаю указывать зависимость от одного из проектов Maven к одной из версий SNAPSHOT проектов общей библиотеки, он жалуется, что не может разрешить зависимость:
Отсутствует артефакт com.smartstream.common_library: common_library_dao: jar: 4.0.0.5-4-SNAPSHOT: компилировать
Я попытался указать репозитории для Artifactory через POM-файл и через файл настроек Maven.
<repository>
<id>test</id>
<name>simple test</name>
<url>http://server/artifactory/libs-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
Что странно, если я получу IVY для публикации релиза, а не SNAPSHOT в хранилище libs-release-local Artifactory, все разрешится так, как вы ожидаете. Кроме того, если я указываю уникальную метку времени как часть версии зависимости (подстановка SNAPSHOT), она также разрешает ее. Итак, это показывает, что проекты Maven могут противостоять Artifactory, просто что-то не так с версиями SNAPSHOT.
Я копался высоко и низко, почти не надеясь на этот вопрос. Если вы можете предоставить какое-либо понимание, это будет высоко оценено.