IntelliJ - Gradle проект с несколькими взаимосвязанными (!) Модулями - PullRequest
0 голосов
/ 21 февраля 2019

Я использую IntelliJ IDEA.Я привык работать с многомодульными проектами Maven следующим образом:

  1. Создать проект.
  2. Создать модули, скажем, M1, M2, M0 иM00.
  3. Настройка всех POM и т. Д. → готово.

Допустим, модуль M00 является открытым API моего проекта, который также используется внутренне модулем M0, которыйсама по себе является частной частной частью моего проекта, от которой зависят другие модули.

То есть M1 и M2 оба зависят от M0, тогда как M0 также зависит от M00, чтов модулях M1 и M2 я могу использовать весь код из модулей M0 и M00.

С Maven это так же просто, как просто создавать модули, писать код,а затем просто скомпилировать их (с правильными настройками POM).Однако с Gradle я не могу получить доступ к коду (классы / методы / ...) одного модуля из другого.

Единственное решение, которое я нашел, - это построить вышеупомянутый модуль M00 отдельно от всего и установитьэто в моем локальном репозитории Maven, затем сделайте то же самое для модуля M0, а затем используйте оба модуля точно так же, как любые другие внешние зависимости в других / основных модулях (M1 и M2).

Этоозначает, что мне приходится тратить действительно много времени на выполнение этой монотонной и скучной работы каждый раз, когда я делаю какие-либо изменения в модулях M0 или M00 (в то время как с Maven IntelliJ обнаруживает код из модулей того же проектаи использует его автоматически, не заставляя меня всегда создавать и устанавливать «зависимости» каждый раз, когда я делаю изменения).

Есть ли способ сделать это проще («подобный Maven»)?Потому что я на самом деле не вижу причин использовать Gradle для такого проекта , в противном случае , поскольку он только затвердевает и замедляет разработку.

PS: я очень новичок в Gradle

Структура моего проекта:

torifly
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       ├── java
│       └── resources
├── torifly-client
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
├── torifly-protocol
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
├── torifly-sdk
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
├── torifly-server
│   ├── build.gradle
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
└── torifly-updater
    ├── build.gradle
    └── src
        ├── main
        │   ├── java
        │   └── resources
        └── test
            ├── java
            └── resources

Содержимое корневого файла settings.gradle

rootProject.name = 'torifly'

include "torifly-client"
include "torifly-protocol"
include "torifly-server"
include "torifly-sdk"
include 'torifly-updater'

Содержимое корневого build.gradle файла

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
        jcenter()
    }
}

subprojects {
    repositories {
        mavenCentral()
        mavenLocal()
        jcenter()
    }

    apply plugin: 'java'
    apply plugin: 'idea'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
}

Содержимое другого (модулей) 'build.gradle'files

Все эти файлы одинаковы и различаются только по имени (group)

plugins {
    id 'java'
    id 'idea'
}

group 'net.torifly.protocol'
version '1.0.0'

dependencies {
    compile group: 'me.darksidecode.easysockets', name: 'EasySockets', version: '1.0.0'
}

Если в самом вопросе указаны ссылки на мои "примеры имен", модули torifly-client и torifly-server могут относиться к выборкам M1 и M2 соответственно, модуль torifly-sdk может быть M00, а torifly-protocol может быть модулем M0.Модуль torifly-updater - это отдельный автономный модуль, не подключенный к каким-либо другим модулям внутри этого проекта.

1 Ответ

0 голосов
/ 21 февраля 2019

Если я правильно понимаю вашу проблему, вы просто хотите настроить зависимость между вашими модулями.Это работает в основном так же, как и в Maven.

Модуль M0 - build.gradle

dependencies {
    compile project(':M00') 
}

Это должно быть сделано для каждой межмодульной зависимости.Для получения дополнительной информации см. Документы Gradle .

...