Gradle 使用maven本地倉庫 帶來的思考 本篇主要探究一下 在使用Gradle 的時候一般會配置 maven 的本地倉庫的,那是不是Gradle 可以直接使用 maven本地倉庫的jar呢 ? 下麵來探究一下 思考 當我們在使用Gradle的時候 一配置一個 mavenLocal() 代表它 ...
Gradle 使用maven本地倉庫 帶來的思考
本篇主要探究一下 在使用Gradle 的時候一般會配置 maven 的本地倉庫的,那是不是Gradle 可以直接使用 maven本地倉庫的jar呢 ? 下麵來探究一下
思考
當我們在使用Gradle的時候 一配置一個 mavenLocal()
代表它會使用maven的本地倉庫, 此時是不是直接用了maven的本地倉庫中的jar包呢? 新版本好像已經可以直接使用maven倉庫中的 jar 了 不過老版本好像是不行的
驗證方式
Gradle version : 7.1
下麵我把maven 的倉庫和 Gradle的倉庫放到同一個目錄下麵 看看會產生什麼效果, 如果依賴的jar 只有一份 那麼就是公用了
準備環境
配置maven 的 localRepository
為了測試 我先把maven 的settings文件中配置的 localRepository 改成一個空的目錄repository_maven_gradle_test
<localRepository>/Users/johnny/.m2/repository_maven_gradle_test</localRepository>
配置Gradle 的預設本地倉庫
預設gradle倉庫位置為~/.gradle/caches/modules-2/files-2.1/....
那麼如何改變這個位置呢?需要配置環境變數GRADLE_USER_HOME
, 指定新的目錄即可
這裡把 gradle 的本地倉庫配置到如下的目錄 和 maven 一致
export GRADLE_USER_HOME=/Users/johnny/.m2/repository_maven_gradle_test
創建maven 項目
#隨便找個目錄執行 ,我這裡就在 ~/.m2/下執行的
mkdir maven_project_demo
vim maven_project_demo/pom.xml
添加pom.xml 文件內容如下 隨便依賴一個jar 這裡選擇lombok
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.johnny</groupId>
<artifactId>mavenprojectdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mavenprojectdemo</name>
<description>mavenprojectdemo</description>
<dependencies>
<!--引入插件lombok 自動的set/get/構造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
</project>
創建Gradle 項目
通過Gradle 提供的init方式直接初始化
gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1
Project name (default: gradle_project_demo): gradle_project_demo
Source package (default: gradle_project_demo): com.johnny.gradleprojectdemo
build.gradle添加 lombok
implementation group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
驗證
maven項目執行下載依賴
cd maven_project_demo
mvn clean compile #執行maven compile
此時查看 repository_maven_gradle_test
倉庫目錄 已經有了依賴
gradle項目執行下載依賴
cd gradle_project_demo
gradle classes # gradle 編譯命令
再次查看 倉庫發現多了一個 caches
cd caches/modules-2/files-2.1 # 預設的gradle 的jar位置
可以發現 並沒有 org.projectlombok
用idea打開lombok 的jar 的依賴位置 發現 確實是 直接使用了 maven 中的jar 了, 這個可能是新版本的優化?
反過來 執行gradle
cd repository_maven_gradle_test
rm -rf * #先清空倉庫
cd gradle_project_demo
gradle classes # 先執行 gradle 項目的
總結
因為思考 Gradle 和 Maven 的本地倉庫配置為一樣,那Jar能不能共用的探究得出 如下總結:
- Gradle 預設本地倉庫在
~/.gradle/caches/modules-2/files-2.1/...
- 修改 Gradle 預設本地倉庫 只需要配置環境變數
GRADLE_USER_HOME
指向一個目錄即可,此時倉庫就是GRADLE_USER_HOME/caches/modules-2/files-2.1/...
如果把Gradle GRADLE_USER_HOME配置為 maven 本地倉庫的時候 新版本確實可以直接使用 maven 中的jar 了
- 最後
不建議把 Gradle 的倉庫配置的和 Maven 的一樣
最好分開 或者直接使用預設的 即可, 因為它們的jar管理方式都不一樣 - 網上的一些文章 說只是把maven倉庫中的jar 複製到 caches 中去, 可能是以前的 Gradle版本 , 我實驗的7.1 確實沒有複製到caches 中
多思考! 多實踐!
歡迎大家訪問 個人博客 Johnny小屋
歡迎關註個人公眾號