首先,记录一个知识点,gradle工程的reload gradle project和refresh gradle dependencies区别:
reload gradle project是将本地仓库中的依赖刷新到缓存,并重新载入工程。所以这个过程是无法获取远端仓库中最新的依赖。
refresh gradle dependencies是从远端仓库(可能是自己搭建的仓库,或者maven中心仓库)将项目所需依赖拉到本地仓库,然后执行reload gradle project的过程。所以,如果每次被依赖的项目publish包时,并没有推到本地仓库,则依赖的项目需要执行refresh gradle dependencies才能拉到最新的依赖。
下面进入正文。
假设我们有两个项目A,B。项目A需要依赖项目B。
1.配置项目B,使其可以将自己的jar包推到本地仓库中。
修改其build.gradle文件。
plugins {
...
id'maven-publish'
}
...
repositories {
mavenCentral()
}
// 添加下面代码后,reload gradle project会发现 idea右侧,该module下的Tasks多了一个分组“publishing”,点击其中publishToMavenLocal即可推到本地仓库。
publishing {
publications {
myLibrary(MavenPublication) {
from components.java
// The names of the three values below can not be defined arbitrarily.
groupId"${group}"
artifactId"${archivesBaseName}"
version"${version}"
}
}
repositories {
//这里很关键,表明会将依赖推到本地仓库。
mavenLocal()
// maven {
// url "s3://someS3Bucket/maven2"
// credentials(AwsCredentials) {
// accessKey "someKey"
// secretKey "someSecret"
// }
// }
// maven {
// url "s3://someS3Bucket/maven2"
// credentials(AwsCredentials) {
// // Default AWS chain here?
// }
// }
// maven {
// url "s3://myCompanyBucket/maven2"
// authentication {
// awsIm(AwsImAuthentication) // load from EC2 role or env var
// }
// }
}
}
dependencies {
implementation'org.springframework.boot:spring-boot-starter-data-redis'
implementation'com.github.ben-manes.caffeine:caffeine:3.0.5'
implementation'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.1'
implementation"org.apache.commons:commons-collections4:4.4"
implementation'redis.clients:jedis:4.1.0'
// implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'
testImplementation'org.springframework.boot:spring-boot-starter-test'
testImplementation'io.projectreactor:reactor-test'
}
tasks.named('test') {
useJUnitPlatform()
}
此时到本地仓库下USER_HOME/.m2/repository/能找到刚推送的包。
2. 在项目A中,build.gradle下设置首先从本地仓库拉取代码。
repositories{
mavenLocal()
mavenCentral()
maven{ url'https://repo.spring.io/milestone' }
}
gradle任务下执行reload gradle project,将B的依赖加载进来。
这时可以尝试写段代码,引用B。并 build打包。
注意:
在windows上,我的USER_HOME为C:\Users\hozha\,mac上为Users/zhao/
这个路径是不会因为idea中gralde的设置而变化,据说可以通过添加环境变量GRADLE_USER_HOME修改,建议使用默认的,防止出错找不到依赖。
网友评论