2012-11-28 33 views
4

我正在使用MySQL連接器JAR來建立JDBC連接。我的理解是,我只在類路徑中有這個JAR,當我在連接字符串中指定mysql:時,它將被動態加載。Maven依賴項:分析認爲我的JDBC JAR是「未使用」

我在我的POM中使用<scope>runtime</scope>聲明瞭這種依賴關係。當我運行mvn dependency:analyze時,它會將此工件報告爲「未使用」。我想它不能確定我需要通過簡單的靜態分析,很好,但肯定這將是幾乎任何runtime - 放大的神器,對不對?我怎麼能說服Maven這個神器真的需要在那裏?

回答

3

dependency:tree將列出你的pom文件引用的所有工件,如果這是你正在尋找的東西。否則,你很可能不走運。 Maven公開聲明他們的依賴關係分析器工作在字節碼級別,並且會錯誤地報告依賴關係在某些情況下未被使用。

運行時範圍的依賴關係可能會也可能不會被使用,但是不可能用字節碼分析來判斷(事實上,大多數分析我都無法想象)。 Maven必須決定假設他們已經被使用或者認爲他們沒有被使用,並且他們會用後者來判斷用戶是否能夠找出答案。

沒有選擇告訴Maven將運行時範圍的依賴關係視爲已使用,但您可以手動向配置中的usedDependencies陣列添加特定的構件。 Maven會簡單地假定使用這些依賴關係。您也可以編寫自己的依賴關係分析器或查找可處理此情況的第三方依賴關係分析器。

==更新評論==

你說得對,它是相當新的。 issue在2012年11月25日發佈的2.6版本中得到修復。它尚未出現在許多公共鏡像存儲庫中。你可以找到它here

由於它很新,所以沒有使用它的例子,但Maven遵循一些約定。我希望,因爲它被聲明:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <usedDependencies> 
      <usedDependency>org.foo.bar:baz-tron</usedDependency> 
      <usedDependency>org.foo:whatsit</usedDependency> 
      </usedDependencies> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
+0

看起來也許'usedDependencies'頗有新意 - 我無法找到關於它的多文檔,我看到補丁說明從大約一個月前說起最初加入它到分析插件。你知道一個找到用法的好地方嗎?你知道分析插件支持它的最低版本是什麼嗎?這基本上正是我想到的。 – Coderer

+0

它花了一些擺弄,但我得到它的工作。我正在編輯你的答案,實際上對我有用。謝謝! – Coderer