Как заставить Maven использовать правильные репозитории? - PullRequest
57 голосов
/ 02 марта 2010

Я только что проверил некоторые проекты и мне нужно их построить, однако я установил Maven довольно давно (возможно, 6 месяцев) и с тех пор действительно не использовал его - pom.xml для проекта, который у меня нет где-нибудь в нём есть это "http://repo1.maven.org/myurlhere"" - у него есть абсолютный URL, где находится репозиторий Maven для проекта, но Maven все еще пытается загрузить его из репозитория 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/)

Может ли кто-нибудь помочь мне с тем, что я делаю неправильно, в основном я просто проверил проекты из командной строки, cd-ed в каталог и запустил «mvn clean install» - больше ничего. Любая помощь с благодарностью.

Ответы [ 4 ]

63 голосов
/ 02 марта 2010

файл pom.xml для проекта, который у меня есть, не имеет этого "http://repo1.maven.org/myurlhere" где-либо в нем

Все проекты имеют http://repo1.maven.org/, объявленные как <repository><pluginRepository>) по умолчанию. Этот репозиторий, который называется central , наследуется, как и другие настройки по умолчанию, от «Super POM» (все проекты наследуются от Super POM). Таким образом, POM на самом деле является комбинацией Super POM, любых родительских POM и текущего POM. Эта комбинация называется «эффективным POM» и может быть напечатана с помощью цели effective-pom плагина Справки Maven (полезно для отладки).

И действительно, если вы запустите:

mvn help:effective-pom

По крайней мере вы увидите следующее:

  <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>

У него есть абсолютный URL-адрес, где находится репозиторий Maven для проекта, но Maven все еще пытается загрузить его из репозитория Maven

Maven попытается найти зависимости во всех объявленных репозиториях, в том числе в центральном , который по умолчанию находится там, как мы видели. Но, согласно трассировке, которую вы показываете, у вас есть только один определенный репозиторий (центральный репозиторий), или maven напечатает что-то вроде этого:

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)

Так что, в основном, maven не может найти url.project:project:pom:x.x, потому что он недоступен в центральном.

Но, не зная, какой проект вы извлекли (возможно, у него есть конкретные инструкции) или какая зависимость отсутствует (может быть, его можно найти в другом хранилище), вам больше невозможно помочь.

29 голосов
/ 02 марта 2010

По умолчанию Maven всегда будет искать в официальном репозитории Maven, который равен http://repo1.maven.org.

Когда Maven пытается построить проект, он будет искать в вашем локальном хранилище (по умолчанию ~/.m2/repository, но вы можете настроить его, изменив значение <localRepository> в вашем ~/.m2/settings.xml), чтобы найти любую зависимость, плагин или отчет определено в вашем pom.xml. Если соответствующий артефакт не найден в вашем локальном репозитории, он будет искать во всех настроенных внешних репозиториях, начиная со стандартного, http://repo1.maven.org.

Вы можете настроить Maven, чтобы избежать этого репозитория по умолчанию, установив зеркало в вашем файле settings.xml:

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

Таким образом, вместо того, чтобы связываться с http://repo1.maven.org, Maven свяжется с вашим хранилищем Entreprise (http://the/server в этом примере).

Если вы хотите добавить другой репозиторий, вы можете определить новый в своем файле 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>

Вы можете увидеть полную settings.xml модель здесь .

Что касается процесса clean, вы можете попросить Maven запустить его offline . В этом случае Maven не будет пытаться получить доступ к каким-либо внешним репозиториям:

mvn -o clean 
4 голосов
/ 02 марта 2010

По сути, все, что Maven говорит вам, - это то, что определенные зависимости в вашем проекте недоступны в центральном репозитории maven. По умолчанию используется локальная папка .m2 (локальный репозиторий), а затем все настроенные репозитории в POM, а затем центральный репозиторий maven. Посмотрите на репозитории раздел ссылки Maven.

Проблема в том, что зарегистрированный проект не настроил POM таким образом, чтобы можно было найти все зависимости и построить проект с нуля.

0 голосов
/ 22 октября 2018

Я думаю, что вы упустили вот это:

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

Репозитории для загрузки и развертывания определяются репозиториями и элементами distributionManagement в POM. Однако некоторые параметры, такие как имя пользователя и пароль, не должны распространяться вместе с pom.xml. Этот тип информации должен существовать на сервере сборки в файле settings.xml.

Это предпочтительный способ использования пользовательских репозиториев. Поэтому, вероятно, происходит следующее: URL этого репозитория находится в файле settings.xml сервера сборки.

Как только вы получите URL и учетные данные, вы можете поместить их на свой компьютер здесь: ~/.m2/settings.xml вот так:

<settings ...> 

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