Сборка мульти-проекта Java с использованием Gradle - PullRequest
7 голосов
/ 18 августа 2011

Я рву на себе волосы из-за этого.Я перевел свои сценарии обратно к коду, представленному на страницах учебника Gradle, так как я думаю, что я либо делаю что-то принципиально неправильное, либо неправильно понял, как многопроектное приложение должно быть структурировано с использованием gradle.

У меня есть три java-проекта в eclipse, все три содержат скрипт build.gradle и только один содержит скрипт settings.gradle.Структура выглядит следующим образом:

Scripts
-- build.gradle
-- settings.gradle
Database
-- build.gradle
Services
-- build.gradle

Я пытаюсь построить проект «База данных» и «Услуги», используя сценарий сборки в проекте «Сценарии».Чтобы создать дерево проекта, у меня есть следующий код в settings.gradle:

include 'Services', 'Database'

project (':Services').projectDir = new File(settingsDir, "../Services")
project (':Database').projectDir = new File(settingsDir, "../Database")

Репликация кода в многопроектном руководстве (Gradle Docs), я пытаюсь получить каждый из сценариев сборкираспечатать текст, чтобы убедиться, что все настроено правильно.Моя конечная цель - правильно построить зависимости при выполнении eclipseClasspath, чтобы все проекты правильно компилировались в eclipse.Однако текст распечатывается не так, как я ожидал!

Ниже приведено то, что содержится в трех сценариях сборки:

Скрипты build.gradle

allprojects {
    task hello << { task -> println "I'm $task.project.name" }
}

subprojects {
    hello << {println "- I depend on Scripts"}
}

База данныхbuild.gradle

hello.doLast { 
    println "- I'm inside database" 
}

Службы build.gradle

hello.doLast { 
    println "- I'm inside services" 
}

В рамках проекта «Сценарии», когда я запускаю «gradle -q hello», я получаю следующие результаты:

I'm Scripts
I'm AnprDatabase
- I depend on Scripts
I'm Database
- I depend on Scripts

Почему не отображается текст «Я внутри базы данных» и «Я внутри служб»?Я немного сбит с толку этим.Я могу только предположить, что это как-то связано со структурой моего проекта.Кто-то может подтвердить, что это так?Если нет, то в чем проблема?Как уже упоминалось, я сократил свои сценарии до этого простого примера, так как я не мог заставить зависимости запускаться в каждом сценарии сборки проектов с использованием одной и той же структуры.

Огромная благодарность за любую предложенную помощь.

1 Ответ

4 голосов
/ 19 августа 2011

Мне удалось выяснить, почему это не работает. Это была глупая ошибка с моей стороны. Проекты «База данных» и «Службы» не были в том же каталоге, что и мой проект «Сценарии». Я проверил эти проекты в репозитории git, который копирует локальные каталоги из моей рабочей области Eclipse и в локальный репозиторий git. Я не проверял проект 'Scripts' в своем репозитории git, поэтому он все еще находился в моем рабочем пространстве Eclipse. Кажется очевидным, почему это не сработало! Проверка моего проекта «Сценарии» и изменение пути к другим проектам в settings.gradle устранили проблему.

Интересно, что вместо генерирования исключения FileNotFoundException или чего-то подобного, Gradle создаст пустой проект, если не сможет найти определенный. Это было то, что я не оценил. Сначала я думал, что это странное поведение, но я предполагаю, что это дает пользователю возможность создавать свои проекты на лету во время выполнения сценария. Не уверен, что мне это нравится!

Итак, всегда включайте правильную директорию в ваших настройках при включении проектов! В противном случае вы можете упасть как я.

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