2016-05-18 41 views
1

使用maven我們可以排除一些傳遞性依賴項。禁止導入一些傳遞的maven依賴項

但是如果我們在運行時需要它們,並且仍然作爲架構師,我不希望它們被使用併成爲API依賴項。

是否有工具來定義和檢查不需要的使用依賴項(即在某些Java類中導入)?

一個搜索這裏給我暗示對Maven In maven, can you disallow usage of transitive dependency in your code but still keep it in the classpath?

但是,這可能是費力的定義。也許應該使用IDE工具?

如何禁止導入和使用一些傳遞的maven依賴? 因此,代碼將不會訪問我們堆棧的不同層。
是的,我明白一些教育工作也應該如此。

+0

https://github.com/nebula-plugins/gradle-lint-plugin既不maven也不禁止依賴關係,但它掃描代碼中的實際依賴關係,找出哪些依賴關係[未使用](https://github.com/nebula-plugins/gradle-lint-plugin/wiki/Unused-Dependency-Rule)。也許你可以適應那部分。 – zapl

+0

很高興知道,但需要類似的maven。 –

+0

我會建議深入研究http://jqassistant.org/,它可以定義這樣的規則等。 – khmarbaise

回答

0

在處理maven時,存在依賴範圍的概念。通常對於Java EE應用程序,您將看到3個示波器利用率最高:

編譯 - 如果沒有指定,則使用默認範圍。這些將在所有項目的類路徑中可用。

提供 - 此範圍用於編譯時不需要依賴項,但預期在運行時位於容器中時。

測試 - 這是需要測試的依賴,但不是必需的應用程序

的正常使用基於關閉您的使用情況下,我相信你正在尋找利用所提供的範圍的依賴性,其中運行時需要依賴項,但在編譯期間不應該可用於應用程序。你可以閱讀更多關於依賴關係範圍:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

+0

這不會阻止任何人從不應該使用的實現模塊中使用類。在這種情況下,應該使用來自API模塊的類代替..... – khmarbaise

+0

該情況的一種解決方案是將規範/ API與實現分開打包。只有在運行時才能實現該實現。有幾個框架可以讓你做到這一點。如OSGI。 –