You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/04/05 14:48:55 UTC
[maven] branch MNG-6656 updated: [MNG-6656] restore publishing
valid consumer poms. Improve Exception Handling
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
The following commit(s) were added to refs/heads/MNG-6656 by this push:
new f998d90 [MNG-6656] restore publishing valid consumer poms. Improve Exception Handling
f998d90 is described below
commit f998d903d346d833b16addf7dcefe02fc3bdd9f4
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Apr 5 16:48:35 2020 +0200
[MNG-6656] restore publishing valid consumer poms.
Improve Exception Handling
---
.../aether/ConsumerModelSourceTransformer.java | 110 +++++++++++++++++++++
.../DefaultRepositorySystemSessionFactory.java | 50 +++++++++-
.../maven/project/DefaultProjectBuilder.java | 54 ++--------
.../building/AbstractModelSourceTransformer.java | 2 +-
.../building/DefaultBuildPomXMLFilterFactory.java | 18 ----
.../xml/sax/filter/BuildPomXMLFilterFactory.java | 17 ----
6 files changed, 166 insertions(+), 85 deletions(-)
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
new file mode 100644
index 0000000..0f92f66
--- /dev/null
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
@@ -0,0 +1,110 @@
+package org.apache.maven.internal.aether;
+
+/*
+ * 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 java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+
+import org.apache.maven.model.building.AbstractModelSourceTransformer;
+import org.apache.maven.model.building.DefaultBuildPomXMLFilterFactory;
+import org.apache.maven.model.building.TransformerContext;
+import org.apache.maven.xml.Factories;
+import org.apache.maven.xml.internal.DefaultConsumerPomXMLFilterFactory;
+import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
+import org.xml.sax.SAXException;
+
+class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
+{
+ @Override
+ protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+ throws TransformerConfigurationException, SAXException, ParserConfigurationException
+ {
+ return new DefaultConsumerPomXMLFilterFactory( new DefaultBuildPomXMLFilterFactory( context ) ).get( pomFile );
+ }
+
+ /**
+ * This transformer will ensure that encoding and version are kept.
+ * However, it cannot prevent:
+ * <ul>
+ * <li>line-endings will be unix-style(LF)</li>
+ * <li>attributes will be on one line</li>
+ * <li>Unnecessary whitespace before the rootelement will be remove</li>
+ * </ul>
+ */
+ @Override
+ protected TransformerHandler getTransformerHandler( Path pomFile )
+ throws IOException, org.apache.maven.model.building.TransformerException
+ {
+ final TransformerHandler transformerHandler;
+
+ final SAXTransformerFactory transformerFactory =
+ (SAXTransformerFactory) Factories.newTransformerFactory();
+
+ // Keep same encoding+version
+ try ( InputStream input = Files.newInputStream( pomFile ) )
+ {
+ XMLStreamReader streamReader =
+ XMLInputFactory.newFactory().createXMLStreamReader( input );
+
+ transformerHandler = transformerFactory.newTransformerHandler();
+
+ final String encoding = streamReader.getCharacterEncodingScheme();
+ final String version = streamReader.getVersion();
+
+ Transformer transformer = transformerHandler.getTransformer();
+ if ( encoding == null && version == null )
+ {
+ transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
+ }
+ else
+ {
+ transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
+
+ if ( encoding != null )
+ {
+ transformer.setOutputProperty( OutputKeys.ENCODING, encoding );
+ }
+ if ( version != null )
+ {
+ transformer.setOutputProperty( OutputKeys.VERSION, version );
+ }
+ }
+ }
+ catch ( XMLStreamException | TransformerConfigurationException e )
+ {
+ throw new org.apache.maven.model.building.TransformerException(
+ "Failed to detect XML encoding and version", e );
+ }
+ return transformerHandler;
+ }
+
+}
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 8973b20..d0dd442 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
@@ -24,6 +24,8 @@ import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.bridge.MavenRepositorySystem;
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.feature.Features;
+import org.apache.maven.model.building.TransformerContext;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Proxy;
@@ -44,6 +46,8 @@ import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.repository.WorkspaceReader;
import org.eclipse.aether.resolution.ResolutionErrorPolicy;
import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
+import org.eclipse.aether.transform.FileTransformer;
+import org.eclipse.aether.transform.TransformException;
import org.eclipse.aether.util.repository.AuthenticationBuilder;
import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
import org.eclipse.aether.util.repository.DefaultMirrorSelector;
@@ -53,8 +57,13 @@ import org.eclipse.sisu.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
+
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
@@ -96,7 +105,6 @@ public class DefaultRepositorySystemSessionFactory
public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request )
{
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
-
session.setCache( request.getRepositoryCache() );
Map<Object, Object> configProps = new LinkedHashMap<>();
@@ -139,7 +147,6 @@ public class DefaultRepositorySystemSessionFactory
session.setLocalRepositoryManager( simpleLocalRepoMgrFactory.newInstance( session, localRepo ) );
logger.info( "Disabling enhanced local repository: using legacy is strongly discouraged to ensure"
+ " build reproducibility." );
-
}
catch ( NoLocalRepositoryManagerException e )
{
@@ -238,6 +245,12 @@ public class DefaultRepositorySystemSessionFactory
mavenRepositorySystem.injectProxy( session, request.getPluginArtifactRepositories() );
mavenRepositorySystem.injectAuthentication( session, request.getPluginArtifactRepositories() );
+ if ( Features.buildConsumer().isActive() )
+ {
+ session.setFileTransformerManager( a -> getTransformersForArtifact( a,
+ (TransformerContext) session.getData().get( TransformerContext.class ) ) );
+ }
+
return session;
}
@@ -266,5 +279,38 @@ public class DefaultRepositorySystemSessionFactory
return props.getProperty( "version", "unknown-version" );
}
+
+ private Collection<FileTransformer> getTransformersForArtifact( final org.eclipse.aether.artifact.Artifact artifact,
+ TransformerContext context )
+ {
+ Collection<FileTransformer> transformers = new ArrayList<>();
+ if ( "pom".equals( artifact.getExtension() ) )
+ {
+ transformers.add( new FileTransformer()
+ {
+ @Override
+ public InputStream transformData( File pomFile )
+ throws IOException, TransformException
+ {
+ try
+ {
+ return new ConsumerModelSourceTransformer().transform( pomFile.toPath(), context );
+ }
+ catch ( org.apache.maven.model.building.TransformerException e )
+ {
+ throw new TransformException( e );
+ }
+ }
+
+ @Override
+ public org.eclipse.aether.artifact.Artifact transformArtifact(
+ org.eclipse.aether.artifact.Artifact artifact )
+ {
+ return artifact;
+ }
+ } );
+ }
+ return Collections.unmodifiableCollection( transformers );
+ }
}
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 4b9821a..265633d 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -88,7 +88,6 @@ import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.Os;
import org.codehaus.plexus.util.StringUtils;
-import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.RequestTrace;
import org.eclipse.aether.impl.RemoteRepositoryManager;
@@ -97,8 +96,6 @@ import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.WorkspaceRepository;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.transform.FileTransformer;
-import org.eclipse.aether.transform.TransformException;
import org.xml.sax.SAXException;
/**
@@ -299,7 +296,6 @@ public class DefaultProjectBuilder
RequestTrace trace = RequestTrace.newChild( null, configuration ).newChild( request );
- RepositorySystemSession repoSession;
if ( Features.buildConsumer().isActive() )
{
TransformerContext context = new TransformerContext()
@@ -313,27 +309,24 @@ public class DefaultProjectBuilder
@Override
public Model getRawModel( Path p )
{
- return config.modelPool.get( p );
+ ReactorModelPool pool = config.modelPool;
+ return pool != null ? pool.get( p ) : null;
}
@Override
public Model getRawModel( String groupId, String artifactId )
{
- return config.modelPool.get( groupId, artifactId, null );
+ ReactorModelPool pool = config.modelPool;
+ return pool != null ? pool.get( groupId, artifactId, null ) : null;
}
};
- request.setTransformerContext( context );
+ config.session.getData().set( TransformerContext.class, context );
- repoSession = new DefaultRepositorySystemSession( config.session )
- .setFileTransformerManager( a -> getTransformersForArtifact( a, context ) );
- }
- else
- {
- repoSession = config.session;
+ request.setTransformerContext( context );
}
ModelResolver resolver =
- new ProjectModelResolver( repoSession, trace, repoSystem, repositoryManager, config.repositories,
+ new ProjectModelResolver( config.session, trace, repoSystem, repositoryManager, config.repositories,
configuration.getRepositoryMerging(), config.modelPool );
request.setValidationLevel( configuration.getValidationLevel() );
@@ -1104,39 +1097,6 @@ public class DefaultProjectBuilder
return null;
}
-
- private Collection<FileTransformer> getTransformersForArtifact( final org.eclipse.aether.artifact.Artifact artifact,
- TransformerContext context )
- {
- Collection<FileTransformer> transformers = new ArrayList<>();
- if ( "pom".equals( artifact.getExtension() ) )
- {
- transformers.add( new FileTransformer()
- {
- @Override
- public InputStream transformData( File pomFile )
- throws IOException, TransformException
- {
- try
- {
- return new ConsumerModelSourceTransformer().transform( pomFile.toPath(), context );
- }
- catch ( org.apache.maven.model.building.TransformerException e )
- {
- throw new TransformException( e );
- }
- }
-
- @Override
- public org.eclipse.aether.artifact.Artifact transformArtifact(
- org.eclipse.aether.artifact.Artifact artifact )
- {
- return artifact;
- }
- } );
- }
- return Collections.unmodifiableCollection( transformers );
- }
/**
* InternalConfig
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
index db26715..e0767fb 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
@@ -164,7 +164,7 @@ public abstract class AbstractModelSourceTransformer
}
catch ( Throwable t )
{
- throw new AssertionError();
+ throw new AssertionError( "Failed to transform pom", t );
}
}
}
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
index 9489e3b..3de90de 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
@@ -49,24 +49,6 @@ public class DefaultBuildPomXMLFilterFactory extends BuildPomXMLFilterFactory
}
@Override
- protected Optional<String> getChangelist()
- {
- return Optional.ofNullable( context.getUserProperty( "changelist" ) );
- }
-
- @Override
- protected Optional<String> getRevision()
- {
- return Optional.ofNullable( context.getUserProperty( "revision" ) );
- }
-
- @Override
- protected Optional<String> getSha1()
- {
- return Optional.ofNullable( context.getUserProperty( "sha1" ) );
- }
-
- @Override
protected Function<Path, Optional<RelativeProject>> getRelativePathMapper()
{
return p -> Optional.ofNullable( context.getRawModel( p ) ).map( m -> toRelativeProject( m ) );
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index d86200f..910bc16 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
@@ -99,23 +99,6 @@ public class BuildPomXMLFilterFactory
+ " it is not an instance of SAXTransformerFactory" );
}
- // getters for the 3 magic properties of CIFriendly versions ( https://maven.apache.org/maven-ci-friendly.html )
-
- protected Optional<String> getChangelist()
- {
- return Optional.empty();
- }
-
- protected Optional<String> getRevision()
- {
- return Optional.empty();
- }
-
- protected Optional<String> getSha1()
- {
- return Optional.empty();
- }
-
/**
* @return the mapper or {@code null} if relativePaths don't need to be mapped
*/