Я использую IntelliJ IDEA.Я привык работать с многомодульными проектами Maven следующим образом:
- Создать проект.
- Создать модули, скажем, M1, M2, M0 иM00.
- Настройка всех 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
- это отдельный автономный модуль, не подключенный к каким-либо другим модулям внутри этого проекта.