Публиковать артефакты 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.

Я копался высоко и низко, почти не надеясь на этот вопрос. Если вы можете предоставить какое-либо понимание, это будет высоко оценено.

Ответы на вопрос(2)

Ваш ответ на вопрос