2017-02-19 33 views
0

У меня есть проект корня колышки P с двумя подпроектами P:foo и P:bar. Естественно, Gradle строит их в алфавитном порядке: bar, foo. Но мне нужно, чтобы foo был построен первым, когда я говорю gradle build в корневом каталоге P. Это связано с тем, что bar зависит от артефакта AAR (Android), который foo публикует в местном репозитории Maven. Оба bar и foo - такие проекты для Android-библиотек.Модуль сборки строгального модуля

Это похоже на легкую проблему, но я не могу понять это. Я читал около evaluationDependsOn, поэтому в bar/build.gradle, я говорю в первой строке: evaluationDependsOn "foo:". Увы, это, похоже, не имеет никакого эффекта. Является ли эта функция Gradle сломанной в конце?

Используя compile project, я мог бы ввести в действие foo, который будет создан первым, но это добавит скомпилированные классы непосредственно к bar, чего я не хочу.

Так что я застрял. Я мог бы переименовать foo в aaa_foo, и все мои проблемы исчезнут, но я не решаюсь назвать это решением.

+0

«Используя компиляционный проект, я мог бы обеспечить, чтобы foo был создан первым, но это добавило бы скомпилированные классы непосредственно в bar, что я не хочу» - только если «bar» - это прикладной модуль, и в этом Если вы хотите, чтобы в нем были классы 'foo'. Если 'bar' является библиотечным модулем, классы' foo' не будут входить в 'bar' AAR. – CommonsWare

+0

Если я говорю 'compile project', Gradle пытается связать библиотеку дважды (один раз для' compile project' и один раз для зависимости Maven-repository), и я получаю сообщение об ошибке «Ошибка: более одной библиотеки с именем пакета "com.acme.frob». – phkoester

+0

Тогда ваши скрипты сборки Gradle имеют проблемы. Поскольку ваш вопрос не включает их, я не могу точно сказать, где вы ошибетесь. Но почти каждая из моих библиотек CWAC имеет два модуля: библиотеку и демонстрационный проект, который связан с библиотекой. Иногда проект имеет две библиотеки или две демонстрации. Все они работают с использованием 'compile project()' (для зависимостей между библиотеками от одного и того же общего проекта) или 'debugCompile project()' (для зависимостей между библиотеками, где я использую 'releaseCompile', чтобы подтвердить, что я может вытащить из моего хранилища артефактов). – CommonsWare

ответ

1

Хорошо, позвольте мне сам ответить на этот вопрос. Думаю, я нашел достойное решение.

проект зависимость в Gradle является Usally выражается с помощью compile project, который не только строит другой проект, но и добавляет классы другого проекта к классам текущего проекта. Если вы хотите убедиться, что еще один проект создан до вашего, вы можете использовать зависимость задачи .

В моей Android среды, в bar/build.gradle, я говорю

preBuild.dependsOn ":foo:build" 

и все хорошо. Теперь foo всегда строится до bar.