亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LanguageTool Java API 是否有“無用”的依賴項?

LanguageTool Java API 是否有“無用”的依賴項?

至尊寶的傳說 2023-10-13 16:49:24
我想使用LanguageTool 的 Java API進行拼寫檢查,因此我將其依賴項添加到我的pom.xml:<dependency>   <groupId>org.languagetool</groupId>   <artifactId>language-en</artifactId>   <version>4.7</version>   </dependency>由于某種原因,它下載了 40MB 的jar依賴項,這看起來很可疑。這是所有這些的屏幕截圖:但如果我們訪問Maven 中央存儲庫,它.jar只有4.7MB。之后我注意到scala-compiler.jar大約有20MB,我試圖排除它:<exclusion>    <groupId>org.scala-lang</groupId>    <artifactId>scala-compiler</artifactId></exclusion>然后我運行了我的main,一切都運行良好:public static void main(String[] args) throws IOException {    JLanguageTool lang = new JLanguageTool(new AmericanEnglish());    List<RuleMatch> matches = lang.check("This is a speling errorr.");    for (RuleMatch match : matches)    {        System.out.println(match.getSuggestedReplacements());    }}所以我花了一些時間開始排除越來越多的依賴項,在其中一些依賴項中我得到了ClassNotFoundException,這很好,因為如果language-tool使用其中一些依賴項是有意義的。但是那些沒用過的呢?是否有機會使用,但我的代碼不使用其中的任何類,所以我避免得到一個ClassNotFoundException?我的問題是為什么它會下載未使用的依賴項。有沒有辦法找出其中哪些是無用的,以便我可以排除它們?
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

讓我嘗試更籠統地回答這個問題:

Maven 通過傳遞性地遍歷依賴關系樹來構建所有依賴關系的列表,收集每個依賴關系,然后進行依賴關系中介(如果您發現一個工件的多個版本)。

這是收集依賴關系的一種粗略方法,它或多或少保證您擁有所需的一切——但通常您擁有的更多。

這是為什么?

首先,在運行時,您通常只調用已定義類的子集,因此很容易發生應用程序的某些部分(如某些依賴項)從未被觸及的情況。在許多情況下,甚至可以靜態地證明某個依賴項永遠不能通過正常的鏈調用,因為例如您只使用A依賴項的一個類a.jar,并且僅在與無關的事情上a.jar依賴但需要它。b.jarA

但是:在運行時可能有多種方式需要 jar,但很難檢測到。這包括不同類型的依賴項注入,尤其是在應用程序服務器上。


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號