Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ-Gradle项目,带有多个相互连接的(!)模块_Java_Maven_Gradle_Intellij Idea_Multi Module - Fatal编程技术网

Java IntelliJ-Gradle项目,带有多个相互连接的(!)模块

Java IntelliJ-Gradle项目,带有多个相互连接的(!)模块,java,maven,gradle,intellij-idea,multi-module,Java,Maven,Gradle,Intellij Idea,Multi Module,我正在使用IntelliJ IDEA。我习惯于以如下方式在it中处理Maven多模块项目: 创建一个项目 创建模块,比如M1、M2、M0和M00 设置所有POM等→ 完成了 假设moduleM00是我的项目的一个公共API,moduleM0也在内部使用它,它本身是我的项目的一个公共私有部分,其他模块依赖它 也就是说,M1和M2都依赖于M0,而M0也依赖于M00,也就是说,在模块M1和M2中,我可以使用模块M0和M00中的所有代码 对于Maven,这一切都很简单,只需创建模块、编写代码,然后简单地

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

  • 创建一个项目
  • 创建模块,比如M1、M2、M0和M00
  • 设置所有POM等→ 完成了
  • 假设module
    M00
    是我的项目的一个公共API,module
    M0
    也在内部使用它,它本身是我的项目的一个公共私有部分,其他模块依赖它

    也就是说,
    M1
    M2
    都依赖于
    M0
    ,而
    M0
    也依赖于
    M00
    ,也就是说,在模块
    M1
    M2
    中,我可以使用模块
    M0
    M00
    中的所有代码

    对于Maven,这一切都很简单,只需创建模块、编写代码,然后简单地编译它们(配置适当的POM)。然而,使用Gradle,我无法从一个模块内部访问另一个模块的代码(类/方法/…)

    我找到的唯一解决方案是分别构建前面提到的
    M00
    模块,并将其安装到本地Maven存储库中,然后对模块
    M0
    执行相同的操作,然后像其他/主模块中的任何其他外部依赖项一样使用这两个模块(
    M1
    M2

    这意味着每当我对模块
    M0
    M00
    进行任何更改时,我都必须浪费大量的时间做那些单调乏味的工作(而对于Maven,IntelliJ从同一个项目的模块中检测代码并自动使用,而不需要我总是构建和安装“依赖项”每次我做出改变)

    有没有办法让这更简单(“像Maven一样”)?因为我真的看不出有任何理由在这样的项目中使用Gradle,因为它只会使开发变得更加困难和缓慢。

    附言:我是格拉德尔的新手

    我的项目结构:

    根“settings.gradle”文件的内容

    build.gradle
    文件的内容

    其他(模块)“build.gradle”文件的内容

    这些文件都是相同的,只是名称不同(
    group


    如果链接到问题本身中我的“示例名称”,模块
    torifly客户端
    torifly服务器
    可能分别引用示例
    M1
    M2
    ,模块
    torifly sdk
    可能是
    M00
    ,而
    torifly协议
    可能是模块
    M0
    。模块
    torifly updater
    是一个单独的独立模块,未连接到此项目中的任何其他模块。

    如果我正确理解您的问题,您只需要设置模块之间的依赖关系。这与Maven中的工作原理基本相同

    模块M0-构建.渐变

    dependencies {
        compile project(':M00') 
    }
    
    这必须针对每个模块间依赖性进行。有关更多信息,请参阅

    rootProject.name = 'torifly'
    
    include "torifly-client"
    include "torifly-protocol"
    include "torifly-server"
    include "torifly-sdk"
    include 'torifly-updater'
    
    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'
        }
    }
    
    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'
    }
    
    dependencies {
        compile project(':M00') 
    }