2015-04-23 70 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