我正在使用IntelliJ IDEA。我习惯于以如下方式使用Maven多模块项目:
让我们说模块M00
是我项目的公共API,模块M0
在内部也使用它,而模块M1
本身是我项目中其他模块所依赖的公共私有部分。
也就是说,M2
和M0
都依赖于M0
,而M00
也依赖于M1
,即在模块{{1}中}和M2
,我可以使用模块M0
和M00
中的所有代码。
使用Maven,这就像创建模块,编写代码,然后简单地编译它们(配置了正确的POM)一样简单。但是,使用Gradle,我无法从另一个模块内部访问一个模块的代码(类/方法/...)。
我发现的唯一解决方案是与所有内容分开构建上述M00
模块,并将其安装在本地Maven存储库中,然后对模块M0
执行相同的操作,然后像其他/主要模块(M1
和M2
)中的任何其他外部依赖项。
这意味着每次我对模块M0
或M00
进行任何更改时,我都必须浪费很多时间进行单调而无聊的工作(在Maven中, IntelliJ从同一项目的模块中检测代码并自动使用它,而无需每次更改时都让我始终构建和安装“依赖项”。
有什么方法可以使它更简单(“类似于Maven”)?因为我真的看不出有任何理由将Gradle用于这样的项目,否则它会加重和减慢开发速度。
P.S .:我非常熟悉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”文件的内容
这些文件都是相同的,只是名称不同(
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
,模块{{1} }可以是torifly-sdk
,而M00
可以是模块torifly-protocol
。模块M0
是一个单独的独立模块,未连接到该项目内的任何其他模块。
答案 0 :(得分:1)
如果我正确理解了您的问题,那么您只想在模块之间建立依赖关系。基本上与Maven中的工作相同。
模块M0-build.gradle
dependencies {
compile project(':M00')
}
必须对每个模块间依赖项执行此操作。有关更多信息,请参见Gradle docs。