Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
65a5a1b
[MNG-6656] Introduce base for build/consumer pom
rfscholte May 14, 2019
dfb0c2c
[MNG-6656] Introduce base for build/consumer pom
rfscholte May 14, 2019
79c4813
[MNG-6656] separate module for maven-xml, maven-model-builder doesn't…
rfscholte Jun 1, 2019
eeea0bb
[MNG-6720] MultiThreadedBuilder: wait for parallel running projects w…
oehme Jul 23, 2019
144076c
[MNG-6725] Skip '.mavenrc' via MAVEN_SKIP_RC=1 and '-Dmaven.skip.rc=t…
Tibor17 Jul 30, 2019
b9c7c4a
IT archives
Tibor17 Jul 31, 2019
5822ea7
improved handlers documentation: artifact vs dependency attributes
hboutemy Aug 5, 2019
0197248
[INFRA-18812] Revert unnecessary commits after fixing INFRA-18812
rfscholte Aug 5, 2019
297a6b7
fixed ArtifactHandlerTest after commit d5b0f4ce
Tibor17 Aug 5, 2019
e6240d5
[MNG-6713] Fix ExclusionArtifactFilter to respect wildcard exclusions…
saturnism Aug 6, 2019
6e624f0
Merge remote-tracking branch 'remotes/origin/master' into MNG-6656
rfscholte Aug 20, 2019
5065aec
Move Filters to maven-xml filter, so it can be picked up by maven-mod…
rfscholte Aug 24, 2019
e12b732
Merge branch 'MNG-6656' of https://gitbox.apache.org/repos/asf/maven …
rfscholte Aug 24, 2019
82d8693
Add missing classes
rfscholte Aug 24, 2019
a684370
[MNG-6656] Support versionless parent
rfscholte Aug 26, 2019
712b95f
[MNG-6656] Support reactor managed versions
rfscholte Aug 29, 2019
2f4d491
Merge branch 'master' into MNG-6656
rfscholte Sep 10, 2019
b46a4c7
[MNG-6656] Update project versions
rfscholte Sep 10, 2019
b19b05c
[MNG-6656] Applying review comments
rfscholte Oct 2, 2019
c52f383
[MNG-6656] Support LexicalHandler
rfscholte Oct 11, 2019
24955e7
[MNG-6656] Introduce Features class
rfscholte Oct 13, 2019
585cb56
Merge branch 'master' into MNG-6656
rfscholte Oct 13, 2019
87601ec
[MNG-6656] Fix bug in AbstractEventXMLFilter (removed processed events)
rfscholte Oct 14, 2019
91f8799
[MNG-6656] Enable maven.experimental.buildconsumer by default
rfscholte Oct 14, 2019
3ef3fa1
[MNG-6656] Clean up code based on reviews
rfscholte Oct 16, 2019
729c93c
[MNG-6656] Fix deadlock
rfscholte Oct 19, 2019
1946d9c
Merge remote-tracking branch 'remotes/origin/master' into MNG-6656
rfscholte Nov 22, 2019
61a3761
[MNG-6656] Move post-processing of file to rawmodel to proper method
rfscholte Nov 25, 2019
2313114
Merge branch 'master' of https://gitbox.apache.org/repos/asf/maven in…
rfscholte Nov 27, 2019
a70db51
Merge remote-tracking branch 'remotes/origin/master' into MNG-6656
rfscholte Nov 29, 2019
21be0b1
[MNG-6656] Don't post-process when model has errors
rfscholte Nov 29, 2019
ee8e8e2
Merge remote-tracking branch 'remotes/origin/master' into MNG-6656
rfscholte Dec 10, 2019
d373d3a
MNG-6656: Keep xml version + encoding after transformation
rfscholte Dec 13, 2019
d9cc0e4
[MNG-6656] Improve ModelValidator
rfscholte Dec 18, 2019
9049d68
Merge branch 'master' into MNG-6656
rfscholte Dec 21, 2019
630c22f
Merge branch 'master' into MNG-6656
rfscholte Dec 22, 2019
3d453bf
[MNG-6656] Introduce custom ModelMerger to keep inputLocationTracker …
rfscholte Dec 30, 2019
a191af7
Merge branch 'master' into MNG-6656
rfscholte Feb 4, 2020
3294a6b
[MNG-6656] Introduce ModelSourceTransformer
rfscholte Feb 22, 2020
95b5b58
[MNG-6656] Refactor code, make sure it still works with non-xml poms
rfscholte Feb 24, 2020
0a8d8e6
[MNG-6656] Fix checkstyle errors
rfscholte Feb 24, 2020
1b0395e
Revert tests with unneeded changes
rfscholte Feb 26, 2020
475fca2
[MNG-6656] Replace CacheManager with already existing ReactorModelPool
rfscholte Feb 29, 2020
1218fe3
Merge branch 'master' into MNG-6656
rfscholte Feb 29, 2020
a94e2d1
Revert tests with unneeded changes
rfscholte Feb 29, 2020
7ba7bef
[MNG-6656] Clean up code
rfscholte Mar 1, 2020
e0093d5
[MNG-6656] Changes based on review comments.
rfscholte Mar 3, 2020
1381266
Merge branch 'master' into MNG-6656
rfscholte Mar 14, 2020
447f33e
[MNG-6656] Process review comments
rfscholte Mar 14, 2020
f998d90
[MNG-6656] restore publishing valid consumer poms.
rfscholte Apr 5, 2020
cc5e28e
[MNG-6656] Align version in parent
rfscholte Apr 6, 2020
1af5ee7
[MNG-6656] Move creation of TransformerContext to proper location
rfscholte May 5, 2020
413fdb4
Merge branch 'master' into MNG-6656
rfscholte May 31, 2020
51b74ad
Fix lineseparator in comments
rfscholte Jun 6, 2020
2717ebc
Fix Jenkinsfile
rfscholte Jun 6, 2020
d0a3b92
Don't try to resolve ${project.artifactId}
rfscholte Jun 6, 2020
3fda5cc
trying to escape $
rfscholte Jun 6, 2020
ee27a04
trying with triple double quotes
rfscholte Jun 6, 2020
5101ea0
try as system property
rfscholte Jun 6, 2020
9b42ab0
Merge branch 'master' into MNG-6656
rfscholte Jun 6, 2020
82bc06d
Restore Jenkins file
rfscholte Jun 6, 2020
8b3f47a
Pass sessionData
rfscholte Jun 6, 2020
be5d23d
Prevent NPE
rfscholte Jun 7, 2020
020b503
Adjust apache-maven-wrapper pom for IT
rfscholte Jun 7, 2020
dc1d8c7
Merge branch 'master' into MNG-6656
rfscholte Jun 13, 2020
cc620d2
Adjust code based on review comments
rfscholte Jun 16, 2020
1737d23
ReAdd DefaultModelSourceTransformer
rfscholte Jun 16, 2020
e082e6e
Adjust code based on review comments
rfscholte Jun 17, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions maven-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ under the License.
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-xml</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
Expand Down Expand Up @@ -142,6 +146,11 @@ under the License.
<artifactId>hamcrest-library</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-assertj</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down Expand Up @@ -218,6 +227,19 @@ under the License.
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<!-- <phase></phase> -->
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -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>attributes will be on one line</li>
* <li>Unnecessary whitespace before the rootelement will be removed</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();
transformer.setOutputProperty( OutputKeys.METHOD, "xml" );
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 );
Comment thread
rfscholte marked this conversation as resolved.
}
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;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
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.model.building.TransformerException;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Proxy;
Expand All @@ -38,12 +41,16 @@
import org.eclipse.aether.ConfigurationProperties;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.SessionData;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
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;
Expand All @@ -53,8 +60,13 @@

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;
Expand Down Expand Up @@ -96,7 +108,6 @@ public class DefaultRepositorySystemSessionFactory
public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request )
{
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();

session.setCache( request.getRepositoryCache() );

Map<Object, Object> configProps = new LinkedHashMap<>();
Expand Down Expand Up @@ -139,7 +150,6 @@ else if ( request.isUpdateSnapshots() )
session.setLocalRepositoryManager( simpleLocalRepoMgrFactory.newInstance( session, localRepo ) );
logger.info( "Disabling enhanced local repository: using legacy is strongly discouraged to ensure"
+ " build reproducibility." );

}
catch ( NoLocalRepositoryManagerException e )
{
Expand Down Expand Up @@ -238,6 +248,11 @@ else if ( request.isUpdateSnapshots() )
mavenRepositorySystem.injectProxy( session, request.getPluginArtifactRepositories() );
mavenRepositorySystem.injectAuthentication( session, request.getPluginArtifactRepositories() );

if ( Features.buildConsumer().isActive() )
{
session.setFileTransformerManager( a -> getTransformersForArtifact( a, session.getData() ) );
}

return session;
}

Expand Down Expand Up @@ -266,5 +281,40 @@ private String getMavenVersion()

return props.getProperty( "version", "unknown-version" );
}

private Collection<FileTransformer> getTransformersForArtifact( final Artifact artifact,
final SessionData sessionData )
{
TransformerContext context = (TransformerContext) sessionData.get( TransformerContext.KEY );
Collection<FileTransformer> transformers = new ArrayList<>();

// In case of install:install-file there's no transformer context, as the goal is unrelated to the lifecycle.
if ( "pom".equals( artifact.getExtension() ) && context != null )
{
transformers.add( new FileTransformer()
{
@Override
public InputStream transformData( File pomFile )
throws IOException, TransformException
{
try
{
return new ConsumerModelSourceTransformer().transform( pomFile.toPath(), context );
}
catch ( TransformerException e )
{
throw new TransformException( e );
}
}

@Override
public Artifact transformArtifact( Artifact artifact )
{
return artifact;
}
} );
}
return Collections.unmodifiableCollection( transformers );
}

}
}
Loading