Как избежать дублирования дочерних репозиториев в родительском проекте - PullRequest
0 голосов
/ 21 сентября 2018

У меня многопроектная сборка со следующей структурой:

Root project 'just-another-root-project'
+--- Project ':producer'
\--- Project ':consumer'

Корневой файл settings.gradle:

rootProject.name = 'just-another-root-project'
include 'consumer', 'producer'

... соединяет созданные модули.


Файл producer.gradle:

plugins {
    id 'java-library'
}

group 'com.github.yarbshk.jarp'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven {
        url 'http://maven.nuiton.org/release/'
    }
}

dependencies {
    implementation 'com.sun:tools:1.7.0.13'
}

... имеет внешнюю зависимость (com.sun.tools), которая не публикуется в Maven Central, поэтому я добавил ссылкув репозиторий Nuiton.


Файл consumer.gradle:

plugins {
    id 'java'
}

group 'com.github.yarbshk.jarp'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    annotationProcessor project(':producer')
}

Сборка, описанная выше, не работает!Для этого я был вынужден дублировать все репозитории с producer.gradle на consumer.gradle. Итак, вопрос в том, как построить корневой проект без чрезмерного дублирования зависимостей? Как это сделать правильно?Спасибо за любой ответ или подсказку:)


ОБНОВЛЕНИЕ 1 :

При попытке создать проект с файлами, показанными выше, я получаю следующую ошибку:

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':consumer:compile'.
> Could not find com.sun:tools:1.7.0.13.
  Searched in the following locations:
      https://repo.maven.apache.org/maven2/com/sun/tools/1.7.0.13/tools-1.7.0.13.pom
      https://repo.maven.apache.org/maven2/com/sun/tools/1.7.0.13/tools-1.7.0.13.jar
  Required by:
      project :consumer > project :producer

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы можете настроить репозитории непосредственно в корневом проекте следующим образом:

корневой проект build.gradle :

// configure repositories for all projects
allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'http://maven.nuiton.org/release/'
        }
    }
}

РЕДАКТИРОВАТЬ (от вас комментируйте другой ответ)

Вы также можете определить только mavenCentral() репозиторий на уровне корневого проекта (он будет добавлен в репозитории для всех проектов) и настроить http://maven.nuiton.org/release репозиторий только для продюсер подпроект:

корневой проект

repositories {
    // will apply to all project
    mavenCentral()
}

продюсерский проект

 repositories {
    maven {
        url 'http://maven.nuiton.org/release/'
    }
    // mavenCentral inherited from root project
}

потребительский проект

// no need to re-define repositories here.
0 голосов
/ 21 сентября 2018

В официальном учебнике по gradle есть раздел, посвященный этому: https://guides.gradle.org/creating-multi-project-builds/#configure_from_above

В корневом проекте можно настроить все проекты:

allprojects {
    repositories {
        jcenter() 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...