2010-06-07 6 views
4

J'utilise ant, ivy et nexus repo manager pour construire et stocker mes artefacts. J'ai réussi à tout faire fonctionner: résolution de dépendance et publication. Jusqu'à ce que je rencontre un problème ... (bien sûr!). Je publiais un dépôt de 'release' dans nexus, qui est verrouillé sur 'disable redeploy' (même si vous changez le paramètre 'allow redeploy' (interface utilisateur vraiment boiteuse), vous pouvez imaginer à quel point ça a énervé Je recevais quand mes changements n'étaient pas mis à jour à travers le repo avant que je réalise que cela se produisaitIvy et Snapshots (Nexus)

Quoi qu'il en soit, je dois maintenant tout changer pour utiliser un "Snapshot" repo dans nexus. J'ai essayé une variété de choses, y compris googling étendu, et je n'ai pas obtenu n'importe quoi.L'erreur que je reçois est une mauvaise demande PUT, code d'erreur 400.

Quelqu'un qui a obtenu ce travail s'il vous plaît donner moi une pointe r sur ce qui me manque.

Un grand merci,

Alastair

FYI, voici ma config:

Notez que j'ai supprimé toute tentative d'obtenir des instantanés de travailler comme je ne savais pas ce qui était en fait (potentiellement) utile et ce qui était complet guff. C'est donc la configuration de la version de travail seulement.

Veuillez également noter que j'ai ajouté le fichier ivy.xml XXX-API pour information uniquement. Je ne peux même pas obtenir le xxx-common à publier (et cela n'a même pas de dépendances).

tâche Ant:

<target name="publish" depends="init-publish"> 

    <property name="project.generated.ivy.file" value="${project.artifact.dir}/ivy.xml"/> 
    <property name="project.pom.file" value="${project.artifact.dir}/${project.handle}.pom"/> 

    <echo message="Artifact dir: ${project.artifact.dir}"/> 
    <ivy:deliver 
    deliverpattern="${project.generated.ivy.file}" 
    organisation="${project.organisation}" 
    module="${project.artifact}" 
    status="integration" 
    revision="${project.revision}" 
    pubrevision="${project.revision}" /> 

    <ivy:resolve /> 

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

    <ivy:publish 
    resolver="${ivy.omnicache.publisher}" 
    module="${project.artifact}" 
    organisation="${project.organisation}" 
    revision="${project.revision}" 
    pubrevision="${project.revision}" 
    pubdate="now" 
    overwrite="true" 
    publishivy="true" 
    status="integration" 
    artifactspattern="${project.artifact.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    /> 


</target> 

Couple de fichiers de lierre pour donner une idée des dépendances internes:

projet XXX-commun:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info 
     organisation="com.myorg.xxx" 
     module="xxx_common" 
     status="integration" 
     revision="1.0"> 
</info> 
<publications> 
    <artifact name="xxx_common" type="jar" ext="jar"/> 
    <artifact name="xxx_common" type="pom" ext="pom"/>  
</publications> 
    <dependencies> 
    </dependencies> 
</ivy-module> 

projet XXX-API:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info 
     organisation="com.myorg.xxx" 
     module="xxx_api" 
     status="integration" 
     revision="1.0"> 
</info> 
<publications> 
    <artifact name="xxx_api" type="jar" ext="jar"/> 
    <artifact name="xxx_api" type="pom" ext="pom"/>  
</publications> 
    <dependencies> 
     <dependency org="com.myorg.xxx" name="xxx_common" rev="1.0" transitive="true" /> 
    </dependencies> 
</ivy-module> 

IV Y Settings.xml:

<ivysettings> 

<properties file="${ivy.project.dir}/project.properties" /> 


<settings 
    defaultResolver="chain" 
    defaultConflictManager="all" /> 

<credentials host="${ivy.credentials.host}" realm="Sonatype Nexus Repository Manager" username="${ivy.credentials.username}" passwd="${ivy.credentials.passwd}" /> 

<caches> 
    <cache name="ivy.cache" basedir="${ivy.cache.dir}" /> 
</caches> 

<resolvers> 
    <ibiblio name="xxx_publisher" m2compatible="true" root="${ivy.xxx.publish.url}" /> 
    <chain name="chain"> 
    <url name="xxx"> 
    <ivy pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/ivy-[revision].xml" /> 
    <artifact pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url>   
    <ibiblio name="xxx" m2compatible="true" root="${ivy.xxx.repo.url}"/> 
    <ibiblio name="public" m2compatible="true" root="${ivy.master.repo.url}" />  
    <url name="com.springsource.repository.bundles.release"> 
    <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url> 
    <url name="com.springsource.repository.bundles.external"> 
    <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
    </url> 
    </chain> 
</resolvers> 



</ivysettings> 
+0

Je devrais noter que j'ai essayé d'ajouter -SNAPSHOT à toutes les variables de révision. Cela a échoué quand ivy n'a pas pu créer le fichier résolu - * .xml ivy ... Je ne pouvais pas trouver n'importe où j'avais oublié :( –

Répondre

3

w00h00t.

(Il y a quelque chose de cathartique à demander de l'aide au monde, habituellement vous résolvez le problème beaucoup plus rapidement, même sans réponse).

Quoi qu'il en soit, pour l'intéressé il est descendu à deux choses:

a) l'ajout de -snapshot à toutes les révisions. Cela impliquait de forker un second fichier ivy.xml -> ivy.SNAPSHOT.xml et de le référencer explicitement dans les tâches ivy ant. b) étant donné qu'il s'agit d'une addition manuelle, j'ai dû parcourir tous les fichiers de l'arborescence de construction et fournir des chemins parallèles pour les flux de versions et d'instantanés. Ceci, à mon avis, est boiteux. Mais, comme je suppose que nous sommes très peu susceptibles d'inventer un autre type de flux, cela ne va probablement pas gonfler, et 2 flux parallèles est où il restera. c) J'ai spécifié diverses indications à lier pour vérifier les mises à jour des instantanés. par exemple. et changePattern=".*-SNAPSHOT" sur le résolveur.Et l'ajout de

<modules org="myorg" name=*" resolveMode="dynamic" /> 

encore, ce serait bien s'il y avait eu une intégration automatique avec des trucs d'instantané. A bit d'intelligence (optionnelle) de la part de lierre. Avouons-le, maven repos comme nexus sont vraiment utiles et je vais certainement utiliser le lierre seulement pour obtenir le processus de construction merdique maven. I comme en utilisant nexus.

Quoi qu'il en soit. Si quelqu'un veut toujours poser des questions à ce sujet, n'hésitez pas.

+1

"Il y a quelque chose de cathartique à demander de l'aide au monde" - Ça s'appelle "Duck Rubber" "- https://en.wikipedia.org/wiki/Rubber_duck_debugging :) –

1

Je ne suis pas sûr si cela aiderait avec le problème d'avoir 2 ensembles de configurations, mais au moins le build.xml serait un peu plus simple.

Vous pouvez définir l'attribut de révision sur l'élément info dans ivy.xml comme $ {project.revision}.

Vous pouvez ensuite omettre les attributs revision = "$ {project.revision}" sur les éléments ivy dans build.xml.

Voir ma réponse à cette autre question, par exemple: https://stackoverflow.com/a/8853823/1148030

0

Il convient de noter, la seule étape nécessaire est d'inclure la « -snapshot » à la révision lors de la publication Nexus. Les autres étapes répertoriées dans la réponse sont optionnelles/améliorations. Pour retirer l'élément publié, vous devez également ajouter "-SNAPSHOT" à la révision.

Questions connexes