美文网首页
local repository实现本地两个工程间依赖

local repository实现本地两个工程间依赖

作者: 洪兴掌管一代 | 来源:发表于2022-03-08 11:46 被阅读0次

首先,记录一个知识点,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修改,建议使用默认的,防止出错找不到依赖。

相关文章

网友评论

      本文标题:local repository实现本地两个工程间依赖

      本文链接:https://www.haomeiwen.com/subject/mikarrtx.html