You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Ruwen Reddig (Jira)" <ji...@apache.org> on 2020/01/05 07:35:00 UTC

[jira] [Comment Edited] (ARCHETYPE-584) Resulting root pom.xml from archetype generation has bad indentation

    [ https://issues.apache.org/jira/browse/ARCHETYPE-584?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17008264#comment-17008264 ] 

Ruwen Reddig edited comment on ARCHETYPE-584 at 1/5/20 7:34 AM:
----------------------------------------------------------------

Stumpled over the same problem yesterday. Please have a look at my PR. I added some explanation in the github comment.

Here is a minimal, reproducible example of the problem + fix
{code:java}
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URI;

public class ReadWriteXmlTest {

    public static void main(String[] args) throws Exception {
        String dummyPom =
            "<project " +
                "xmlns=\"http://maven.apache.org/POM/4.0.0\" " +
                "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 " +
                "http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
                "  <modelVersion>4.0.0</modelVersion>\n" +
                "  <packaging>pom</packaging>\n" +
            "</project>";

        InputSource inputSource = new InputSource();
        inputSource.setCharacterStream( new StringReader(dummyPom) );

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

        // comment any of the following 3 lines to see the problem
        //dbf.setIgnoringElementContentWhitespace(true);
        dbf.setNamespaceAware(true);
        dbf.setSchema( getSchema() );

        Document document = dbf.newDocumentBuilder().parse( inputSource );

        Transformer tr = TransformerFactory.newInstance().newTransformer();
        tr.setOutputProperty( OutputKeys.INDENT, "yes" );

        // comment this line and output still looks okay?!!
        tr.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2" );

        StringWriter fileWriter = new StringWriter();
        tr.transform( new DOMSource( document ), new StreamResult( fileWriter ) );

        System.out.println(fileWriter.toString());
    }

    private static Schema getSchema() throws SAXException, MalformedURLException {
        URI uri = URI.create("https://maven.apache.org/xsd/maven-4.0.0.xsd");
        return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
            .newSchema(uri.toURL());
    }

}
{code}


was (Author: newur):
Stumpled over the same problem yesterday. Please have a look at my PR. I added some explanation in the github comment.

Here is a minimal, reproducible example of the problem + fix
{code:java}
public static void main(String[] args) throws Exception {
    String dummyPom =
        "<project " +
            "xmlns=\"http://maven.apache.org/POM/4.0.0\" " +
            "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
            "xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 " +
            "http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
            "  <modelVersion>4.0.0</modelVersion>\n" +
            "  <packaging>pom</packaging>\n" +
        "</project>";

    InputSource inputSource = new InputSource();
    inputSource.setCharacterStream( new StringReader(dummyPom) );

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    // uncomment the following lines to see the fix(?)
    //dbf.setIgnoringElementContentWhitespace(true);
    dbf.setNamespaceAware(true);
    dbf.setSchema( getSchema() );

    Document document = dbf.newDocumentBuilder().parse( inputSource );

    Transformer tr = TransformerFactory.newInstance().newTransformer();
    tr.setOutputProperty( OutputKeys.INDENT, "yes" );

    // comment this line and output still looks okay?!!
    tr.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2" );

    StringWriter fileWriter = new StringWriter();
    tr.transform( new DOMSource( document ), new StreamResult( fileWriter ) );

    System.out.println(fileWriter.toString());
}

private static Schema getSchema() throws SAXException, MalformedURLException {
    URI uri = URI.create("https://maven.apache.org/xsd/maven-4.0.0.xsd");
    return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
        .newSchema(uri.toURL());
}

{code}

> Resulting root pom.xml from archetype generation has bad indentation
> --------------------------------------------------------------------
>
>                 Key: ARCHETYPE-584
>                 URL: https://issues.apache.org/jira/browse/ARCHETYPE-584
>             Project: Maven Archetype
>          Issue Type: Bug
>          Components: Archetypes
>    Affects Versions: 3.1.1, 3.1.2
>            Reporter: Andre Prata
>            Priority: Major
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> This issue does not apply to version 3.1.0, it was introduced in version 3.1.0.
>  
> In our project, we have the default configuration of the root pom.xml that contains lines such as this:
> {code:java}
> <properties>
>     <java.version>11</java.version>
>     <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
> </properties>
> {code}
> These lines are still in good shape when added to the jar artifact. However, upon generating the project from the archetype, we get the following (note also the whitespace on the blank lines hinting at some indentation attempts, not just the unexpected line breaks)
> {code:java}
> <properties>
>               
>   
>   <java.version>11</java.version>
>               
>   
>   <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
>           
> </properties>
>       
> {code}
> This issue does *not* occur in in child module pom.xml files.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)