2015-04-23 137 views
8

在java中 - maven構建工具,您可以打印使用命令的任何package/project依賴關係樹,哈斯克爾包 - 依賴關係樹

mvn dependency:tree -Dverbose -Dincludes=commons-collections 

和輸出將是artifacts/dependencies像一個樹狀結構,

[INFO] [dependency:tree] 
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT 
[INFO] +- org.apache.maven.reporting:maven-reporting-impl:jar:2.0.4:compile 
[INFO] | \- commons-validator:commons-validator:jar:1.2.0:compile 
[INFO] |  \- commons-digester:commons-digester:jar:1.6:compile 
[INFO] |  \- (commons-collections:commons-collections:jar:2.1:compile - omitted for conflict with 2.0) 
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile 
[INFO] \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile 
[INFO]  \- commons-collections:commons-collections:jar:2.0:compile 

那麼,我怎樣才能做到這一點對於使用cabal haskell包?

+0

我不認爲現在有一種方法可以在cabal中做到這一點,但我認爲這裏有一些討論:https://github.com/haskell/cabal/issues/879。有一個hackage包,可以爲你做到這一點,雖然:http://hackage.haskell.org/package/cabal-db – Arbus

回答

14

包含所有已安裝包裝的圖形可以使用ghc-pkg(例如,

ghc-pkg dot | tred | dot -Tpdf >pkgs.pdf 

注意,graphviz包提供treddot程序。

+0

btw,爲什麼ghc-pkg給出另一個命令'tred'作爲參數? –

+0

來自'ghc-pkg'的數據通過'tred'過濾器移除以去除傳遞連接的節點之間的邊緣。 '|'是命令行解釋器的管道。 –

+1

這應該是標記的答案。這是迄今爲止最有用的。 –

2

對於已安裝的軟件包,您可以使用ghc-pkg找到相關性。對於命名text一個包,你要做的:

$ ghc-pkg field text depends 
depends: array-0.5.0.0-470385a50d2b78598af85cfe9d988e1b 
     base-4.7.0.2-bfd89587617e381ae01b8dd7b6c7f1c1 
     bytestring-0.10.4.0-d6f1d17d717e8652498cab8269a0acd5 
     deepseq-1.3.0.2-63a1ab91b7017a28bb5d04cb1b5d2d02 
     ghc-prim-0.3.1.0-a24f9c14c632d75b683d0f93283aea37 
     integer-gmp-0.5.1.0-26579559b3647acf4f01d5edd9491a46 

對於任何工作項目所有你需要做的就是看到陰謀文件depends字段來確定它的依賴。

+3

雖然這顯示了直接的依賴關係,maven功能顯示完整的依賴樹,這是一個重要的區別。這也是一件非常有用的事情,特別是考慮到Cabal傾向於存在與傳遞依賴有關的問題。 – rcreswick