79 votes

Désactiver le dépôt central de Maven

La politique de mon entreprise désapprouve les artefacts téléchargés automatiquement (ils doivent être approuvés). Pour pouvoir utiliser Maven, je dois donc désactiver l'accès au dépôt central de Maven.

En d'autres termes, je ne veux pas que Maven tente de tout téléchargements à partir du central.

Je sais comment configurer un référentiel local (en réseau ou non), mon idée est d'utiliser une machine "bénie" pour mettre à jour le référentiel local.

PS : Je pourrais bloquer les demandes au niveau du proxy/réseau, mais je demande comment le faire avec la configuration de Maven.

UPDATE J'ai finalement trouvé comment le faire. Dans la maison de maven, dans la section conf est un répertoire global settings.xml . Vous pouvez soit définir un miroir pour central qui pointe vers un serveur interne ou simplement remplacer sa définition.

71voto

Mark O'Connor Points 33201

D'accord. Aucun téléchargement direct à partir de dépôts externes ne devrait être autorisé dans vos constructions de versions.

La réponse spécifique à votre question est la deuxième partie de ma réponse :-)

Configurer un gestionnaire de référentiel

Je vous recommande de mettre en place un gestionnaire de dépôt Maven local. Les bonnes options sont les suivantes :

Tous ces éléments sont capables d'agir en tant que proxy de mise en cache pour les jars centraux Maven disponibles en externe.

Vous pourriez également être intéressé par la version professionnelle de Nexus. Elle comprend un Suite d'achats pour la gestion des bibliothèques externes. Il fournit également des plugins Maven pour la gestion centralisée du fichier de paramètres Maven, ce qui constitue la deuxième partie de ma réponse...

Paramètres locaux de Maven

Mettre à jour le fichier de configuration situé dans le répertoire suivant :

$HOME/.m2/settings.xml

Spécifiez que toutes les demandes centrales doivent être redirigées vers le dépôt Maven local :

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>central-proxy</id>
      <name>Local proxy of central repo</name>
      <url>http://<hostname>/central</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

4 votes

Artifactory (même dans l'édition OSS) peut générer ce fichier de paramètres pour vous -. wiki.jfrog.org/confluence/display/RTF/

1 votes

Le "central" ici devrait être en minuscule : <mirrorOf>central</mirrorOf>. Le central ne peut pas être remplacé quand j'utilise "Central" ici.

63voto

Behe Points 1435

J'ai trouvé le Configuration de la résolution des artefacts page utile. Il indique ce qui suit à propos de la configuration "mirror any".

N'utilisez pas "mirror any" seul, comme seule règle de résolution. Utilisez-la pour imposer que toute résolution d'artefacts soit faite strictement par Artifactory. La configuration du proxy "mirror any" fonctionne pour les référentiels définis. Elle remplacera, mais ne cachera pas, les dépôts centraux et snapshots intégrés, à moins que l'utilisateur ne la surcharge. Elle définit une règle de proxy à gros grain qui ne fait pas de différence entre les versions et les instantanés, et s'appuie sur les dépôts définis pour effectuer ce filtrage de résolution.

Le site Super POM de Maven définit le référentiel central. Voici comment vous pouvez remplacer le référentiel central et le référentiel des plugins pour les versions et les instantanés :

<repositories>
    <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
                <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>    
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

Bien sûr, vous devriez faire configurer un remplacement, comme l'indique la réponse acceptée.

3 votes

Cette solution semble être la meilleure que nous puissions obtenir actuellement. Il y a encore des problèmes si vous utilisez différents projets avec le même dépôt local (si l'autre projet ne se soucie pas de désactiver maven central), mais tant que nous ne pouvons pas supprimer complètement le dépôt central, cette solution est propre et ne dépend pas d'un gestionnaire de dépôt miroir.

9voto

SnakE Points 689

Dans le cas d'un dépôt à l'échelle de l'entreprise qui doit traiter toutes les demandes d'artefacts, vous pouvez configurer un dépôt unique pour refléter tout ce qui se trouve dans votre dépôt de l'entreprise. $MAVEN_HOME/conf/settings.xml :

<mirror>
  <id>internal-repository</id>
  <name>Maven Repository Manager running on repo.mycompany.com</name>
  <url>http://repo.mycompany.com/proxy</url>
  <mirrorOf>*</mirrorOf>
</mirror>

Source :

2 votes

Apparemment, le fait de remplacer le central ne permet pas de savoir si certains plugins ou artefacts ont ajouté leurs propres repo's. Cette méthode est donc préférable. stackoverflow.com/a/22081916/32453

5voto

Rory Alsop Points 1261

Le moyen le plus simple est d'utiliser le paramètre -o qui indique à maven de s'exécuter en mode hors ligne. Bien sûr, vous devrez vous assurer que votre repo local contient tout ce dont vous avez besoin, mais cela permet au moins de résoudre les problèmes de sécurité que vous pourriez avoir en vous connectant automatiquement à un repo non approuvé.

0 votes

Par "repo local", vous voulez dire la machine locale, non ? Toutes les dépendances devront être installées localement parce que -o fait en sorte que maven n'utilise jamais un repo hors-boîte.

0 votes

Bien sûr, @Gray - c'est ce que fait le mode hors ligne :-)

0 votes

Je sais Rory. C'était juste votre utilisation du terme "repo local" qui pouvait être confondu avec le repo local de votre entreprise. J'essaie juste d'être explicite pour les n00bs là-bas.

-1voto

iuzuz Points 11

J'ai eu le même problème mais avec une autre cause. La solution a été de désactiver la protection du navigateur Avira (en allemand Browser-Schutz). J'ai pris la solution de m2e ne peut pas transférer les métadonnées de nexus, mais la ligne de commande maven le peut. .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X