Решение проблемы несогласованного расположения зависимостей в Gradle

#java #gradle

Вопрос:

Итак, я создаю проект gradle, вот мой (упрощенный) сценарий сборки:

 buildscript {
    repositories {
        maven { url "https://repo1.maven.org/maven2/" }
        maven { url 'https://repo.spring.io/plugins-release-local/' }
    }
    dependencies {
        classpath 'org.springframework.build.gradle:docbook-reference-plugin:0.2.4'
    }
}
 

Это приводит меня к ошибке:

    > Could not find org.apache.xerces:xercesImpl:2.9.1.
     Searched in the following locations:
       - https://repo1.maven.org/maven2/org/apache/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.pom
       - https://repo.spring.io/plugins-release-local/org/apache/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.pom
     Required by:
         project : > org.springframework.build.gradle:docbook-reference-plugin:0.2.4

 

Очевидно, docbook требует xerces в качестве зависимости.

Поэтому я искал ксеркса в репозитории maven, нашел ксеркса не в org/apache/xerces/ , а в xerces/ !!! (втф!?) (см. https://repo1.maven.org/maven2/xerces/xercesImpl/2.9.1/)

Итак, как я должен сообщить gradle, что при поиске xerces для docbook он должен перейти на xerces/ вместо org/apache/xerces/ ?

Ответ №1:

Согласно странице Github для этого плагина, похоже, что правильный репозиторий:

 repositories {
    maven { url 'http://repo.spring.io/plugins-release' }
}
 

И действительно, в нем содержится артефакт

Предыдущий ответ

Попробуйте добавить mavenCentral() в список репозиториев

 repositories {
    mavenCentral()
    maven { url "https://repo1.maven.org/maven2/" }
    maven { url 'https://repo.spring.io/plugins-release-local/' }
}
 

Комментарии:

1. Все еще ошибка. gradle все еще пытается найти xerces в MavenCentral() с org/apache/xerces помощью вместо xerces

2. > Не удалось найти org.apache.xerces:xercesImpl:2.9.1. Поиск выполнен в следующих местах: — > repo.maven.apache.org/maven2/org/apache/xerces/xercesImpl/2.9.1/… repo1.maven.org/maven2/org/apache/xerces/xercesImpl/2.9.1/… repo.spring.io/plugins-release-local/org/apache/xerces/…

Ответ №2:

Попробуйте расширить свой набор репозиториев с помощью

 mavenLocal()
mavenCentral()
 

Определение URL-адресов репозиториев не требуется, за исключением случаев, когда вы находитесь в корпоративной среде, где доступ в Интернет ограничен.