首页 新闻 会员 周边

Gradle+SpringBoot多模块项目,模块间的依赖没有传递

0
悬赏园豆:50 [已解决问题] 解决于 2023-10-23 15:57

gradle版本8.4或者8.2.1、springboot版本2.7.15、jdk8

1、项目结构

- GradleSpringBootDemo
 - GradleCommon
 - GradleOne
  • 如图:

2、引入依赖

2.1、GradleSpringBootDemo的配置

  • build.gradle
plugins {
    id 'java'
    id 'idea'
//    id 'java-library'
    id 'maven-publish'
    id 'org.springframework.boot' version '2.7.15'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

//所有模块生效——基础配置
allprojects {
    // 配置项目信息
    group = 'com.cc'
    version = '0.0.1-SNAPSHOT'
    // 配置字符编码
    tasks.withType(JavaCompile).configureEach {
        options.encoding = 'UTF-8'
    }

    java {
        sourceCompatibility = '8'
        targetCompatibility = '8'
    }

    //仓库配置
    repositories {
        //本地
        mavenLocal()
        //阿里仓库
        maven { url 'https://maven.aliyun.com/repository/public/' }
        //公司仓库。必须用:https。Gradle默认情况下不允许使用不安全的协议,以提高安全性。
        maven { url 'https://********:*******/repository/maven-public/' }
        //中央仓库
        mavenCentral()
    }

}

//所有子模块生效——springboot配置、导包版本管理、打包管理
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    //所有子模块都是springboot项目,如不是,不能打包。
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    //所有子模块的-依赖版本管理
    dependencyManagement {
        dependencies {
            dependency "cn.hutool:hutool-all:5.0.7"
            dependency "org.apache.commons:commons-lang3:3.5"
        }
    }

    //使用 gradle打包工具
//    jar {
//        manifest.attributes provider: 'gradle'
//    }

    tasks.named('test') {
        useJUnitPlatform()
    }

}

// 定义任务:配置 gradle-wrapper.properties 下载gradle属性
wrapper {
    //gradle的版本
    gradleVersion = '8.4'
    //版本类型:BIN、ALL(完全版,可以看gradle的代码)
    distributionType = 'ALL'
}
  • settings.gradle
rootProject.name = 'GradleSpringBootDemo'
include 'GradleOne'
include 'GradleCommon'

2.2、GradleCommon模块引入依赖

GradleCommon 的 build.gradle

   dependencies {
      implementation('cn.hutool:hutool-all')
      implementation 'org.apache.commons:commons-lang3'
    }

2.3、GradleOne模块依赖于GradleCommon

GradleOne 的 build.gradle

dependencies {
    implementation project(':GradleCommon')
}

3、问题

GradleOne模块可以使用GradleCommon模块中自己建的类,但是无法使用GradleCommon导入的依赖:hutool和commons-lang3,说明依赖没有传递,请问怎么解决?

  • Gradle构建如下图:

  • 项目截图2:

C_C_菜园的主页 C_C_菜园 | 初学一级 | 园豆:97
提问于:2023-10-07 17:50
< >
分享
最佳答案
1

implementation改成api试试,gradle的高版本需要改成api才会传递依赖,具体可以看gradle文档https://docs.gradle.org/current/userguide/java_library_plugin.html

GradleCommon 的 build.gradle

   dependencies {
      api('cn.hutool:hutool-all')
      api 'org.apache.commons:commons-lang3'
    }
收获园豆:50
basic60 | 菜鸟二级 |园豆:252 | 2023-10-21 12:55

卧槽,谢谢大佬。真给我解决了。

C_C_菜园 | 园豆:97 (初学一级) | 2023-10-23 15:56

我看api不是作废了么,咋又能用了。

C_C_菜园 | 园豆:97 (初学一级) | 2023-10-23 15:57
其他回答(1)
-1

gradle没有用过,我们一般使用的maven。
我们的springboot分层架构和多模块的依赖关系

主要是参考的阿里的Java规范,可以看看是否对您有用

智客工坊 | 园豆:1855 (小虾三级) | 2023-10-07 21:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册