为什么我使用gradle构建java的多模块项目时依赖不能正常传递呢
最近由于Spring向gradle进行迁移,所以打算也学习一下gradle,我在使用gradle构建多模块的spring boot项目的时候发现依赖不能正常的传递,希望可以找出解决办法
出错的地方:
关键的代码块:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为
implementation
是本项目内部的实现依赖,是不对外暴露传递的 。如果你需要对外暴露传递可以使用
api
添加依赖。例: