web-dev-qa-db-fra.com

Désactiver le référentiel central Maven

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

En d'autres termes, je ne veux pas que Maven essaie tout téléchargements depuis le 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 requêtes au niveau du proxy/réseau, mais je demande comment le faire avec la configuration de Maven.

MISE À JOUR J'ai enfin compris comment le faire. Chez maven, dans le répertoire conf se trouve un settings.xml Global. Vous pouvez soit définir un miroir sur central qui pointe vers un serveur interne ou simplement remplacer sa définition.

51
juancn

D'accord. Aucun téléchargement direct à partir de référentiels externes ne doit être autorisé dans vos versions de version.

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

Configurer un gestionnaire de référentiel

Je recommande de configurer un gestionnaire de référentiel Maven local. Les bonnes options sont les suivantes:

Tous ces éléments sont capables d'agir comme un proxy de mise en cache pour les bocaux centraux Maven disponibles en externe.

Vous pourriez également être intéressé par la version Profession de Nexus. Il comprend un Procurement suite pour la gestion des bibliothèques externes. Il fournit également des plugins Maven pour la gestion centralisée du fichier de paramètres Maven, qui est la deuxième partie de ma réponse ...

Paramètres Maven locaux

Mettez à jour le fichier de paramètres situé dans le répertoire suivant:

$ HOME/.m2/settings.xml

Spécifiez que toutes les demandes centrales doivent être redirigées vers le référentiel 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>
44
Mark O'Connor

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

N'utilisez pas "miroir" par lui-même, comme seule règle de résolution. Utilisez-le pour appliquer toute résolution d'artefacts à effectuer strictement via Artifactory. La configuration de proxy "miroir" fonctionne pour les référentiels définis. Il remplacera, mais ne masquera pas, les référentiels centraux et instantanés intégrés, à moins qu'il ne soit remplacé par l'utilisateur. Il définit une règle de proxy à granularité grossière qui ne fait pas de distinction entre les versions et les instantanés, et s'appuie sur les référentiels définis pour effectuer ce filtrage de résolution.

Le 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 de plug-ins 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 avoir un remplacement configuré, comme indiqué dans la réponse acceptée.

44
Behe

Dans le cas d'un référentiel à l'échelle de l'entreprise qui devrait gérer toutes les demandes d'artefacts, vous pouvez configurer un référentiel unique pour refléter tout dans votre $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

5
SnakE

Le moyen le plus simple consiste à 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 référentiel local dispose de tout ce dont vous avez besoin, mais cela résout au moins les problèmes de sécurité que vous pourriez avoir avec la connexion automatique à un référentiel non approuvé.

4
Rory Alsop

On dirait que quelqu'un essaie activement d'appliquer votre politique de gouvernance Open Source. Ça fait plaisir à entendre.

Soyez d'accord avec l'autre commentaire ici sur l'utilisation d'un gestionnaire de référentiel interne pour héberger les composants nécessaires à Maven.

Comme le mentionne Rory, vous devez vous assurer que vous avez tout ce dont vous avez besoin dans ce référentiel avant d'arrêter l'accès à Maven Central (The Central Repository) ou à tout autre référentiel public open source.

Mark fait un bon point sur les capacités d'approvisionnement Nexus. Une fois que ce gestionnaire de référentiel interne est configuré avec tous vos composants "approuvés", vous pouvez également activer la fonction Nexus Repository Health Check (c'est gratuit), qui rend compte de toutes les licences de composants, connues vulnérabilités de sécurité, etc. pour les composants de vos référentiels.

Divulgation complète, je travaille pour Sonatype.

3
Derek E. Weeks

Dans le passé, j'ai constaté que la solution la plus robuste consiste à remplacer manuellement les référentiels intégrés. J'ai trouvé cette approche meilleure que de changer le POM parent, settings.xml, miroir ou profils. Pour tous les projets internes, mettez les paramètres ci-dessous dans leur POM.

<repositories>
    <repository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>
2
Jose Martinez

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

0
iuzuz