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.

questionAnswers(2)

yourAnswerToTheQuestion