2009-09-25 8 views
4

Je voudrais que Nexus (ou Artifactory, nous ne sommes pas encore décidés) stocke une copie d'un artefact quand il est téléchargé à partir d'un dépôt public sur Internet (comme Maven Central). Fondamentalement, si vous n'avez pas le pot dans votre dépôt local et que le responsable du repo ne l'a pas non plus, je veux demander au responsable du repo le pot, qu'il me l'envoie et le stocke à la fois dans le responsable du repo et dans mon repo local. Ensuite, lorsqu'une autre personne demande au responsable des pensions le même pot, il le leur envoie du gestionnaire des pensions et ils l'enregistrent dans leur dépôt local, sans avoir besoin de frapper Maven central.Est-ce que Nexus/Artifactory peut stocker une copie d'un artefact Internet Maven?

Cela ressemble à comment il devrait fonctionner hors de la boîte, mais je ne le vois pas. Je peux voir les artefacts sur Maven central via le gestionnaire de repo, mais quand j'utilise Netbeans pour ajouter une dépendance à mon projet, il le télécharge directement à partir de Maven central (apparemment). Rien ne se cache dans le gestionnaire de repo (pour autant que je puisse voir).

Répondre

5

Nexus a le concept de référentiel proxy qui fait presque exactement ce que vous décrivez. Voir la section Proxying Public Repositories du livre pour plus de détails. Artifactile a une caractéristique similaire appelée Virtual repositories

Le fait de taper et de mettre en cache un référentiel public distant peut accélérer vos builds en réduisant les téléchargements redondants sur l'Internet public. Si un développeur de votre organisation a besoin de télécharger la version 2.5 de Spring Framework et que vous utilisez Nexus, les dépendances (et les dépendances de la dépendance) ne doivent être téléchargées qu'une seule fois depuis le référentiel distant. Avec une connexion haut débit à Internet, cela peut sembler une préoccupation mineure, mais si vous demandez constamment à vos développeurs de télécharger des centaines de mégaoctets de dépendances tierces, les économies réelles seront le temps nécessaire à Maven pour vérifier les nouvelles versions des dépendances et télécharger les dépendances sur Internet. Vous pouvez empêcher votre installation Maven d'essayer de se connecter à Central en configurant votre gestionnaire de référentiel comme un miroir de central, les demandes adressées à Central seront alors dirigées vers votre gestionnaire de référentiel. Par exemple ajouter ce qui suit à la section <mirrors> du settings.xml de Maven pour rediriger les requêtes vers le centre de votre gestionnaire de dépôt:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>http://myrepo/nexus/content/groups/public</url> 
</mirror> 

J'ai tendance à mettre en place un repository group contenant plusieurs dépôts distants. Le groupe agit comme un référentiel unique en ce qui concerne mon installation Maven, mais rassemble les artefacts de plusieurs référentiels distants.

+0

Mon installation de maven semble saisir les repos centraux de maven de mon installation de Nexus, mais je ne vois rien être mis en cache sur le serveur. La seule chose que j'ai changé depuis l'installation par défaut était de dire au proxy Maven Central de télécharger l'index MC. –

+0

Si vous avez configuré le miroir pour qu'il pointe vers le groupe public, vous devriez voir les artefacts téléchargés sous le référentiel 'Maven Central'. Tu ne vois pas ça? –

2

Les artefacts de mise en antémémoire et de mise en antémémoire d'autres référentiels publics sont (ou devraient être) intégrés dans tout gestionnaire de référentiel d'entreprise décent. Dans un environnement d'entreprise, les équipes de développement devraient être capables de développer et de construire leur logiciel même en cas de défaillance d'un dépôt public. C'est un cas d'utilisation très basique et l'une des raisons d'utiliser un référentiel d'entreprise (ne pas dépendre des ressources publiques que vous ne contrôlez pas). Une fois le gestionnaire de référentiel installé et configuré, vous devez configurer maven pour qu'il vérifie le référentiel à la place des référentiels publics. Pour ce faire, modifiez les paramètres de votre miroir (comme indiqué par Rich) dans votre ~/.m2/settings.xml. Reportez-vous à la section 3.2. Configuring Maven to Use a Single Nexus Group du livre Nexus pour plus de détails (la configuration s'applique à n'importe quel gestionnaire de référentiel).

Dans un environnement d'entreprise, je préfère forcer Maven à utiliser un référentiel unique en le faisant miroir toutes les demandes dépôt. Pour ce faire, définissez mirrorOf sur *.

<settings> 
    ... 
    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>*</mirrorOf> 
     <name>Maven Repository Manager running on repo.mycompany.com</name> 
     <url>http://repo.mycompany.com/proxy</url> 
    </mirror> 
    </mirrors> 
    ... 
</settings> 
1

En Artifactory, vous pouvez utiliser la fonction « Maison-> Paramètres Maven » page pour télécharger une configuration Maven qui mettra en application Maven pour utiliser uniquement les référentiels virtuels Artifactory que vous choisissez. Cela combiné avec le nettoyage de la référence du référentiel dans les dépôts virtuels fera en sorte que vous ne serez jamais interroger maven central.

Votre problème avec NetBeans peut être résolu en appliquant la déclaration repo dans votre installation Maven. La dernière fois que j'ai utilisé le support NetBeans Maven, j'ai également spécifié un fichier settings.xml au niveau du projet pour couvrir tous les cas. Side Remarque: L'utilisation de la fonction mirrorOf est très grossière et peut conduire à un comportement étrange.

Questions connexes