У нас небольшая запутанная ситуация ...
По большей части мы использовали 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-файл и XML-файл IVY не заменены SNAPSHOT. Кроме того, файл POM не создается (хотя я не знаю, нужно ли это.
Так что, похоже, это нормально, хотя есть вопросы относительно необходимости файла POM и наименования версии IVY xml и исходного файла jar. Однако, когда я перехожу к указанию зависимости от одного из проектов Maven к одной из версий SNAPSHOT общих библиотечных проектов, он жалуется, что не может разрешить зависимость:
Отсутствует артефакт com.smartstream.common_library: common_library_dao: jar: 4.0.0.5-4-SNAPSHOT: compile
Я попытался указать репозитории для 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.
Я копался везде, почти не надеясь на этот вопрос. Мы будем очень признательны, если вы сможете дать какое-либо понимание.