2010-10-13 30 views
3

J'utilise Ivy pour publier un instantané d'un Jar construit dans un référentiel Nexus hébergé localement en utilisant la cible Ant suivante.Ivy: Récupération de Snapshot publiée dans Nexus et ses dépendances

<target name="publish"> 
    <ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" overwrite="true"> 
     <artifacts pattern="${dist.dir}/[artifact].[ext]" /> 
    </ivy:publish> 
</target> 

Cela semble fonctionner très bien, ce qui dans le pot et son ivy.xml associé étant présent dans le référentiel (avec les noms de fichiers mymodule-SNAPSHOT.jar et lierre SNAPSHOT.jar). Plus tard, dans un autre script de construction, je souhaite récupérer le Jar et ses dépendances associées (c'est-à-dire comme spécifié dans son ivy.xml) dans un répertoire.

Ceci est la cible Ant que j'utilise.

<target name="deploy"> 
    <delete dir="deploy" /> 
    <mkdir dir="deploy" /> 
    <ivy:settings file="${ivy.dir}/ivy_deploy_settings.xml" /> 
    <ivy:retrieve organisation="myorg" module="mymodule" 
     inline="true" revision="SNAPSHOT" pattern="deploy/[artifact].[ext]"/> 
</target> 

Ceci récupère le Jar dans le répertoire, mais pas ses dépendances. De plus, si j'ajoute

conf="impl" 

à récupérer, il échoue que la configuration est introuvable. En tant que tel, il semble que la récupération ne fait simplement pas référence au fichier ivy.xml et donc ne résout pas les dépendances.

Est-ce que cela devrait fonctionner ou est-ce que je ne comprends pas quelque chose?

Répondre

4

J'ai maintenant résolu ce problème. Je crois que le problème est simplement que Nexus fonctionne en utilisant des fichiers POM plutôt que des fichiers Ivy (par défaut au moins - je ne vois pas d'options de configuration pertinentes).

La solution est donc de générer un POM approprié et de le publier avec le Jar.

<target name="publish"> 
    <property name="generated.ivy.file" value="${dist.dir}/ivy.xml" /> 
    <ivy:deliver deliverpattern="${generated.ivy.file}" 
     organisation="${ivy.organisation}" 
     module="${ivy.module}" status="integration" 
     revision="${ivy.revision}" 
     pubrevision="SNAPSHOT" 
     conf="impl" /> 

<ivy:makepom ivyfile="${generated.ivy.file}" 
    pomfile="${dist.dir}/${ivy.module}.pom"/> 

    <ivy:publish resolver="nexus_snapshot" pubrevision="SNAPSHOT" 
     publishivy="false" status="integration" overwrite="true"> 
     <artifacts pattern="${dist.dir}/[artifact].[ext]" /> 
     <artifact name="${ivy.module}" type="pom" ext="pom"/> 
    </ivy:publish> 
</target> 

Notez que je suis générer un fichier Ivy pour le module en cours (et ma configuration désirée) pour créer le POM de.

+1

Vous pouvez simplement ajouter le fichier pom à votre liste d'artefacts publiés, dans le fichier ivy.xml. De cette manière, la tâche de publication le récupère à l'aide de l'attribut de modèle d'artefacts –