[
https://issues.apache.org/jira/browse/MDEP-435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923085#comment-17923085
]
ASF GitHub Bot commented on MDEP-435:
-------------------------------------
elharo commented on code in PR #24:
URL:
https://github.com/apache/maven-dependency-plugin/pull/24#discussion_r1938469416
##########
src/main/java/org/apache/maven/plugins/dependency/tree/XMLDependencyNodeVisitor.java:
##########
@@ -0,0 +1,187 @@
+package org.apache.maven.plugins.dependency.tree;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.dependency.graph.DependencyNode;
+import
org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import java.io.Writer;
+import java.util.List;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A dependency node visitor that serializes visited nodes to
+ * <a href="https://en.wikipedia.org/wiki/XML">XML format</a>
Review Comment:
period at end
##########
src/main/java/org/apache/maven/plugins/dependency/tree/XMLDependencyNodeVisitor.java:
##########
@@ -0,0 +1,187 @@
+package org.apache.maven.plugins.dependency.tree;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.shared.dependency.graph.DependencyNode;
+import
org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import java.io.Writer;
+import java.util.List;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A dependency node visitor that serializes visited nodes to
+ * <a href="https://en.wikipedia.org/wiki/XML">XML format</a>
+ *
+ * @author <a href="mailto:[email protected]">Bogdan Sikora</a>
+ * @since 3.1.2
+ */
+public class XMLDependencyNodeVisitor
+ extends AbstractSerializingVisitor
+ implements DependencyNodeVisitor
+{
+ /**
+ * Constructor.
+ *
+ * @param writer the writer to write to.
+ */
+ public XMLDependencyNodeVisitor( Writer writer )
+ {
+ super( writer );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean visit( DependencyNode node )
+ {
+ try
+ {
+ if ( node.getParent() == null || node.getParent() == node )
+ {
+ DocumentBuilderFactory dbFactory =
DocumentBuilderFactory.newInstance();
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+ Document doc = dBuilder.newDocument();
+ Element rootElement = getNode( doc, node, true );
+ doc.appendChild( rootElement );
+
+ List<DependencyNode> children = node.getChildren();
+ for ( DependencyNode child : children )
+ {
+ handleChild( doc, child, rootElement );
+ }
+
+ TransformerFactory transformerFactory =
TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
+ transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "2" );
+ DOMSource source = new DOMSource( doc );
+
+ StreamResult console = new StreamResult( writer );
+
+ transformer.transform( source, console );
+ }
+ }
+ catch ( ParserConfigurationException | TransformerException e )
+ {
+
LoggerFactory.getLogger(XMLDependencyNodeVisitor.class).error(e.getMessage());
+ }
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean endVisit( DependencyNode node )
+ {
+ return true;
+ }
+
+ /**
+ * Render child with its children recursively
+ *
+ * @param doc Docuemnt to use
+ * @param node child node to handle
+ * @param depth depth of the child
+ */
+ private void handleChild( Document doc, DependencyNode node, Element
parent )
+ {
+ Element element = getNode( doc, node, false );
+ Node dependencies = parent.getElementsByTagName( "dependencies"
).item( 0 );
+ dependencies.appendChild( element );
+
+ List<DependencyNode> children = node.getChildren();
+ for ( DependencyNode child : children )
+ {
+ handleChild( doc, child, element );
+ }
+ }
+
+ /**
+ * Get element from node
+ *
+ * @param doc Docuemnt to use
+ * @param node Node to get data from
+ */
+ private Element getNode( Document doc, DependencyNode node, boolean root )
+ {
+ Artifact artifact = node.getArtifact();
+ Element element = null;
+
+ if ( root )
+ {
+ element = doc.createElement( "project" );
Review Comment:
That feels pretty heavyweight, and it wouldn't be used. Add one if you like,
but I don't think it's a requirement. If you don add a schema, Relax NG is
preferable to XSD.
> improve mvn dependency:tree - add optional xml output of the results
> --------------------------------------------------------------------
>
> Key: MDEP-435
> URL: https://issues.apache.org/jira/browse/MDEP-435
> Project: Maven Dependency Plugin
> Issue Type: New Feature
> Components: tree
> Environment: all
> Reporter: Kow Unk
> Priority: Major
> Labels: close-pending
> Time Spent: 10m
> Remaining Estimate: 0h
>
> The output of mvn dependency:tree would be more useful to me if it was in a
> format that is machine readable. I would like to create some tooling to be
> able to easily determine what is causing a particular jar to be included.
> for example:
> >mymvntool -why org.springframework:org.springframework.beans:3.0.5
> org.springframework.beans-3.0.5 is being *dragged* in by:
> my.otherproject.core:1.1
> %end of search
> another use:
> >mymvntool -makeexclusionfor
> >org.springframework:org.springframework.beans:3.0.5
> <exclusions>
> <exclusion>
> <groupId>org.springframework</groupId>
> <artifactId>org.springframework.beans</artifactId>
> <exclusion>
> </exclusions>
> or even:
> >mymvntool -makeexclusionfor org.springframework:*:3.0.5
> this would pickup all the included jars in the project and build exclusions
> for them.
> It may have been dumb to pick spring as the exclusion resource, but this is
> just an example. having xml output would be valuable to me and probably
> others too.
> -K
--
This message was sent by Atlassian Jira
(v8.20.10#820010)