2013-11-14 4 views
0

Я пытаюсь структурировать свое приложение (построенное с помощью Gradle и разработанное в IntelliJ, это выглядит очень важно здесь) модульным способом (с использованием Guice для модулей и DI). Дело в том, что я хотел бы модули общаться только через интерфейсы, поэтому в идеале я хотел бы достичь такой структуры:Как структурировать проект с несколькими модулями с интерфейсами в IntelliJ?

+-- project 
    +-- module1 
     +-- src 
     +-- iface 
     +-- impl 
     +-- test 
     +-- build.gradle 
    .. 
    +-- moduleX 
     +-- src 
     +-- iface 
     +-- impl 
     +-- test 
     +-- build.gradle 

И в build.gradle Я хотел бы просто включить project('moduleX', configuration : 'iface') или что-то подобное.

В Gradle Я могу сделать это с помощью sourceSets и т. Д., Вот и все круто! Но проблема в том, что IntelliJ не распознает его, так как я делаю это в сценариях градиента! Для IntelliJ это еще один модуль.

Это довольно странно, поскольку даже maven поддерживал аналогичную структуру проекта (если я правильно помню). Означает ли это, что есть какой-то другой способ добиться того, чего я хочу? И IntelliJ ожидает, что я буду использовать этот подход или просто хочу, чтобы я разделил iface, а остальные - на отдельные модули (вещь, которую я хочу избежать, я не хочу, чтобы в моих проектах было слишком много модулей, поскольку это замедляет среду dev)?

ответ

1

Вместо использования наборов источников вы обычно структурируете это как многопроектную сборку, которая будет сопоставлена ​​с многомодульным проектом в IntelliJ и рабочей областью с несколькими проектами в Eclipse. Чтобы узнать больше о многопроектных сборках, ознакомьтесь с соответствующей главой в Gradle User Guide.

+0

но не означает, что мне в основном нужен 2 проекта на каждый модуль? 1 для API, 1 для реализации. Это может стать немного беспокойным с большим количеством модулей. На самом деле мы уже используем сборку мультипроектов, но с разным уровнем детализации. Я все же предпочел бы, чтобы gradle поддерживал проекты с папками iface/impl/test, но хорошо, думаю, я пойду с мультипроектным подходом ;-) –

+0

Вам не нужно иметь отдельные проекты для 'iface' /' impl'/'test'. По умолчанию IntelliJ будет собирать все исходные каталоги для наборов источников 'main' и' test'. См. Ссылку [DSL reference] (http://www.gradle.org/docs/current/dsl/org.gradle.plugins.ide.idea.model.IdeaModule.html) о том, как объявить дополнительные источники. –

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