Publique artefactos SNAPSHOT en Maven usando IVY: ¿cuál es la magia?
Tenemos una situación ligeramente complicada ...
En su mayor parte, hemos estado usando IVY y ANT para administrar nuestras compilaciones y dependencias. Ahora la compañía está avanzando hacia el uso de Maven. Tenemos un conjunto de proyectos llamados bibliotecas comunes que son utilizados por varios de los productos principales.
as bibliotecas @Common usan IVY y se publican en un repositorio IVY. También necesitamos poner a disposición bibliotecas comunes para nuestros nuevos proyectos Maven. Entonces, cuando se crean y publican bibliotecas comunes, también modifiqué el script para publicar en Maven (Artifactory) IVY. Estos son los dos objetivos que ahora se llaman al publicar los proyectos IVY construidos:
<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>
Y aquí está la configuración de IVY que detalla los resolvers:
<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>
Este tipo de trabajo en el que ahora veo los frascos de biblioteca comunes dentro de Artifactory, con SNAPSHOT sustituido por la marca de tiempo única. Sin embargo, el archivo fuente y el archivo IVY xml no tienen SNAPSHOT sustituido. Además, no se genera ningún archivo POM (aunque no sé si esto es necesario.
Así que esto parece estar bien, aunque hay preguntas sobre la necesidad del archivo POM y el nombre de la versión del IVY xml y el archivo fuente. Sin embargo, cuando ahora procedo a especificar una dependencia de uno de los proyectos de Maven a una de las versiones SNAPSHOT de los proyectos de biblioteca comunes, se queja de que no puede resolver la dependencia:
Artefacto faltante com.smartstream.common_library: common_library_dao: jar: 4.0.0.5-4-SNAPSHOT: compile
He intentado especificar los repositorios en Artifactory a través del archivo POM y a través del archivo de configuración de Maven, pero no tendré mucho éxito:
<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>
Lo extraño es que si hago que IVY publique una versión en lugar de una INSTANTÁNEA en el repositorio libs-release-local de Artifactory, todo se resuelve como es de esperar. Además, si especifico la marca de tiempo única como parte de la versión de dependencia (el sustituto de SNAPSHOT), también lo resuelve. Esto muestra que los proyectos de Maven pueden resolverse contra Artifactory, solo que algo anda mal con las versiones SNAPSHOT.
He cavado por todas partes con poca esperanza en este tema. Si puede proporcionar alguna información, será muy apreciada.