comment publier 3rdparty artefacts avec du lierre et des nexus
Je suis occupé à obtenir mes pieds mouillés avec du lierre. J'ai déjà un nexus référentiel en cours d'exécution sur mon PC local, et un script ant.
Les deux fonctionnent très bien.
Cadre de la génération de scripts avez des fichiers à récupérer nos 3rdparty fichiers jar (log4j, xmlbeans, junit, pdf, etc..) à partir d'un partage réseau - qui est klunky au mieux.
Je veux utiliser le lierre de la dépendance de mécanismes pour récupérer ces fichiers à partir d'un nexus référentiel et de l'utiliser dans la construction. Chaque 3rdparty lib a un nom et un ensemble arbitraire de fichiers (pot, dll, licence.dat, xml, etc).
Puisque nous avons un grand nombre de ces 3rdparty libs et chaque lib a plusieurs fichiers - l'envoi manuel de nexus n'est pas une option -- j'ai besoin de quelque chose que je peux utiliser pour prendre un ensemble de fichiers, de leur donner une lib nom, un numéro de version et télécharger le résultat de la nexus. alors j'ai besoin d'être en mesure de récupérer ce lierre.
J'ai réussi à obtenir le téléchargement de la partie à travailler, mais le processus de récupération ne fonctionne pas. À l'aide de notre xmlbeans lib comme un point de départ, j'ai créé les suivantes ivy.xml fichier
<ivy-module version="1.0">
<info organisation="thirdparty_tools" module="xmlbeans" status="integration">
<publications>
<artifact name="jsr173_api" type="jar" ext="jar"/>
<artifact name="saxon-dom" type="jar" ext="jar"/>
<artifact name="saxon-xpath" type="jar" ext="jar"/>
<artifact name="saxon" type="jar" ext="jar"/>
<artifact name="xbean" type="jar" ext="jar"/>
<artifact name="xbean_xpath" type="jar" ext="jar"/>
<artifact name="xmlpublic" type="jar" ext="jar"/>
</publications>
</ivy-module>
et puis certains script ant pour le publier sur nexus:
<ivy:resolve/>
<ivy:publish <ivy:publish resolver="thirdparty" forcedeliver="true" update="true" revision="${version}" overwrite="true">
<artifacts pattern="[artifact].[ext]"/>
<ivy:publish/>
Et tout cela fonctionne très bien. Il publie tous les fichiers jar de nexus dans le répertoire.
Le problème arrive quand j'essaye de l'utiliser dans mon construire.
J'ai créé le suivant: ivy.xml fichier pour mon build:
<ivy-module version="1.0">
<info organisation="myCompany" module="GLB_Data"/>
<dependencies>
<dependency org="thirdparty_tools" name="xmlbeans" rev="2.2.0"/>
</dependencies>
</ivy-module>
Puis quand je lance mon build - il ne parvient pas à trouver quoi que ce soit:
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: thirdparty_tools#jsr173_api;2.2.0: not found
:: thirdparty_tools#saxon-dom;2.2.0: not found
:: thirdparty_tools#saxon-xpath;2.2.0: not found
:: thirdparty_tools#saxon;2.2.0: not found
:: thirdparty_tools#xbean;2.2.0: not found
:: thirdparty_tools#xbean_xpath;2.2.0: not found
:: thirdparty_tools#xmlpublic;2.2.0: not found
::::::::::::::::::::::::::::::::::::::::::::::
Le problème semble être avec ce modèle:
WARN: ==== public: tried
WARN: http //localhost:8081/nexus/content/groups/public/thirdparty_tools/jsr173_api/2.2.0/jsr173_api-2.2.0.pom
WARN: -- artifact thirdparty_tools#jsr173_api;2.2.0!jsr173_api.jar:
WARN: http //localhost:8081/nexus/content/groups/public/thirdparty_tools/jsr173_api/2.2.0/jsr173_api-2.2.0.jar
ivy seems to be looking for the jsr173_api artifact under its own name, rather than under the xmlbeans folder where it was published to:
[ivy:publish] published jsr173_api to http //localhost:8081/nexus/content/repositories/thirdparty/thirdparty_tools/xmlbeans/2.2.0/jsr173_api-2.2.0.jar
(url d'obfuscation pour éviter les accidents).
donc, quelque part, j'ai besoin de publier différemment, ou de récupérer de manière différente. Les idées et suggestions sont appréciés.
OriginalL'auteur Jon | 2011-02-24
Vous devez vous connecter pour publier un commentaire.
Nexus est principalement un repository Maven, cela signifie qu'il faut adapter à la manière de Maven structures artefacts.
Depuis que vous êtes concentré sur le chargement en vrac Nexus je suggère à la recherche de la réponse à la question suivante:
Télécharger des artefacts pour les Nexus, sans Maven
Si vous voulez coller avec le lierre à lire.....
Fond
Besoin d'un POM Maven
Votre première question, c'est que votre Maven module(s) auront besoin d'un fichier POM. Ce fichier décrit le module maven et peuvent être facilement généré à partir du contenu de votre ivy.xml fichier (Voir la solution ci-dessous).
Deuxièmement, Maven suppose qu'il existe un primaire artefact en cours de construction. Par exemple:
Un Maven client traduire cette information dans l'URL suivante:
Cela démontre comment les Nexus peut stocker n'importe quel type de binaire de dépendance. Le emballage paramètre par défaut est "pot".
Comment maven gère module supplémentaire artefacts
Alors que Maven se concentre sur une version unique de l'artefact, il est possible d'ajouter des supplémentaires artefacts, en les publiant dans le même répertoire (comme vous l'avez fait).
Ce sont pas répertoriés dans le POM Maven. Au lieu d'une Maven utilise un "classificateur" attribut. Ce qui suit est une possible dépendance déclaration.
Un Maven client de le traduire dans l'URL suivante:
Projets Open source généralement de la publication de leur code source de cette façon.
Ivy Solution
Donc enfin comment publier des fichiers sur Nexus à l'aide de lierre?
Tout d'abord décider quel artefact est le "principal" construire artefact et ajouter une entrée supplémentaire pour votre POM fichier:
Les autres fichiers peuvent également être énumérés, mais chacun doit avoir un unique classificateur attribut..... Ici, vous serez confrontés à l'un des problèmes classiques de traduction d'un projet ANT dans Maven.... Chaque fichier jar que vous publiez, vous aurez probablement besoin d'un distinct POM. Ils ont pas vraiment de "complémentaire" des artefacts.....
De prétendre que vous n'avez pas besoin de publier plusieurs modules.... Utiliser la génération suivante des objectifs pour publier votre module:
Nexus informations d'identification
Et pour être complet, voici la ivysettings.xml fichier contenant le Nexus emplacement de référentiel et les informations d'identification:
Mise à jour
Téléchargement artefacts
Pour récupérer tous la publication des artefacts (et pas seulement le principal), vous avez besoin de les énumérer comme suit:
Fonctionnellement le même que le suivant Maven fragment:
J'ai donc ajouté une entrée:
<artifact name="xmlbeans" type="pom"/>
à mon ivy.xml fichier et re-publié. Il a créé un fichier pom comme prévu (thirdparty_tools/xmlbeans/2.2.0/xmlbeans-2.2.0.pom). Cependant.... le lierre n'est pas à la recherche pour cela. il veut un fichier nommé: thirdparty_tools/xmlbeans/2.2.0/xmlbeans-2.2.0.xml qui n'existent pas. J'ai donc modifié l'entrée:<artifact name="xmlbeans" type="pom" ext="xml"/>
et cela a fonctionné comme prévu.ok, ce n'est pas de travail. Les erreurs s'en alla à résoudre, mais rien n'est arriver téléchargé, quand je fais un récupérer des. En réalité, seul le .pom fichier est téléchargé, mais je veux les artefacts (.zip .dll, etc).
J'ai re-testé et cela fonctionne pour moi. Êtes-vous en déclarant que le résolveur correctement lors du téléchargement de la Nexus repo?
pour la résolution, j'ai ceci:
<ibiblio name="thirdparty" m2compatible="true" root="http://localhost:8081/nexus/content/repositories/thirdparty/"/>
pour le téléchargement des trucs - Le problème semble être que la ivy.xml le fichier est ignoré dans le processus de téléchargement, et tous les ivy regarde est la pom fichier, et quelle que soit dépendances. Ce vraiment qui m'intrigue, c'est qu'ivy a créé l'Url de publier.. pourtant ivy ne peut pas utiliser les mêmes pour télécharger des trucs. Cela me dit qu'il y est une erreur fondamentale, soit de lierre d'installation ou dans ma compréhension de la façon dont il fonctionne.OriginalL'auteur Mark O'Connor