1. 程式人生 > >【Maven】——優化依賴

【Maven】——優化依賴

    上篇說到傳遞依賴,其優點我們有目共睹,其為我們提高了很多效率,減少了很多工作量。但現實是把雙刃劍,完美中總會有所不足。Maven的傳遞依賴給我們帶來的點點不足便是:我們本需要依賴的一些jar包,可能通過傳遞依賴的形式依賴了,程式固然不會報錯。但從長遠看,我們交接專案後,新人會對我們的依賴不清不楚。

    所以Maven提倡將必要的依賴顯式宣告,讓開發者對Maven專案的依賴瞭然於胸,並可對其進行優化。如:去除多餘的依賴,顯式宣告必要的依賴。

    本篇,主要帶大家瞭解兩個mvn命令,這兩個命令都可以幫我們分析專案實際依賴情況,以ITOO專案為例:

mvn dependency:tree


通過該命令,我們可以得到專案的依賴樹:


    這棵樹,體現的是:直接在當前專案POM宣告的依賴為頂層依賴,如itoo-basic-api。而這些頂層依賴的依賴則定義為二層依賴,如:itoo-base,以此類推......

    本模組本該依賴itoo-base,但POM中我並沒有依賴itoo-base,編譯執行卻沒有報錯,這就是因為我依賴了itoo-basic-api,而itoo-basic-api依賴了itoo-base。所以我的模組傳遞依賴了itoo-base。

POM檔案:


對於我們需要宣告但已經傳遞依賴過來,或者我們不需要卻宣告的依賴。有一個更方便的命令幫我們進行分析:

mvn dependency:analyze



    其中:Used undeclared dependencies found(用到卻沒有顯示宣告),提示我們專案用到了itoo-base,卻沒有顯式宣告,則此時我們最好將其顯式宣告,使POM清晰明瞭,並且可控。

    Unused declared dependencies found(沒有用到卻聲明瞭),提示我們這些jar包沒有用到,但我們聲明瞭。這樣的需要注意,我們不能簡單地直接刪掉其宣告,而應該仔細分析。由於dependency:analyze只會分析編譯主程式碼和測試程式碼需要用到的依賴,一些執行測試和執行時需要的依賴它無法發現。很顯然,itoo-easyui是我們UI必須要用到的,因此不應該刪除依賴宣告。所以,此命令可以幫助我們分析找到一些無用的依賴,但也需要我們去分析。

   總結,Maven優化依賴不可小覷,我們專案就由於前期對此不重視,導致專案jar包冗餘,伺服器記憶體經常不足或宕機,經優化後,本模組從34M,瘦身至6M,效果顯著。

相關推薦

Maven——優化依賴

    上篇說到傳遞依賴,其優點我們有目共睹,其為我們提高了很多效率,減少了很多工作量。但現實是把雙刃劍,完美中總會有所不足。Maven的傳遞依賴給我們帶來的點點不足便是:我們本需要依賴的一些jar包

maven排除maven中jar包依賴的解決過程 例子:spring cloud啟動zipkin,報錯maven依賴jar包衝突 Class path contains multiple SLF4J bindings.

一直對於maven中解決jar包依賴問題的解決方法糾結不清: 下面這個例子可以說明一個很簡單的解決方法:     專案啟動報錯: Connected to the target VM, address: '127.0.0.1:59412', transport: 'sock

Maven---座標與依賴

Maven座標與依賴       最近想深度學習下maven,找到一本書叫《Maven實戰》,這本書講的確實很好,唯一遺憾的是當時maven教學版本是3.0.0的,而目前已經到了3.5.4了,版本存在差距, 沒關係,如果有時間和精力我也會閱讀官方文件,看看到底有哪些變換。 一、座標詳解      1、

MavenMaven的SNAPSHORT版本與依賴更新

1、問題描述 今天在用Intellij Idea寫程式碼的時候,遇到一個問題,大概形容一下: 分別有兩個Java工程,TestA、TestB均使用maven構建,TestB依賴TestA,即在TestB的pom檔案中,寫出了對TestA的依賴,如下:

mavenmaven檢視專案依賴並解決依賴衝突的問題

一、問題 專案開發過程中,經常會遇到jar衝突,然後maven根據自己的規則進行衝突解決,導致專案在執行的過程中報錯。 1、如何檢視當前專案的maven的依賴樹? 2、如何從依賴樹中找到自己預期的版本,是被那個jar給覆蓋了? 3、如何進行依賴衝突解決?   二、解決問題 1、如何檢視

Maven依賴排除 禁止依賴傳遞 取消依賴的方法

大家都知道Maven的優點是依賴管理,特別是前期使用ANT的開發者都有很多感觸。最近要開發一個java工程,要使用maven,會使用hadoop和hbase的客戶端,而引入一個hadoop-client的jar或者hbase的jar包,會依賴十幾個其他的jar包

Maven install:install-file

tsp logs file com license nbsp art dpa cti install jar to local fs mvn install:install-file -Dfile=/home/hotspot/autoBuild/project/licen

Maven1.使用myecplise配置自己的Maven配置,不使用默認的maven

ces images 技術 指定 我們 apach 這也 有用 epo 【好文章】參考地址: http://www.cnblogs.com/luotaoyeah/p/3764533.html ---------------------------------------

mavenmaven的web項目打包報錯:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK

應用 cga snapshot ace owin span ons sed sse 打包過程中報錯如下: No compiler is provided in this environment. Perhaps you are running on a JRE rather

Maven常用的命令

toc sys down 開發 變量 ide XML ear jet maven常用命令介紹 mvn 3.0.4 創建maven項目命令 mvn archetype:generate -DgroupId=damocles-autocredit -Dartifac

WPF關於依賴屬性的ValidateValueCallback,PropertyChangedCallback和CoerceValueCallback的執行順序

value read ado args cep img 強制轉換 .cn clas 三個回調對應依賴屬性的驗證過程,改變過程和強制轉換過程。 class Dobj : DependencyObject { //依賴屬性包裝 public int MyPro

Hive優化策略

nap set 進行 類型 命令 part ado http 計劃 Hive對於表的操作大部分都是轉換為MR作業的形式,為了提高OLAP[online analysis process 在線分析處理]的效率,Hive自身給出了很多的優化策略 1. explain[解釋執行計

MAVENmaven系列--pom.xml標簽詳解

als lex script 是否 mod resource ica 資源 bugzilla pom文件作為MAVEN中重要的配置文件,對於它的配置是相當重要。文件中包含了開發者需遵循的規則、缺陷管理系統、組織、licenses、項目信息、項目依賴性等。下面將重點介紹一下該

Maven3.使用IntelliJ IDEA 使用本地搭建的maven私服,而不是使用默認的maven設置

apply dea rri ref http 而不是 tell .com .html 安裝Idea的教程:http://www.cnblogs.com/sxdcgaq8080/p/7641379.html 搭建maven私服的教程:http://www.cnblogs.co

MavenSelect Dependency 無法檢索

分享 sso 依次 解決辦法 nbsp oba str repos pom.xml 問題: 在 “pom.xml” 中,點擊 “Dependencies” -> “Add” 添加依賴時,無法檢索。 如下圖所示: 解決辦法: 依次點擊 “Window

Maven基礎概念、倉庫、構建與部屬

第三方jar包 測試 壓縮 重新 不用 最新 重新編譯 單元測試 流操作 1、常見的自動化構建工具有: make、ant、maven、gradle,gradle是目前最新的,maven是目前最常用的。  Eclipse是一種半自動化構建工具,主要體現在把:java文件-&g

Maven---Nexus私服配置Setting和Pom

maven---nexus私服配置setting和pom 上一遍部落格已經在linux伺服器上,搭建好nexus私服了,部落格地址:Linux搭建Nexus3.X私服 現在就需要配置setting.xml和pom.xml來使nexus作為maven的私服。setting.xml檔案在conf

Maven---Linux搭建Nexus3.X私服

Linux搭建Nexus3.X私服 備註:linux版本: ubuntu 同時已經部署好JDK8環境 一、linux安裝nexus    1、建立資料夾並進入該目錄 cd /usr/local && mkdir nexus && c

TestNGTestNG依賴測試詳解

一、TestNG安裝與基本使用 參考部落格https://blog.csdn.net/df0128/article/details/83243822; 二、TestNG依賴的使用 TestNG支援用例或者組之間的依賴。 雖然我們有多種@Before可以使用,看起來和依賴效果一樣,

純淨版quartz定時任務maven-xjh測試---https://www.cnblogs.com/lulf/p/7089364.html

純淨版quartz定時任務【maven】 Quartz是一個完全由Java編寫的開源作業排程框架,為在Java應用程式中進行作業排程提供了簡單卻強大的機制。Quartz允許開發人員根據時間間隔來排程作業。它實現了作業和觸發器的多對多的關係,還能把多個作業與不同的觸發器關聯。 簡單的介紹一下下