IntelliJ-具有多个互连(!)模块的Gradle项目

时间:2019-02-21 14:08:56

标签: java maven gradle intellij-idea multi-module

我正在使用IntelliJ IDEA。我习惯于以如下方式使用Maven多模块项目:

  1. 创建一个项目。
  2. 创建模块,例如M1,M2,M0和M00。
  3. 设置所有POM等→完成。

让我们说模块M00是我项目的公共API,模块M0在内部也使用它,而模块M1本身是我项目中其他模块所依赖的公共私有部分。

也就是说,M2M0都依赖于M0,而M00也依赖于M1,即在模块{{1}中}和M2,我可以使用模块M0M00中的所有代码。

使用Maven,这就像创建模块,编写代码,然后简单地编译它们(配置了正确的POM)一样简单。但是,使用Gradle,我无法从另一个模块内部访问一个模块的代码(类/方法/...)。

我发现的唯一解决方案是与所有内容分开构建上述M00模块,并将其安装在本地Maven存储库中,然后对模块M0执行相同的操作,然后像其他/主要模块(M1M2)中的任何其他外部依赖项。

这意味着每次我对模块M0M00进行任何更改时,我都必须浪费很多时间进行单调而无聊的工作(在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-clienttorifly-server可能分别引用示例M1M2,模块{{1} }可以是torifly-sdk,而M00可以是模块torifly-protocol。模块M0是一个单独的独立模块,未连接到该项目内的任何其他模块。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您只想在模块之间建立依赖关系。基本上与Maven中的工作相同。

模块M0-build.gradle

dependencies {
    compile project(':M00') 
}

必须对每个模块间依赖项执行此操作。有关更多信息,请参见Gradle docs