Печать простого текстового дерева из древовидной структуры данных (Java)

Я большой поклонник

mvn dependency:tree

и хочу напечатать похожее дерево в виде простого текста в формате ascii в качестве вывода из моей Java-программы.

 com.totsp.gwt:maven-gwt-sample:war:1.0-SNAPSHOT
 +- com.google.gwt:gwt-servlet:jar:2.4.0:compile
 +- com.google.gwt:gwt-user:jar:2.4.0:provided
 |  +- javax.validation:validation-api:jar:1.0.0.GA:provided
 |  \- javax.validation:validation-api:jar:sources:1.0.0.GA:provided
 +- log4j:log4j:jar:1.2.14:compile
 \- junit:junit:jar:4.1:test

Я надеялся, что библиотека, которая достигает этого, будет легко использоваться, но я не могу найти это.

Ближайшая замена, которую я вижу, это: http://code.google.com/p/j-text-utils/ но она не так хороша, как у Maven.

Где я могу найти библиотеку, которая печатает древовидную структуру в виде текста, почти идентичного зависимости mvn:tree?

2 ответа

Решение

Я не эксперт по созданию / использованию MOJO, но как насчет загрузки и просмотра плагина maven-dependency-plugin?

Добавить его в свой проект в качестве зависимости (тривиально) (я полагаю, вы управляете им с помощью Maven), и на первый взгляд, вы должны просто напрямую вызвать TreeMojo.execute() или что-то в этом роде.

Примерно это делает что-то вроде этого:

ArtifactFilter artifactFilter = createResolvingArtifactFilter();
rootNode = dependencyTreeBuilder.buildDependencyTree( project,
        localRepository, artifactFactory, artifactMetadataSource,
        artifactFilter, artifactCollector );
String dependencyTreeString = serializeDependencyTree( rootNode );
DependencyUtil.log( dependencyTreeString, getLog() );

Это то, что вы искали?

На всякий случай, если кто-то придет сюда в поисках решения для чистой библиотеки Java - есть text-tree:

      <dependency>
  <groupId>org.barfuin.texttree</groupId>
  <artifactId>text-tree</artifactId>
  <version>2.0.0</version>
</dependency>

Вы просто делаете свои узлы дерева реализующими интерфейс Node, тогда вы можете

      Node tree = ...;   // your tree
TreeOptions options = new TreeOptions();
options.setStyle(new TreeStyle("+- ", "|  ", "\\- "));
String rendered = TextTree.newInstance(options).render(tree);
System.out.println(rendered);

который создает дерево из вашего примера. В этом коде используется собственный стиль дерева, соответствующий вашему примеру, но существуют предопределенные стили дерева .
Полное раскрытие: я автор текстового дерева. Это бесплатно и с открытым исходным кодом.

Другие вопросы по тегам