1. 程式人生 > >gradle能否將下載的jar儲存到maven本地倉庫而不是快取目錄

gradle能否將下載的jar儲存到maven本地倉庫而不是快取目錄

gradle構建工具是當下最流行的java專案構建工具,不僅僅是在android開發中用得很普遍,而且在javaee開發中也越來越普及。甚至其熱度超過了maven構建工具。

gradle可以通過指定倉庫地址為本地maven倉庫地址和遠端倉庫地址相結合的方式,避免每次都會去遠端倉庫下載依賴庫。這種方式也有一定的問題,如果本地maven倉庫有這個依賴,就會從直接載入本地依賴,如果本地倉庫沒有該依賴,那麼還是會從遠端下載。但是下載的jar不是儲存在本地maven倉庫中,而是放在自己的快取目錄中。一般預設為~/.gradle/caches/modules-2/files-2.1,如下所示:

這個問題就很讓人糾結了,如果使用gradle構建專案,那麼依賴庫會來源於兩個地方,一個是maven repository,另一個就是caches。這個問題

在國外有人討論過

  • sirinath :How to download and cache artifacts into local Maven Repository from Gradle
  • sirinath:I want the dependencies to be stored in the local Mavan Repo than the Gradle local repo
  • Peter_Niederwieser:Gradle will always store downloaded artifacts in its own cache. You can additionally use artifacts stored in the local Maven repository by declaring a ‘mavenLocal()’ repository. You can install into the local Maven repository by applying the ‘maven’ plugin and running the ‘install’ task.
  • carlo_lf:indeed, this is something I am missing. Are there any plans to support the download to the local maven repository?
  • luke_daley:It’s very necessary to have our own repository for a few reasons. Moreover, to say that Gradle uses Maven’s dependency management functionality is incorrect.

大致意思是:sirinath提出一個問題說,gradle能不能將下載的jar包放入maven repository目錄中,而不是儲存在caches下。

carlo_If表示,是否有開發計劃將gradle下載的地址指向maven倉庫。

而Peter_Niederwieser和luke_daley均一致表示gradle有必要有自己的倉庫地址,而且下載的檔案會放在caches下面。

有可能你會說,既然gradle caches有一個地址,maven倉庫有一個地址,那麼可不可以將gradle caches指向maven repository。我們說這是不行的,caches下載檔案不是按照maven倉庫中存放的方式,這裡以com.google.guava:guava:23.0為例:

1、group不是以com/gooble/guava資料夾的形式存在,而是以com.google.guava資料夾的形式存在。

2、jar父級目錄是一個隨機的字串,不是guava/23.0目錄。

這樣問題就不是簡簡單單的改變caches目錄的問題了。

強迫症患者有的提出了一個想法就是將caches中的依賴庫,拷貝到maven repository中,這樣就涉及到需要改變目錄結構。這裡給出一個gradle的task。具體內容如下:

task cacheToLocalMavenRepository(type: Copy) {
  from new File(gradle.gradleUserHomeDir, 'caches/modules-2/files-2.1')
  into repositories.mavenLocal().url
  eachFile {
    List<String> parts = it.path.split('/')
    it.path = (parts[0]+ '/' + parts[1]).replace('.','/') + '/' + parts[2] + '/' + parts[4]
  }
  includeEmptyDirs false
}

執行之後的結果:

執行完成之後,在專案中右鍵build.gradle->Gradle->Refresh Gradle Project,再次檢視jar來源,全部變為了maven repository。

這種辦法不是徹底的解決了caches與maven repository兩者合為一個目錄的問題。只是解決了專案中依賴庫來源於同一個地方。如果在build.gradle中新增一個新的dependency,而這個dependency的版本或者name在maven repository中沒有的話,使用gradle構建,他仍然會下載遠端倉庫中的jar包到自己的caches中。

Gradle already checks the local Maven repository for artifacts. If it finds an artifact with matching coordinates and checksum, it will not download it again. (For best results, make sure to use a recent Gradle version.)

這句話是從gradle論壇上找到的,gradle會先檢查本地maven倉庫,如果發現了對應的依賴庫,不會再次下載。從語境中可以分析,如果不存在,那麼gradle還是會去下載,並且存放到自己的caches目錄中。

相關推薦

gradle能否下載jar儲存maven本地倉庫快取目錄

gradle構建工具是當下最流行的java專案構建工具,不僅僅是在android開發中用得很普遍,而且在javaee開發中也越來越普及。甚至其熱度超過了maven構建工具。 gradle可以通過指定倉庫地址為本地maven倉庫地址和遠端倉庫地址相結合的方式,避免每次都會去遠

zbb20181007 maven 任意jar安裝到本地倉庫

avi lang mod pac install views version dpa 倉庫 maven 將任意jar安裝到本地倉庫中 假如你要把gavin-2.0.1.jar打包到本地倉庫 1.執行以下命令: mvn install:install-fi

maven 任意jar安裝到本地倉庫

最近專案中用springboot打包成jar執行時報錯,發現是專案中用到了一個本地jar包,而本地jar沒有打入springboot專案中,解決辦法如下: 假如你要把gavin-2.0.1.jar打包到本地倉庫 1.執行以下命令: mvn install:install

使用gradle上傳jarmaven本地倉庫

1.新增外掛 apply plugin: 'idea' apply plugin: 'java' apply plugin: 'maven' 2.新增上傳task install {

下載jar包手動安裝到Maven本地倉庫

很多情況下我們用maven直接從中央倉庫下載jar包時,會發現速度很慢,那麼我們可以從網上下載相應的jar包,然後將jar包手動安裝到本地倉庫。 以 spring-context-support-3.1.0.RELEASE.jar 為例,在下面已經給出這個 jar 包的 g

maven 從pom.xml 下載jar包到本地

時至今日,maven已經是每個開發人員必備的工具了。而有些情況我們需要把jar下載到本地使用。 下面就說一下怎麼通過pom下載jar包到本地。 直接上乾貨。 第一步:建立一個pom.xml檔案 <?xml version="1.0" encoding="UTF-8"?> &l

自定義jar新增到maven本地倉庫的方法

需要執行的命令格式如下: mvn install:install-file -Dfile=<本地Jar包的地址> -DgroupId=<Jar包的GroupId> -Dartifact

Jar包打入 maven 本地倉庫

    mvn install:install-file -Dfile=D:\jar\dueros\9-6\bot-sdk-1.1.3.jar -DgroupId=com.baidu.dueros -DartifactId=bot-sdk -Dversion=1.1.3 -Dpacka

ojdbc6.jar新增到本地maven倉庫

本部落格文轉自:https://blog.csdn.net/freejackin/article/details/73734107 將ojdbc6.jar新增到maven倉庫 將odjbc6.jar包下載本地機器上 https://mvnrepository.com/artifact

Maven 上傳jar包到私服、jar包匯入本地倉庫

1.上傳到私服:  mvn deploy:deploy-file -DgroupId=org.drools -DartifactId=drools-compiler -Dversion=3.0.1 -Dpackaging=jar -Dfile=C:\lib\dro

eclipse maven 打包的時候總是會自己去下載jar包,這些jar包在本地倉庫裡面有

問題描述:eclipse maven 打包的時候總是會自己去下載jar包,其實這些jar包在本地倉庫裡面有,不用下載,每次都重新下載感覺太耗費時加; 解決辦法: 在elipse中開啟maven的配置檔案: 檢查原來是自己把本地的倉庫個註釋掉了,引起的,重新開啟配置: <

maven專案匯入IntelliJ IDEA後,是怎麼下載jar包到本地的?即InteliJ Idea怎麼匯入maven工程?

1連結:http://jingyan.baidu.com/article/77b8dc7ffea57a6175eab67f.html 選中專案,右鍵-run as 選中相應的操作,maven即會將專案

maven(1) : jar包匯入本地倉庫

將jar包放在maven/bin下,並在此目錄下開啟命令視窗,輸入一下命令注: shift + 右鍵 出來的選項中有 "在此處開啟命令視窗"mvn install:install-file -Dfile=①.jar -DgroupId=② -DartifactId=③ -Dv

解決Maven本地倉庫沒有Jar包問題,請求中央倉庫自動下載

一、首先修改maven的配置檔案settings.xml中的映象 配置國內的阿里雲映象,下載速度超級快,也不用擔心斷網的時候,jar只會下載一半。 二、當使用maven建立專案時,本地倉庫的沒有的jar包,如何讓中央倉庫自動下載: 步驟: 1.開啟maven資源的

MavenJar安裝到本地倉庫Jar上傳到私服

單個jar上上傳 方法一:利用介面 使用Sonatype Nexus搭建Maven私服後新增第三方JAR包 登入Nexus後,點選右側的“Repositories”,顯示當前Nexus所管理的Repository, 預設情況下Nexus為我們建立

maven多模組以及jar安裝到本地倉庫

1.將jar檔案安裝到本地maven倉庫 mvn install:install-file -Dfile='本地檔案路徑' -DgroupId='groupId' -DartifactId='artifactId' -Dversion=1.0.0 -Dpa

Meven-如何把自己下載jar包加入到Maven本地倉庫

1.在沒有私服等遠端倉庫或者私服沒有要用到的包的情況下是一件麻煩事;為此我們可以把下下來的包匯入到Meven本地倉庫 2.開始我們的匯入工作(我這裡叫匯入,無非就是把jar包加到本地倉庫去) 1.首

maven如何手動jar包放到本地倉庫

1、使用cmd進入maven安裝目錄下的bin2、執行mvn install:install-file -Dfile=jar包的路徑 -DgroupId=gruopId中的內容 -DartifactId=actifactId的內容 -Dversion=version的內容 -Dpackaging=jar3、如

maven 新增自己下載jar包到本地倉庫

1.在pom檔案中新增依賴,其中groupId等變數都自擬。 例如:             2.在命令列執行以下命令,提示build success即表示安裝成功。 mvn install:install-file -DgroupId=com.taobao -D

如何 jar 包導入Maven 本地倉庫

rac 例如 下載到本地 sta jdb 導入 pack dep maven 案例:oracle jar包由於在maven 遠程倉庫中找不到,需要先將oracle jar 文件下載到本地,然後導入maven本地倉庫,就可以通過 pom 進行依賴 例如:下載後的 jar 地