为什么我使用gradle构建java的多模块项目时依赖不能正常传递呢

发布于 2022-09-12 12:58:18 字数 5534 浏览 24 评论 0

最近由于Spring向gradle进行迁移,所以打算也学习一下gradle,我在使用gradle构建多模块的spring boot项目的时候发现依赖不能正常的传递,希望可以找出解决办法

出错的地方:
image.png

关键的代码块:


package org.shanzhaozhen.testgradle.common;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
@Data
public class CustomUser implements UserDetails {
    private String username;
 private String password;
 @Override
 public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
 }
    @Override
 public boolean isAccountNonExpired() {
        return false;
 }
    @Override
 public boolean isAccountNonLocked() {
        return false;
 }
    @Override
 public boolean isCredentialsNonExpired() {
        return false;
 }
    @Override
 public boolean isEnabled() {
        return false;
 }
}

项目结构如下:

├─.gradle
│  ├─6.6.1
│  │  ├─executionHistory
│  │  ├─fileChanges
│  │  ├─fileContent
│  │  ├─fileHashes
│  │  ├─javaCompile
│  │  └─vcsMetadata-1
│  ├─buildOutputCleanup
│  ├─checksums
│  ├─configuration-cache
│  └─vcs-1
├─.idea
│  └─modules
│      ├─basic
│      └─gateway
├─basic
│  ├─build
│  │  ├─classes
│  │  │  └─java
│  │  │      └─main
│  │  ├─generated
│  │  │  └─sources
│  │  │      ├─annotationProcessor
│  │  │      │  └─java
│  │  │      │      └─main
│  │  │      └─headers
│  │  │          └─java
│  │  │              └─main
│  │  └─tmp
│  │      └─compileJava
│  └─src
│      └─main
│          └─java
│              └─org
│                  └─shanzhaozhen
│                      └─testgradle
├─common
│  ├─build
│  │  ├─classes
│  │  │  └─java
│  │  │      └─main
│  │  │          └─org
│  │  │              └─shanzhaozhen
│  │  │                  └─testgradle
│  │  │                      └─common
│  │  ├─generated
│  │  │  └─sources
│  │  │      ├─annotationProcessor
│  │  │      │  └─java
│  │  │      │      └─main
│  │  │      └─headers
│  │  │          └─java
│  │  │              └─main
│  │  └─tmp
│  │      └─compileJava
│  └─src
│      └─main
│          └─java
│              └─org
│                  └─shanzhaozhen
│                      └─testgradle
│                          └─common
└─gradle
    └─wrapper

根目录的build.gradle配置如下:

buildscript {
 ext {
 set('springBootVersion', '2.3.2.RELEASE')
        set('springCloudAlibabaVersion', '2.2.3.RELEASE')
        set('springCloudVersion', 'Hoxton.SR8')
        set('springBootManagementVersion', '1.0.10.RELEASE')
        set('mysqlDriverVersion', '8.0.21')
        set('mybatisPlusVersion', '3.4.0')
        set('jjwtVersion', '0.9.1')
        set('druidVersion', '1.1.24')
        set('swaggerVersion', '3.0.0')
    }
 // gradle仓库的依赖源
 repositories {
 // 默认maven官方源
 // mavenCentral()
//        mavenLocal()
 maven{ url 'https://maven.aliyun.com/repository/central' }
 maven{ url 'https://maven.aliyun.com/repository/public' }
 }
 dependencies {
 classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("io.spring.gradle:dependency-management-plugin:${springBootManagementVersion}")
    }
}
allprojects {
 apply plugin: 'java'
 apply plugin: 'io.spring.dependency-management'
 apply plugin: 'idea'
 group = 'org.shanzhaozhen'
 version = '0.0.1-SNAPSHOT'
 sourceCompatibility = '1.8'
 targetCompatibility = '1.8'
 // gradle仓库的依赖源
 repositories {
 // 默认maven官方源
 // mavenCentral()
//        mavenLocal()
 maven{ url 'https://maven.aliyun.com/repository/central' }
 maven{ url 'https://maven.aliyun.com/repository/public' }
 }}
subprojects {
 apply plugin: 'java-library'
 // java编译的时候缺省状态下会因为中文字符而失败,所以这儿需要改为utf8
 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
 configurations {
 developmentOnly
        runtimeClasspath {
 extendsFrom developmentOnly
        }
 compileOnly {
 // lombok 配置
 extendsFrom annotationProcessor
        }
 }
 // gradle仓库的依赖源
 repositories {
 // 默认maven官方源
 // mavenCentral()
//        mavenLocal()
 maven{ url 'https://maven.aliyun.com/repository/central' }
 maven{ url 'https://maven.aliyun.com/repository/public' }
 }
 dependencies {
 implementation(
//                'org.springframework.boot:spring-boot-starter-web',
 "io.springfox:springfox-boot-starter:${swaggerVersion}",
                'com.alibaba:fastjson:1.2.73'
 )
        compileOnly 'org.projectlombok:lombok'
 developmentOnly 'org.springframework.boot:spring-boot-devtools'
 annotationProcessor(
                'org.projectlombok:lombok',
                'org.springframework.boot:spring-boot-configuration-processor'
 )
        testImplementation('org.springframework.boot:spring-boot-starter-test') {
 exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
 }
 }
 dependencyManagement {
 imports {
 mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
 mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
 mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
 }
 }
 }
 

basic模块的build.gradle配置如下:

description = 'basic'
dependencies {
 api project(':common')
    implementation(
            'org.springframework.boot:spring-boot-starter-web'
 )
}

common模块的build.gradle配置如下:

description = 'common'
dependencies {
 implementation(
            'org.springframework.security:spring-security-core'
 )
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世界如花海般美丽 2022-09-19 12:58:18

因为 implementation 是本项目内部的实现依赖,是不对外暴露传递的 。
如果你需要对外暴露传递可以使用 api 添加依赖。
例:

api('org.springframework.security:spring-security-core')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文