2015-04-23 1 views
8

В Java - maven инструмент для сборки, вы можете распечатать дерево зависимостей для любого package/project с помощью команды,Haskell пакеты - дерево зависимостей

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 

Итак, как я могу сделать это для пакета haskell, используя cabal?

+0

Я не думаю, что существует существующий способ сделать это в кабале, хотя я думаю, что здесь было несколько обсуждений: https: //github.com/haskell/cabal/issues/879. Существует пакет для взлома, который может сделать это для вас: http://hackage.haskell.org/package/cabal-db – Arbus

ответ

14

График, содержащий все установленные пакеты, может быть получен с использованием ghc-pkg, например.

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

Обратите внимание, что graphviz пакет предоставляет tred и программу dot.

+0

Кстати, почему 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 показывает полное дерево зависимостей, которое является важным различие. Также очень полезно посмотреть, особенно учитывая тенденцию Кабала к проблемам, связанным с транзитивными зависимостями. – rcreswick