IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Build Java Discussion :

[Ivy] Publication sans toutes les dependences


Sujet :

Build Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut [Ivy] Publication sans toutes les dependences
    Bonjour,

    Je construis un module via Ant et Ivy. Je souhaite le publié en local pour qu'il puisse etre utilisé par d'autre programme.
    Du coup 2 questions :
    - Faut il forcement définir un repository local? Si oui comment faire?
    - quand je vais dans le cache de Ivy, et que je regarde le fichier xml relatif a mon module, j'y vois toutes les dependances definit dans mon fichier ivy.xml. Comment faire pour qu'il ne prenne que les dependence lié à la "compile" et non ceux du "check?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        <configurations defaultconfmapping="default" >
            <conf name="default" />
            <conf name="compile" extends="default"/>
            <conf name="check" extends="default" />
        </configurations >
     
        <publications>
            <artifact name="Tools" type="jar" conf="compile"/>
        </publications>
     
        <dependencies>
            <dependency org="net.java.dev.beansbinding" name="beansbinding" rev="${beansbinding.version}" conf="compile->default"/>
            <dependency org="checkstyle" name="checkstyle" rev="${checkstyle.version}" conf="check->default"/>
            <dependency org="pmd" name="pmd" rev="${pmd.version}" conf="check->default"/>
            <dependency org="com.google.code.findbugs" name="findbugs-ant" rev="${findbugs.version}" conf="check->default"/>
        </dependencies>

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    - Si tu veux déployer dans un repository local, il te faut simplement le définir dans le 'settings.xml' et déployer tes artefacts via ivy:publish

    - Concernant le ivy.xml, le fichier sera déployé sans modifications avec des configurations publiques ou privées (si tu les a spécifiées via l'attribut visibility="private")

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Merci pour ta réponse.
    - Par contre comment fait on pour créer un repository local? Je pensais a un simple repertoire partagé (j'ai vu que c été possible dans la doc) mais je ne sais pas quelle stucture il doit avoir ni comment le rajouter au fichier settings.xml.
    - Comment faire pour gérer les dependances d'un jar que l'on publie?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    Un repository Ivy peut être local a ta machine si tu en as le seul usage ou partagé avec d’autres dévloppeurs dans le cadre d’un échange de librairies.
    Dans ce dernier cas, cela peut être un répertoire partagé accessible via le protocole file:// mais cela peut être un espace distant sur un serveur accessible par http:// ou ssh://. Sur ce point l’ensemble des possibilités sont offertes.

    Dans le cadre de Maven, nous utilisons généralement des repository d’entreprise qui en plus d’offrir des services de proxy vers l’extérieur, permettent également de créer des repository d’entreprise. Les plus célebres de sont les Apache Archiva, Sonatype Nexus et Jfrog Artifactory.
    Les deux premiers ne permettent pour le moment uniquement de gérer des artefacts de type Maven (artefacts + méta data). Mais le dernier, Artifactory permet également de gérer des artefacts Ivy et donc faire office de repository Ivy d’entreprise.
    Je le recommande chaudement.

    Concernant la structure du répertoire, Ivy te permet de fournir la structure organisationnelle qui convient le mieux a ton besoin.

    Tu peux par exemple utiliser celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [organisation]/[module]/[type]s/[artifact]-[revision].[ext]
    Puis le fichier de configuration, Ivy, tu auras par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <url name="artifactory">
           <artifact pattern="${artifactory.url}/[organization]/[module]/[type]s/[revision]/[artifact]-[revision].[ext]"/>
           <ivy pattern="${artifactory.url}/[organization]/[module]/[type]s/[revision]/ivy-[revision].xml" />
    </url>
    L’utilisation de Artifactory peut être justifiée car il te fournit un repository Ivy d’entreprise et de te permet de disposer des fonctionnalités de proxy des repository Maven pour tes dépendances classiques, que Ivy ira piocher.
    Tes dépendances sont déclarées dans le fichier ivy.xml


    Par exemple le fichier ivysettings.xml suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <ivysettings>
      <settings defaultResolver="chain-example"/>
      <resolvers>
        <chain name="chain-example">
         <url name="artifactory">
           <artifact pattern="${artifactory.url}/[organization]/[module]/[type]s/[revision]/[artifact]-[revision].[ext]"/>
           <ivy pattern="${artifactory.url}/myivyrepo/[organization]/[module]/[type]s/[revision]/ivy-[revision].xml" />
         </url>
         <ibiblio name="artifactoryRelease" m2compatible="true" root="${artifactory.url}/artifactory/repo"/>
        </chain>
      </resolvers>
    </ivysettings>

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Merci pour ta reponse. Elle m'a bien aidé. Par contre j'ai encore un problème.
    J'ai fait un repository dans un répertoire partagé, cela marche bien pour mes propre jar (publication,...) sauf qu'il ne sort plus chercher les jar "publique" (hibernate, log4j,...) sur le repository maven.

    Voila ma configuration que j'ai faite en me basant sur ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ivysettings>
        <properties file="${ivy.settings.dir}/ivysettings.properties" />
        <property name="myrepository" value="//192.168.100.124/Repository" overrite="true"/>
        <settings defaultResolver="chain-local"/>
        <resolvers>
            <chain name="chain-local">
                <filesystem name="local">
                    <ivy pattern="${myrepository}/[module]/ivy-[revision].xml" />
                    <artifact pattern="${myrepository}/[module]/[artifact]-[revision].[ext]" />
                </filesystem>
                <ibiblio name="localRelease" root="file:/${myrepository}"/>
            </chain>
        </resolvers>
    </ivysettings>

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    Pour les artefacts publics, il ne faut pas spécifier l'attribut 'root' du tag <ibiblio> pour aller chercher par défaut dans le repository Maven central
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ibiblio name="maven2" m2compatible="true"/>
    Il faut préciser l'attribut 'root' du tag <ibiblio> pour spécifier un autre répository Maven distant ou l'adresse d'un repository manager (comme Artifactory, Apache, Nexus, ...) qui fait office de proxy vers les repository Maven Internet.

    La documentation complète
    http://ant.apache.org/ivy/history/2....r/ibiblio.html

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Ca marche. Merci.

    du coup voila ma configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ivysettings>
        <properties file="${ivy.settings.dir}/ivysettings.properties" />
        <property name="myrepository" value="//192.168.100.124/Repository" overrite="true"/>
        <settings defaultResolver="chain-local"/>
        <resolvers>
            <chain name="chain-local">
                <filesystem name="local">
                    <ivy pattern="${myrepository}/[module]/[revision]/ivy-[revision].xml" />
                    <artifact pattern="${myrepository}/[module]/[revision]/[artifact]-[revision].[ext]" />
                </filesystem>
                <ibiblio name="maven2" m2compatible="true"/>
            </chain>
        </resolvers>
    </ivysettings>
    Par contre (je vais encore habuser un peu...) si j'utile la meme configuration dans un module qui utilise le jar que j'ai publié, il dit dans les log qu'il le trouve bien dans le repository local mais ne le met pas dans le repertoire "lib" avec les autres jar qui viennent du repository Maven.

    Voila mon fichier ivy.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <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="FDI" module="${ant.project.name}"/>
        <configurations defaultconfmapping="default" >
            <conf name="default" />
            <conf name="compile" extends="default" visibility="public"/>
            <conf name="check" extends="default" />
        </configurations >
        <dependencies>
            <dependency org="net.java.dev.beansbinding" name="beansbinding" rev="${beansbinding.version}" conf="compile->default"/>
            <dependency org="net.java.dev.appframework" name="appframework" rev="${appframework.version}" conf="compile->default" />
            <dependency org="org.swinglabs" name="swingx" rev="${swingx.version}" conf="compile->default" />
            <dependency org="log4j" name="log4j" rev="${log4j.version}" conf="compile->default" />
            <dependency org="FDI" name="FDITools" rev="${FDITools.version}" conf="compile->default" />
     
            <dependency org="checkstyle" name="checkstyle" rev="${checkstyle.version}" conf="check->default"/>
            <dependency org="pmd" name="pmd" rev="${pmd.version}" conf="check->default"/>
            <dependency org="com.google.code.findbugs" name="findbugs-ant" rev="${findbugs.version}" conf="check->default"/>
        </dependencies>
    </ivy-module>
    et mon script ant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        <target name="ivy-init" description="Initialisation d'Ivy">
            <ivy:settings file="${basedir}/ivysettings.xml"/>
        </target>
     
        <target name="resolve-compile" depends="ivy-init" description="--> retrieve dependencies with ivy">
            <ivy:resolve file="ivy.xml" type="jar" conf="compile" />
            <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]" />
        </target>
     
        <target name="resolve-chech" depends="ivy-init" description="--> retrieve dependencies with ivy">
            <ivy:resolve file="ivy.xml" type="jar" conf="check" />
            <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]" />
        </target>

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    ne met pas dans le repertoire "lib" avec les autres jar qui viennent du repository Maven.
    Ta configuration semble correcte.
    Avec cette configuration, le répertoire 'lib' va comporter un répertoire 'compile' et un repértoire 'check' contenant respectivement les jars de compile et de check.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Oui c est bien ca sauf que je n'ai pas ma lib "local". Je n'ai que les lib venant du repository Maven

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    Quelle est l'arborescence de ton repository avec ta librairie?

    En effet, tu a spécifié dans ton pattern
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <artifact pattern="${myrepository}/[module]/[revision]/[artifact]-[revision].[ext]" />
    avec comme dépendance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <dependency org="FDI" name="FDITools" rev="${FDITools.version}" conf="compile->default" />
    Normalement tu devrais avoir pour une version 3.5 par exemple
    myrepository/FDITools/3.5/FDITools-3.5.jar

  11. #11
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    J'ai ca comme arborescence :
    Repository/FDITools/last-build/FDITools-last-build.jar

    Dans le meme repertoire j'ai les fichiers suivant :
    FDITools-last-build.jar.md5
    FDITools-last-build.jar.sha1
    ivy-last-build.xml
    ivy-last-build.xml.md5
    ivy-last-build.xml.sha1

    J'ai l'impression qu'il trouve bien le repertoire mais qu'il ne trouve pas le jar. Je dit ca car je m'etais trompé sur une dépendence "maven" et que ca pointait un repertoire sans jar et j'ai eu le meme comportement. Mais la y a le jar

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    J'ai le regret de ne pas savoir.
    Ton exemple fonctionne dans mon contexte, je ne vois pas de problemes.

  13. #13
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Points : 90
    Points
    90
    Par défaut
    Bon en essayant pleins de choses j'ai fini par tomber sur une config qui marche.
    Pour la publication j'ai remplacé le conf="compile" par conf="default".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <publications>
            <artifact name="FDITools" type="jar" conf="default" />
        </publications>
    Ensuite en effaceant le cache ca marche.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 350
    Points : 794
    Points
    794
    Par défaut
    Oui, effectivement

    Si tu spécifies dans le projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <dependency org="FDI" name="FDITools" rev="${FDITools.version}" conf="compile->default" />
    Cela dit d'aller regarder la configuration 'default' du jar FDITools et de l'associer à la portée 'compile' du projet courant.

    Il faut donc que FDITool soit publiés dans la configuration 'default'.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Shell Bash Supprimer un } à la fin sans toutes les supprimer
    Par gaaara dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/03/2014, 16h17
  2. Réponses: 0
    Dernier message: 27/11/2007, 22h59
  3. Réponses: 4
    Dernier message: 06/11/2007, 11h44
  4. Réponses: 1
    Dernier message: 28/07/2006, 03h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo