web-dev-qa-db-fra.com

Comment puis-je amener Maven à utiliser les référentiels appropriés?

Je viens juste de regarder quelques projets et je dois les construire, mais j'ai déjà installé Maven il y a quelque temps (6 mois peut-être?) Et je ne l'ai plus utilisé depuis - le fichier pom.xml pour le projet que j'ai n'a pas ça " http://repo1.maven.org/myurlhere "n'importe où - contient l'URL absolue où le référentiel Maven est destiné au projet, mais Maven tente toujours de télécharger à partir du référentiel général Maven:

Macintosh:trunk$ mvn clean install
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/url/project/project/x.x/project-x.x.pom
[INFO] Unable to find resource 'url.project:project:pom:x.x' in repository central (http://repo1.maven.org/)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

GroupId: url.project
ArtifactId: project
Version: x.x

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/)

Quelqu'un peut-il m'aider avec ce que je ne fais pas bien, en gros je viens de vérifier les projets à partir de la ligne de commande, de cd-ed dans le répertoire et d'exécuter "mvn clean install" - rien d'autre. Toute aide est grandement appréciée.

50
user284163

le fichier pom.xml pour le projet que j'ai n'a pas " http://repo1.maven.org/myurlhere " où que ce soit

Tous les projets ont http://repo1.maven.org/ déclarés en tant que <repository> (et <pluginRepository>) par défaut. Ce référentiel, appelé le référentiel central, est hérité comme les autres paramètres par défaut du "Super POM" (tous les projets héritent du Super POM). Ainsi, un POM est en réalité une combinaison du Super POM, de tout POM parent et du POM actuel. Cette combinaison s'appelle le "POM effectif" et peut être imprimée à l'aide de l'objectif effective-pom du plug-in Maven Help (utile pour le débogage).

Et en effet, si vous courez:

mvn help:effective-pom

Vous verrez au moins ce qui suit:

  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>

il a l'URL absolue où le repo Maven est pour le projet mais Maven essaie toujours de télécharger à partir du repo général Maven

Maven essaiera de trouver des dépendances dans tous les référentiels déclarés, y compris dans le central _ qui est présent par défaut, comme nous l'avons vu. Mais, en fonction de la trace que vous affichez, vous n’avez que le référentiel one défini (le référentiel central) ou maven affichera un résultat du type:

Reason: Unable to download the artifact from any repository

  url.project:project:pom:x.x

from the specified remote repositories:
  central (http://repo1.maven.org/),
  another-repository (http://another/repository)

Donc, fondamentalement, maven est incapable de trouver le url.project:project:pom:x.x car il n’est pas disponible dans le répertoire central.

Mais sans savoir quel projet vous avez emprunté (il contient peut-être des instructions spécifiques) ou quelle dépendance manque (on peut peut-être le trouver dans un autre référentiel), il est impossible de vous aider davantage.

60
Pascal Thivent

Par défaut, Maven recherchera toujours dans le référentiel officiel de Maven, à savoir http://repo1.maven.org .

Lorsque Maven essaie de construire un projet, il recherche dans votre référentiel local (par défaut, ~/.m2/repository mais vous pouvez le configurer en modifiant la valeur <localRepository> dans votre ~/.m2/settings.xml) pour rechercher toute dépendance, plug-in ou rapport défini dans votre pom.xml. Si l'artefact adéquat n'est pas trouvé dans votre référentiel local, il recherchera dans tous les référentiels externes configurés, en commençant par celui par défaut, http://repo1.maven.org .

Vous pouvez configurer Maven pour éviter ce référentiel par défaut en définissant un miroir dans votre fichier settings.xml:

<mirrors>
    <mirror>
        <id>repoMirror</id>
        <name>Our mirror for Maven repository</name>
        <url>http://the/server/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

Ainsi, au lieu de contacter http://repo1.maven.org, Maven contactera le référentiel de votre entreprise (http://the/server dans cet exemple).

Si vous souhaitez ajouter un autre référentiel, vous pouvez en définir un nouveau dans votre fichier settings.xml:

<profiles>
    <profile>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
            <repository>
                <id>foo.bar</id>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <url>http://new/repository/server</url>
            </repository>
        </repositories>

Vous pouvez voir le modèle complet settings.xmlici .

En ce qui concerne le processus clean, vous pouvez demander à Maven de l’exécuter offline. Dans ce cas, Maven n'essaiera pas d'accéder à des référentiels externes:

mvn -o clean 
26
Romain Linsolas

Fondamentalement, tout ce que Maven vous dit, c’est que certaines dépendances de votre projet ne sont pas disponibles dans le référentiel central de Maven. La valeur par défaut consiste à rechercher dans votre dossier local .m2 (référentiel local), puis dans tout référentiel configuré dans votre POM, puis dans le référentiel central maven. Regardez les dépôts section de la référence Maven.

Le problème est que le projet qui a été archivé n'a pas configuré le POM de manière à ce que toutes les dépendances puissent être trouvées et que le projet puisse être construit à partir de zéro.

4
Taylor Leese

Je pense que ce que vous avez manqué ici est la suivante:

https://maven.Apache.org/settings.html#Servers

Les référentiels à télécharger et à déployer sont définis par les référentiels et les éléments distributionManagement du POM. Cependant, certains paramètres tels que nom d'utilisateur et mot de passe ne doivent pas être distribués avec le fichier pom.xml. Ce type d'informations doit exister sur le serveur de génération dans le fichier settings.xml.

C'est la manière préférée d'utiliser des pensions personnalisées. Donc, ce qui se passe probablement, c’est que l’url de ce référentiel se trouve dans settings.xml du serveur de compilation.

Une fois que vous avez trouvé l'URL et les informations d'identification, vous pouvez les mettre dans votre ordinateur ici: ~/.m2/settings.xml comme ceci:

<settings ...> 

        .
        .
        .
        <servers>
            <server>
              <id>internal-repository-group</id>
              <username>YOUR-USERNAME-HERE</username>
              <password>YOUR-PASSWORD-HERE</password>
            </server>
        </servers>
</settings>
0
shabby