You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2021/06/01 20:43:23 UTC

[maven-dependency-plugin] branch MDEP-435 updated (8f114f0 -> 7237372)

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a change to branch MDEP-435
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git.


 discard 8f114f0  [MDEP-435] Javadoc updated with unordered list
 discard 4d1db58  [MDEP-435] Logger added to parse error
 discard 91f88b6  [MDEP-435] - root node updated
 discard 1894be6  [MDEP-435] - Fixed code style issues
 discard 61afd75  [MDEP-435] - Update of XML dependency tree
 discard 34c1577  [MDEP-435] - Added xml option to outputType
 discard fd34ec1  [MDEP-435] - Added XML dependency node visitor
     add 9aa0fc0  [MDEP-714] Add analyze parameter "ignoreUnusedRuntime"
     add 36f8967  remove and .gitignore for dependency-reduced-pom.xml
     add a0cba78  rename doxiaSiteVersion property to doxiaSitetoolsVersion
     add 807f24d  [MDEP-749] document why excludeScope=test fails and what to do instead
     add 26abf6c  next version will be 3.2.0
     add 727c669  [MDEP-749] improve include/exclude scope documentation
     add 4211614  [MDEP-749] scope "threshold" term to summarise classpath in/ex-clusion
     add 9e28e06  Bump maven-shared-utils from 3.3.3 to 3.3.4
     add 0190eee  Merge pull request #132 from apache/dependabot/maven/org.apache.maven.shared-maven-shared-utils-3.3.4
     add 205c1a7  Disable merge commit button
     add b0942a6  [MDEP-739] Dependency Plugin go-offline doesn't respect artifact classifier
     add 0c7a2a8  (doc) Dependabot disable Java 8 deps
     new 7237372  [MDEP-435] Added xml option to outputType

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (8f114f0)
            \
             N -- N -- N   refs/heads/MDEP-435 (7237372)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .asf.yaml                                          |   4 +
 .github/dependabot.yml                             |   7 +-
 .gitignore                                         |   1 +
 dependency-reduced-pom.xml                         | 426 ---------------------
 pom.xml                                            |   8 +-
 .../invoker.properties                             |   0
 .../pom.xml                                        |   7 +-
 .../src/main/java/Main.java                        |   0
 .../invoker.properties                             |   0
 .../pom.xml                                        |  13 +-
 .../verify.groovy                                  |  52 +--
 .../dependency/analyze/AbstractAnalyzeMojo.java    |  23 ++
 .../AbstractDependencyFilterMojo.java              |  34 +-
 .../dependency/resolvers/GoOfflineMojo.java        |   2 +
 14 files changed, 101 insertions(+), 476 deletions(-)
 delete mode 100644 dependency-reduced-pom.xml
 copy src/it/projects/{analyze => mdep-714-analyze-ignore-unused-runtime}/invoker.properties (100%)
 copy src/it/projects/{analyze-ignore-unused-declared-dependency => mdep-714-analyze-ignore-unused-runtime}/pom.xml (87%)
 copy src/it/projects/{analyze-ignore-unused-declared-dependency => mdep-714-analyze-ignore-unused-runtime}/src/main/java/Main.java (100%)
 copy src/it/projects/{go-offline => mdep-739-go-offline-respect-classifiers}/invoker.properties (100%)
 copy src/it/projects/{mdep-571-resolve-java9 => mdep-739-go-offline-respect-classifiers}/pom.xml (73%)
 copy src/it/projects/{mdep-450-project-with-ancestor => mdep-739-go-offline-respect-classifiers}/verify.groovy (88%)

[maven-dependency-plugin] 01/01: [MDEP-435] Added xml option to outputType

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MDEP-435
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git

commit 7237372416d6402711833c6dfe411a87b9208834
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Tue Jun 1 22:42:54 2021 +0200

    [MDEP-435] Added xml option to outputType
---
 .../maven/plugins/dependency/tree/TreeMojo.java    |  14 +-
 .../dependency/tree/XMLDependencyNodeVisitor.java  | 187 +++++++++++++++++++++
 2 files changed, 199 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/TreeMojo.java b/src/main/java/org/apache/maven/plugins/dependency/tree/TreeMojo.java
index e2073c1..515d118 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/tree/TreeMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/tree/TreeMojo.java
@@ -137,8 +137,14 @@ public class TreeMojo
 
     /**
      * If specified, this parameter will cause the dependency tree to be written using the specified format. Currently
-     * supported format are: <code>text</code> (default), <code>dot</code>, <code>graphml</code> and <code>tgf</code>.
-     * These additional formats can be plotted to image files.
+     * supported format are:
+     * <ul>
+     *   <li>text (default)</li>
+     *   <li>dot</li>
+     *   <li>graphml</li>
+     *   <li>tgf</li>
+     *   <li>xml</li>
+     * </ul>
      *
      * @since 2.2
      */
@@ -502,6 +508,10 @@ public class TreeMojo
         {
             return new DOTDependencyNodeVisitor( writer );
         }
+        else if ( "xml".equals( outputType ) )
+        {
+            return new XMLDependencyNodeVisitor( writer );
+        }
         else
         {
             return new SerializingDependencyNodeVisitor( writer, toGraphTokens( tokens ) );
diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/XMLDependencyNodeVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/XMLDependencyNodeVisitor.java
new file mode 100644
index 0000000..8bb1884
--- /dev/null
+++ b/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:sikora.bogdan@webscope.io">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" );
+        }
+        else
+        {
+            element = doc.createElement( "dependency" );
+        }
+
+        Element groupId = doc.createElement( "groupId" );
+        groupId.setTextContent( artifact.getGroupId() );
+        element.appendChild( groupId );
+
+        Element artifactId = doc.createElement( "artifactId" );
+        artifactId.setTextContent( artifact.getArtifactId() );
+        element.appendChild( artifactId );
+
+        Element version = doc.createElement( "version" );
+        version.setTextContent( artifact.getVersion() );
+        element.appendChild( version );
+
+        if ( !root )
+        {
+            Element scope = doc.createElement( "scope" );
+            scope.setTextContent( artifact.getScope() );
+            element.appendChild( scope );
+
+            Element type = doc.createElement( "type" );
+            type.setTextContent( artifact.getType() );
+            element.appendChild( type );
+        }
+        else
+        {
+            Element packaging = doc.createElement( "packaging" );
+            packaging.setTextContent( artifact.getType() );
+            element.appendChild( packaging );
+        }
+
+        Element dependencies = doc.createElement( "dependencies" );
+        element.appendChild( dependencies );
+
+        return element;
+    }
+}