2017-10-11 4 views
0

Je tente de reprendre le contrôle des dépendances utilisées par nos projets en migrant de la gestion zéro (dossier lib local) vers un système géré localement (Archiva).Gestion du référentiel maven local avec Apache Archiva - licences

Chacune de nos dépendances réside déjà dans un répertoire distinct, similaire à celui créé par Archiva. Un répertoire individuel contient le fichier jar de dépendance, le fichier zip/jar source, le fichier javadoc zip/jar et un fichier texte avec la licence pour la dépendance. Ce dernier est nécessaire au processus de construction, car les produits finaux doivent contenir un répertoire de licences tiers, où toutes les licences de dépendance sont regroupées sous forme de fichiers (et non d'URL).

J'ai (après avoir lu la documentation et les essais/erreurs) réussi à correctement upload tous les artefacts d'une dépendance, à l'exception de sa licence. Pendant que les fichiers txt représentant les licences sont téléchargés, je ne comprends pas comment on est censé indiquer qu'un tel fichier est une licence pour la dépendance.

J'ai essayé de modifier le fichier POM de la dépendance à inclure des informations de licence, puis le récupérer dans Maven via license-maven-plugin:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.example</groupId> 
    <artifactId>example</artifactId> 
    <version>2.5.2</version> 

    <licenses> 
     <license> 
      <url>http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt</url> 
     </license> 
    </licenses> 
</project> 

Mais cela ne fonctionne pas. Le plugin crache des erreurs HTTP 401, si j'essaye ça.

--- license-maven-plugin:1.14:download-licenses (download-licenses) @ maventest --- 
Unable to retrieve license for dependency: org.example:example 
http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt 
Server returned HTTP response code: 401 for URL: http://localhost:8282/archiva/repository/myrepo/org/example/example/2.5.2/example-2.5.2-LICENSE.txt 

Il semble un peu non-intuitive que je dois préciser une URL complète pour la licence - le fichier est là sur le serveur à côté du fichier de dépendance jar associé et POM lui-même (et ils sont tous les deux téléchargés sans Erreurs non autorisées) - mais c'est ce que le paramètre veut. Il semble presque que les licences soient hébergées sur un site externe accessible au public et non dans le référentiel lui-même.

indiquant Explicitement une dépendance dans le projet POM des travaux de cours, pour autant que le téléchargement va:

<dependency> 
    <groupId>org.example</groupId> 
    <artifactId>example</artifactId> 
    <version>2.5.2</version> 
    <classifier>LICENSE</classifier> 
    <type>txt</type>   
</dependency> 

Mais cela ne se sent pas bien - même pas sûr comment on pourrait y faire référence dans le processus de construction afin de copier aux endroits appropriés.

Comment gérer correctement les artefacts de licence dans un référentiel géré par Archiva? Comment les référence-t-on correctement dans leurs projets Maven?

+0

D'abord l'hypothèse que vous faites est fausse en particulier liée au fichier de licence ... La licence est une information qui est faite dans le fichier pom lui-même ... Vous pouvez utiliser un plugin maven pour rassembler les licences en tant que build résultat plus tard ... En outre, je suggère d'utiliser une chose comme gestionnaire de référentiel Nexus – khmarbaise

+0

@ Khmarbaise, je ne comprends pas votre commentaire. De mon point de vue, je fais exactement ce que vous avez décrit: spécification des informations de licence dans le fichier POM, plus tard en utilisant un plugin pour les rassembler en tant que ressource. Le dernier extrait de XML dans ma question est juste pour montrer que le fichier requis est bien dans le dépôt - je ne peux pas y accéder avec le plugin comme prévu. J'avais déjà prévu de jeter un coup d'œil à Nexus, un équivalent d'Archiva. – predi

Répondre

0

Il existe un compte d'utilisateur invité spécial dans Archiva, qui ne nécessite pas de nom d'utilisateur et de mot de passe pour s'authentifier. Par défaut, il aura les droits d'accès Repository Observer uniquement pour les dépôts intégrés (snapshots et internes) fournis avec une nouvelle instance Archiva. Le rôle Repository Observer est essentiellement un accès en lecture pour un référentiel et des artefacts à l'intérieur.

Si vous souhaitez lire des fichiers aléatoires dans un référentiel local personnalisé via leur URL complète sans avoir besoin de s'authentifier, vous devrez ajouter des droits Repository Observer pour le référentiel en question à l'utilisateur Invité. Cela m'a permis de contourner les erreurs HTTP 401 et de faire fonctionner le plugin de licence dans mon cas, donc mon fichier POM est parfaitement correct.

Les étapes exactes de la gestion du compte Invité (ou de tout autre utilisateur) sont décrites dans Manage Archiva Users, une section du Guide de l'administrateur.

Cependant, vous ne savez toujours pas si c'est une bonne pratique de gérer les licences de cette façon.Il semble préférable de les garder dans un endroit éloigné, ce que je suppose basé sur la structure de la propriété <licenses> dans un fichier POM (URL uniquement, pas de chemins relatifs).