开发者社区> 问答> 正文

为什么在我构建项目时gradle消除了依赖

我不知道为什么gradle对我这样做。我有一个看起来像这样的多项目:

|Parent
 |client
 |common
 |service

Parent是一个空项目,而client和common是gradle java项目:我在客户端和service中都使用了一些类,因此我想创建一个通用项目并构建一个jar,稍后再在这两种服务中使用和客户。我可以构建通用jar,但是每当我尝试“添加对common的依赖”然后尝试“刷新gradle”时,它都会删除依赖并且无法构建! 这是我的工作: 在此处输入图片说明

然后按此,因为我要构建它

它只是消除了依赖性!!!

这是来自客户端项目的build.gradle文件:

plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}

group = 'sot.rest'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework', name: 'spring-web', version: '5.2.4.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter'
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
}

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 21:14:42 549 0
1 条回答
写回答
取消 提交回答
  • 看看我对上一个问题的回答。它应该给您一个想法,如何构造和声明多模块gradle项目。

    我认为,当您使用IntelliJ添加对模块的依赖时,它只是通过IntelliJ中的项目设置将其添加到项目结构中。然后,当您单击刷新时,IntelliJ将基于Gradle文件配置项目。

    为了使其工作,父项目也应该是Gradle项目。如果不只是添加build.gradle,请settings.gradle在父目录下。 然后在settings.gradle添加子项目,如:

    rootProject.name = 'Parend'
    include('common') //this adds the module
    include('client')
    include('service')
    

    然后,在和模块的build.gradle文件中client,service将common模块作为依赖项添加到:

    dependencies {
        implementation project(':common')
        //...
    }
    

    如果您打算与Gradle进行更多合作,则可以阅读有关Gradle总体见解的这篇文章

    编辑:( 我知道您使用implementation它时不会抛出错误)

    要与Gradle一起使用多模块项目,根项目也必须是Gradle项目。根目录可能包含也可能不包含任何源代码,但是它需要具有自己的Gradle文件。 因此,如果您的项目结构需要像这样:

    Root project 'parent'
    +--- Project ':client'
    +--- Project ':common'
    \--- Project ':service'
    

    然后,parent需要将和子模块项目设置为Gradle项目。要使其成为parent项目,至少需要有一个settings.gradle文件并声明其包含子模块,类似于:

    rootProject.name = 'parent' 
    include 'common'
    include 'client'
    include 'service'
    

    每个模块(client,common,service)必须有build.gradle其目录下的文件。子模块使用common,因此service和client必须common在自己的build.gradle文件中添加as依赖项,例如:

    dependencies {
        implementation project(':common')
        //and rest of required dependencies
        //testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    

    然后,您应该能够从common那些子模块中导入公共类,并且可以正确地重建或重新导入项目。

    由于parent项目不包含任何源代码,因此它不需要自己的构建脚本,但是所有子模块的构建文件都需要在构建文件顶部声明java插件:

    plugins {
        id 'java'
    }
    

    由于您正在使用IntelliJ,并且您的项目以前可能具有不同的结构,因此IntelliJ设置中的项目结构现在可能会混乱。 要解决此问题,您可以转到“文件”->“项目结构”->“模块”,然后再次删除/重新导入父模块。

    如果您现在没有很多课程,建议您创建一个新项目。在“新项目”窗口中,选择Gradle,然后取消选中“其他库和框架”中的Java。这将创建空白的Gradle项目。 生成项目后,右键单击parent,然后选择New-> Module。在新模块窗口中,再次选择Gradle并选中Java(因为子模块将包含源代码)。 这样,IntelliJ将自动将创建的模块包括到settings.gradle根/父项目的文件中,并且该模块的构建文件将包含基本配置(例如Java插件)。 但是您仍然将一个模块的依赖项添加到该模块的build.gradle文件中的另一个模块中。

    回答来源:Stack Overflow

    2020-03-25 21:17:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云MaxCompute百问百答 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载