как реализовать монорепо с Gradle и несколькими Gradle проектами - PullRequest
0 голосов
/ 02 февраля 2020

У нас есть несколько полноценных проектов A, B, C, D. Это микросервисы, которые начнут делиться сгенерированными протобуфами файлами java. мы думаем о структуре, подобной этой

A
    build.gradle (this is a full on gradle build)
B
    build.gradle (this is B's full on gradle)
common
    build.gradle (build the protobuf that is used by A and B)

Теперь вопрос состоит в том, как мы можем быть уверены, что когда разработчик строит A, он также строит общий в случае, если он изменился при его git тяге. То же самое относится и к B. Файл settings.gradle, похоже, не имеет ../../: проекта или чего-то в этом роде.

Я помню, что Gradle также предложил способ создания нескольких проектов Gradle.

В идеале, когда кто-то меняет общее, несколько сборок jenkins запускаются так же, как и проверка того, что смена ядра Код не сломал ни одну из служб, которые его используют. Я не совсем уверен, как

1. document the things that depend on common
2. use the document to kick off builds of all things depending on common

Тогда, если это будет расти, и у вас есть D зависит от C зависит от общего, каждая сборка должна быть запущена, питая бинарный апстрим от общего к C, а затем банку C и банку обыкновенного для D. Я знаю, что для этого в твиттере используются «штаны». Google использует Базель. Возможно я смотрю на это вместо gradle? или мы можем смешать их?

1 Ответ

0 голосов
/ 02 февраля 2020

Достаточно просто объявить зависимость от common:

// Project A's build.gradle
dependencies {
    implementation(project(":common"))
}

Чтобы построить a, сборка common должна быть успешной. Если сборка common не удалась по какой-либо причине, то сборка a также не удастся. Пример:

$ ./gradlew project-a:build
> Task :common:compileJava FAILED
/Users/cisco/code/example-multi-project/common/src/main/java/common/ExampleCommon.java:6: error: incompatible types: int cannot be converted to String
        return 1;
               ^
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':common:compileJava'.
> Compilation failed; see the compiler error output for details.

Из вышеприведенного вы можете видеть, что когда я пытался построить проект a (project-a:build), была вызвана общая задача сборки (:common:compileJava).

Оба Проекты a / b / et c должны иметь тщательные тесты (юнит, интеграция, дым, и т. д. c), чтобы убедиться, что любые несовместимые изменения обнаруживаются рано / часто.

Вы можете прочитать больше о multi -проект строится в официальном руководстве: https://docs.gradle.org/current/userguide/multi_project_builds.html

...