2014-10-23 2 views
1

У меня есть следующий проект дерево:Понимание Gradle Мультипроект здание

root 
| 
|--MP 
| | 
| |---build.gradle 
| 
|--API 
| 
|---build.gradle 
| 
|---settings.gradle 

MP :: buiild.gradle:

dependencies { 
    compile project(':API') 
} 

корень: build.gradle:

subprojects{ 
    apply plugin : 'java' 
    repositories{ 
     mavenCentral() 
    } 
    version = '1.0' 
    jar{ 
     manifest{ 
      attributes 'Gradle': 'Multiproject' 
     } 
    } 
} 

корень: : settings.gradle:

include 'API', 'MP' 

Дело в том, что мы удалим один из этих трех файлов. gradle build Задача не удалась. Поэтому мне непонятно, как java plugin строит проект. Я бегу gradle build для MP::build.gradle, следующий вывод был получен:

:API:compileJava 
:API:processResources UP-TO-DATE 
:API:classes 
:API:jar 
:MP:compileJava 
:MP:processResources UP-TO-DATE 
:MP:classes 
:MP:jar 
:MP:assemble 
:MP:compileTestJava UP-TO-DATE 
:MP:processTestResources UP-TO-DATE 
:MP:testClasses UP-TO-DATE 
:MP:test UP-TO-DATE 
:MP:check UP-TO-DATE 
:MP:build 

Итак, первым, что мы должны делать, когда мы бежим gradle build для MP::build.gradle чтобы решить все dependecies. Насколько я понимаю, это означает загрузку банок из внешних репозиториев и, при необходимости, компиляцию файлов jar из отдельных проектов. В моем случае просто получить API проект jar -файл.

Так что мой вопрос в том, что является подзапросом действий для компиляции этого jar. Что произойдет, когда gradle наткнулся на compie project(':API'). Он ищет файл gradle.settings и сообщает об ошибке, если он отсутствует или он ищет build.gradle в корневом каталоге в первую очередь?

ответ

1

Чтобы получить быстрый взгляд, что происходит в Java мультипроекте: http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html

«За подпоследовательности действий, компилировать эту банку.» Посмотрите на диаграмму http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html

И crossproject зависимостей Цитата http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:cross_project_configuration : «По умолчанию, конфигурация всех проектов происходит до того, как задание выполнено»

+0

Позвольте мне задать вам вопрос. Где вы нашли ответ на мой вопрос в первых двух ссылках, которые вы указали? Не могли бы вы привести фактический ответ? –

+0

Просьба предоставить некоторые цитаты, поскольку ссылки приходят и уходят в сети – cfrick

+0

@cfrick. Эти вопросы возникают, когда я читал главу 7. Я создаю эти проекты, но нет никаких подробностей о том, как градиль точно работает с подпроекты. Я хотел бы понять, как это работает в деталях. –

0

Я надеюсь, что вы уже поняли это.

Так Gradle сборки жизненного цикла объясняет это ... жизненный цикл, как показано ниже 1) инициализации 2) в Кoнфигурировании 3) execuion.

для вашего конкретного случая многоэтажного сборки проекта, что происходит,

1) Инициализация :: здесь settings.gradle ищется независимо от того, из которого проецировать вы запустите его (он всегда пытается найти настройки .gradle при запуске задачи и включает в себя те проекты, которые определены в его директиве include.) 2) config создает дерево задач на основе задачи, которую вы пытались запустить, и ее зависимостей. 3) исполнение:

выполняет дерево задач.

Пожалуйста, дайте мне знать, если это поможет.

Вы можете прочитать эту страницу для большей ясности.

http://www.gradle.org/docs/current/userguide/build_lifecycle.html

Смежные вопросы