Publicar artefatos do INSTANTÂNEO no Maven usando IVY - qual é a mágica?
Temos uma ligeira situação complicada ...
Na maioria das vezes, usamos o IVY e o ANT para gerenciar nossas compilações e dependências. Agora a empresa está avançando no uso do Maven. Temos um conjunto de projetos chamados bibliotecas comuns que são usados por vários dos principais produto
s bibliotecas @Common usam IVY e são publicadas em um repositório IVY. Também precisamos disponibilizar bibliotecas comuns para nossos novos projetos Maven. Portanto, quando as bibliotecas comuns são criadas e publicadas, modifiquei o script para publicar no Maven (Artifactory) e também no IVY. Aqui estão os dois destinos que agora são chamados ao publicar os projetos IVY criados:
<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>
E aqui estão as configurações do IVY que detalham os resolvedores:
<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 trabalho agora vejo os frascos comuns da biblioteca no Artifactory, com o INSTANTÂNEO substituído pelo carimbo de data / hora exclusivo. No entanto, o jar de origem e o arquivo xml IVY não têm o INSTANTÂNEO substituído. Além disso, nenhum arquivo POM está sendo gerado (embora eu não saiba se isso é necessário.
Então, isso parece estar bem, embora haja perguntas sobre a necessidade do arquivo POM e a nomeação da versão do xml do IVY e do jar de origem. No entanto, quando agora passo a especificar uma dependência de um dos projetos Maven para uma das versões SNAPSHOT dos projetos de bibliotecas comuns, ela reclama que não pode resolver a dependência:
Missing artefato com.smartstream.common_library: common_library_dao: jar: 4.0.0.5-4-SNAPSHOT: compile
entei especificar os repositórios para o Artifactory por meio do arquivo POM e do arquivo de configurações do Maven com pouco sucess
<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>
O que é estranho é que, se eu conseguir que a IVY publique uma versão em vez de um INSTANTÂNEO no repositório libs-release-local do Artifactory, tudo será resolvido conforme o esperado. Além disso, se eu especificar o registro de data e hora exclusivo como parte da versão de dependência (o substituto do SNAPSHOT), ele também o resolverá. Portanto, isso mostra que os projetos do Maven podem resolver contra o Artifactory, apenas que algo está errado com as versões do INSTANTÂNE
Eu pesquisei alto e baixo com pouca esperança sobre esse assunto. Se você puder fornecer informações, isso será muito apreciado.