This is an automated email from the ASF dual-hosted git repository. rfscholte pushed a commit to branch MNG-6656 in repository https://gitbox.apache.org/repos/asf/maven.git
commit 79c4813558486fcedcdd902f8f3188591c747a21 Author: rfscholte <[email protected]> AuthorDate: Sat Jun 1 19:08:21 2019 +0200 [MNG-6656] separate module for maven-xml, maven-model-builder doesn't depend on maven-core --- maven-core/pom.xml | 4 + .../DefaultRepositorySystemSessionFactory.java | 53 ++++------ maven-model-builder/pom.xml | 6 +- .../maven/model/building/DefaultModelBuilder.java | 15 ++- maven-xml/pom.xml | 62 ++++++++++++ .../main/java/org/apache/maven/xml/SAXEvent.java | 24 ++--- .../java/org/apache/maven/xml/SAXEventFactory.java | 111 +++++++++++++++++++++ .../java/org/apache/maven/xml/SAXEventUtils.java | 22 ++-- .../apache/maven/xml/filter/BuildPomXMLFilter.java | 11 +- .../maven/xml/filter/ConsumerPomXMLFilter.java | 23 ++++- .../apache/maven/xml/filter/FastForwardFilter.java | 0 .../apache/maven/xml/filter/ModulesXMLFilter.java | 0 .../maven/xml/filter/RelativePathXMLFilter.java | 0 .../maven/xml/filter/AbstractXMLFilterTests.java | 0 .../maven/xml/filter/ConsumerPomXMLFilterTest.java | 0 .../maven/xml/filter/ModulesXMLFilterTest.java | 0 .../xml/filter/RelativePathXMLFilterTest.java | 0 pom.xml | 27 +++++ 18 files changed, 280 insertions(+), 78 deletions(-) diff --git a/maven-core/pom.xml b/maven-core/pom.xml index e467851..79dc86e 100644 --- a/maven-core/pom.xml +++ b/maven-core/pom.xml @@ -62,6 +62,10 @@ under the License. </dependency> <dependency> <groupId>org.apache.maven</groupId> + <artifactId>maven-xml</artifactId> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> </dependency> <dependency> diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java index 792b085..5ee5525 100644 --- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java +++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java @@ -34,7 +34,6 @@ import java.util.Properties; import javax.inject.Inject; import javax.inject.Named; -import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; @@ -77,7 +76,6 @@ import org.eclipse.aether.util.repository.DefaultProxySelector; import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy; import org.eclipse.sisu.Nullable; import org.xml.sax.InputSource; -import org.xml.sax.SAXException; /** * @since 3.3.0 @@ -283,41 +281,34 @@ public class DefaultRepositorySystemSessionFactory public InputStream transformData( File file ) throws IOException, TransformException { - try + final PipedOutputStream pipedOutputStream = new PipedOutputStream(); + final PipedInputStream pipedInputStream = new PipedInputStream( pipedOutputStream ); + + final SAXSource transformSource = + new SAXSource( new ConsumerPomXMLFilter( null /* @TODO bass BuildPomXMLFilter */ ), + new InputSource( new FileReader( file ) ) ); + + final StreamResult result = new StreamResult( pipedOutputStream ); + + final Runnable runnable = new Runnable() { - final PipedOutputStream pipedOutputStream = new PipedOutputStream(); - final PipedInputStream pipedInputStream = new PipedInputStream( pipedOutputStream ); - - final SAXSource transformSource = - new SAXSource( new ConsumerPomXMLFilter(), - new InputSource( new FileReader( file ) ) ); - - final StreamResult result = new StreamResult( pipedOutputStream ); - - final Runnable runnable = new Runnable() + @Override + public void run() { - @Override - public void run() + try ( PipedOutputStream out = pipedOutputStream ) { - try ( PipedOutputStream out = pipedOutputStream ) - { - transformerFactory.newTransformer().transform( transformSource, result ); - } - catch ( TransformerException | IOException e ) - { - throw new RuntimeException( e ); - } + transformerFactory.newTransformer().transform( transformSource, result ); } - }; + catch ( TransformerException | IOException e ) + { + throw new RuntimeException( e ); + } + } + }; - new Thread( runnable ).start(); + new Thread( runnable ).start(); - return pipedInputStream; - } - catch ( SAXException | ParserConfigurationException e ) - { - throw new TransformException( e ); - } + return pipedInputStream; } @Override diff --git a/maven-model-builder/pom.xml b/maven-model-builder/pom.xml index 9a85016..0f10fa9 100644 --- a/maven-model-builder/pom.xml +++ b/maven-model-builder/pom.xml @@ -59,6 +59,11 @@ under the License. <artifactId>maven-builder-support</artifactId> </dependency> <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-xml</artifactId> + </dependency> + <!-- Testing --> + <dependency> <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.inject</artifactId> </dependency> @@ -67,7 +72,6 @@ under the License. <artifactId>org.eclipse.sisu.plexus</artifactId> <scope>test</scope> </dependency> - <!-- Testing --> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java index f981944..7022781 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java @@ -549,6 +549,7 @@ public class DefaultModelBuilder try { + // RFS adjust inputstream model = modelProcessor.read( modelSource.getInputStream(), options ); } catch ( ModelParseException e ) @@ -733,12 +734,24 @@ public class DefaultModelBuilder private void assembleInheritance( List<ModelData> lineage, ModelBuildingRequest request, ModelProblemCollector problems ) { - for ( int i = lineage.size() - 2; i >= 0; i-- ) + for ( int i = lineage.size() - 2; i >= 1; i-- ) { Model parent = lineage.get( i + 1 ).getModel(); Model child = lineage.get( i ).getModel(); inheritanceAssembler.assembleModelInheritance( child, parent, request, problems ); } + + // re-read model from file + if ( Boolean.getBoolean( "maven.experimental.buildconsumer" ) ) + { + throw new UnsupportedOperationException(); + } + else + { + Model parent = lineage.get( 1 ).getModel(); + Model child = lineage.get( 0 ).getModel(); + inheritanceAssembler.assembleModelInheritance( child, parent, request, problems ); + } } private Map<String, Activation> getProfileActivations( Model model, boolean clone ) diff --git a/maven-xml/pom.xml b/maven-xml/pom.xml new file mode 100644 index 0000000..aeef99e --- /dev/null +++ b/maven-xml/pom.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +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. +--> + +<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"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>3.6.2-SNAPSHOT</version> + </parent> + <artifactId>maven-xml</artifactId> + <name>Maven XML</name> + + <properties> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>animal-sniffer-maven-plugin</artifactId> + <configuration> + <signature> + <groupId>org.codehaus.mojo.signature</groupId> + <artifactId>java18</artifactId> + <version>1.0</version> + </signature> + </configuration> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.xmlunit</groupId> + <artifactId>xmlunit-assertj</artifactId> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java similarity index 67% copy from maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java copy to maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java index 60f0c49..07da280 100644 --- a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java @@ -1,4 +1,4 @@ -package org.apache.maven.xml.filter; +package org.apache.maven.xml; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -19,26 +19,16 @@ package org.apache.maven.xml.filter; * under the License. */ -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLFilterImpl; +import org.xml.sax.SAXException; /** - * Filter to adjust pom on filesystem before being processed for effective pom. + * Command pattern to gather events which can be executed later on. * * @author Robert Scholte - * @since 3.7.0 + * @since */ -public class BuildPomXMLFilter extends XMLFilterImpl +@FunctionalInterface +public interface SAXEvent { - public BuildPomXMLFilter() - { - super(); - } - - public BuildPomXMLFilter( XMLReader parent ) - { - super( parent ); - } - - + void execute() throws SAXException; } diff --git a/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java new file mode 100644 index 0000000..42739e1 --- /dev/null +++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java @@ -0,0 +1,111 @@ +package org.apache.maven.xml; + +/* + * 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 org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.Locator; + +/** + * Factory for SAXEvents + * + * @author Robert Scholte + * @since 4.0.0 + */ +public final class SAXEventFactory +{ + private final ContentHandler contentHandler; + + protected SAXEventFactory( ContentHandler contentHandler ) + { + this.contentHandler = contentHandler; + } + + public SAXEvent characters( final char[] ch, final int start, final int length ) + { + final char[] txt; + if ( start > 0 ) + { + txt = new char[length]; + System.arraycopy( ch, start, txt, 0, length ); + } + else + { + txt = ch; + } + + return () -> contentHandler.characters( txt, 0, length ); + } + + public SAXEvent endDocument() + { + return () -> contentHandler.endDocument(); + } + + public SAXEvent endElement( final String uri, final String localName, final String qName ) + { + return () -> contentHandler.endElement( uri, localName, qName ); + } + + public SAXEvent endPrefixMapping( final String prefix ) + { + return () -> contentHandler.endPrefixMapping( prefix ); + } + + public SAXEvent ignorableWhitespace( final char[] ch, final int start, final int length ) + { + return () -> contentHandler.ignorableWhitespace( ch, start, length ); + } + + public SAXEvent processingInstruction( final String target, final String data ) + { + return () -> contentHandler.processingInstruction( target, data ); + } + + public SAXEvent setDocumentLocator( final Locator locator ) + { + return () -> contentHandler.setDocumentLocator( locator ); + } + + public SAXEvent skippedEntity( final String name ) + { + return () -> contentHandler.skippedEntity( name ); + } + + public SAXEvent startDocument() + { + return () -> contentHandler.startDocument(); + } + + public SAXEvent startElement( final String uri, final String localName, final String qName, final Attributes atts ) + { + return () -> contentHandler.startElement( uri, localName, qName, atts ); + } + + public SAXEvent startPrefixMapping( final String prefix, final String uri ) + { + return () -> contentHandler.startPrefixMapping( prefix, uri ); + } + + public static SAXEventFactory newInstance( ContentHandler handler ) + { + return new SAXEventFactory( handler ); + } +} diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java similarity index 69% copy from maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java copy to maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java index 60f0c49..06f4f26 100644 --- a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java @@ -1,4 +1,4 @@ -package org.apache.maven.xml.filter; +package org.apache.maven.xml; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -19,26 +19,20 @@ package org.apache.maven.xml.filter; * under the License. */ -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLFilterImpl; - /** - * Filter to adjust pom on filesystem before being processed for effective pom. + * Utility class for SAXEvents * * @author Robert Scholte - * @since 3.7.0 + * @since 4.0.0 */ -public class BuildPomXMLFilter extends XMLFilterImpl +public final class SAXEventUtils { - public BuildPomXMLFilter() + private SAXEventUtils() { - super(); } - - public BuildPomXMLFilter( XMLReader parent ) + + public static String renameQName( String oldQName, String newLocalName ) { - super( parent ); + return oldQName.replaceFirst( "[^:]+$", newLocalName ); } - - } diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java similarity index 85% rename from maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java rename to maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java index 60f0c49..58d219b 100644 --- a/maven-core/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilter.java @@ -19,7 +19,6 @@ package org.apache.maven.xml.filter; * under the License. */ -import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLFilterImpl; /** @@ -30,15 +29,7 @@ import org.xml.sax.helpers.XMLFilterImpl; */ public class BuildPomXMLFilter extends XMLFilterImpl { - public BuildPomXMLFilter() - { - super(); - } - - public BuildPomXMLFilter( XMLReader parent ) - { - super( parent ); - } + } diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java similarity index 79% rename from maven-core/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java rename to maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java index 8709b9c..a367419 100644 --- a/maven-core/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java +++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java @@ -31,6 +31,7 @@ import org.xml.sax.helpers.XMLFilterImpl; /** * XML Filter to transform pom.xml to consumer pom. * This often means stripping of build-specific information. + * When extra information is required during filtering it is probably a member of the BuildPomXMLFilter * * This filter is used at 2 locations: * - {@link org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory} when publishing pom files. @@ -43,15 +44,29 @@ public class ConsumerPomXMLFilter extends XMLFilterImpl { private final XMLFilter rootFilter; - public ConsumerPomXMLFilter() throws SAXException, ParserConfigurationException + // only for testing purpose + ConsumerPomXMLFilter() throws SAXException, ParserConfigurationException { this( SAXParserFactory.newInstance().newSAXParser().getXMLReader() ); } - - public ConsumerPomXMLFilter( XMLReader parent ) + + // only for testing purpose + ConsumerPomXMLFilter( XMLReader parent ) { - rootFilter = new BuildPomXMLFilter( parent ); + this.rootFilter = new XMLFilterImpl( parent ); + applyFilters(); + } + + public ConsumerPomXMLFilter( BuildPomXMLFilter buildPomXMLFilter ) + { + this.rootFilter = buildPomXMLFilter; + + applyFilters(); + } + + private void applyFilters() + { // Ensure that xs:any elements aren't touched by next filters XMLFilter filter = new FastForwardFilter( rootFilter ); diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/FastForwardFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/FastForwardFilter.java similarity index 100% rename from maven-core/src/main/java/org/apache/maven/xml/filter/FastForwardFilter.java rename to maven-xml/src/main/java/org/apache/maven/xml/filter/FastForwardFilter.java diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/ModulesXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/ModulesXMLFilter.java similarity index 100% rename from maven-core/src/main/java/org/apache/maven/xml/filter/ModulesXMLFilter.java rename to maven-xml/src/main/java/org/apache/maven/xml/filter/ModulesXMLFilter.java diff --git a/maven-core/src/main/java/org/apache/maven/xml/filter/RelativePathXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/RelativePathXMLFilter.java similarity index 100% rename from maven-core/src/main/java/org/apache/maven/xml/filter/RelativePathXMLFilter.java rename to maven-xml/src/main/java/org/apache/maven/xml/filter/RelativePathXMLFilter.java diff --git a/maven-core/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java similarity index 100% rename from maven-core/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java rename to maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java diff --git a/maven-core/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java similarity index 100% rename from maven-core/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java rename to maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java diff --git a/maven-core/src/test/java/org/apache/maven/xml/filter/ModulesXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/ModulesXMLFilterTest.java similarity index 100% rename from maven-core/src/test/java/org/apache/maven/xml/filter/ModulesXMLFilterTest.java rename to maven-xml/src/test/java/org/apache/maven/xml/filter/ModulesXMLFilterTest.java diff --git a/maven-core/src/test/java/org/apache/maven/xml/filter/RelativePathXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/RelativePathXMLFilterTest.java similarity index 100% rename from maven-core/src/test/java/org/apache/maven/xml/filter/RelativePathXMLFilterTest.java rename to maven-xml/src/test/java/org/apache/maven/xml/filter/RelativePathXMLFilterTest.java diff --git a/pom.xml b/pom.xml index 9677856..da0b9de 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,7 @@ under the License. <module>maven-embedder</module> <module>maven-compat</module> <module>apache-maven</module> + <module>maven-xml</module> </modules> <scm> @@ -229,6 +230,11 @@ under the License. <artifactId>maven-slf4j-provider</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-xml</artifactId> + <version>${project.version}</version> + </dependency> <!--bootstrap-end-comment--> <!-- Plexus --> <dependency> @@ -443,6 +449,27 @@ under the License. <pluginManagement> <plugins> <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <executions> + <execution> + <id>enforce-bytecode-version</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <enforceBytecodeVersion> + <excludes> + <exclude>org.apache.maven:maven-xml</exclude> <!-- Java 8 compatible --> + </excludes> + </enforceBytecodeVersion> + </rules> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-component-metadata</artifactId> <version>${plexusVersion}</version>
