diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java index 699a009ab15f..fd99c05f407a 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java @@ -46,7 +46,7 @@ */ @Named @Singleton -class BuildModelSourceTransformer extends AbstractModelSourceTransformer +public class BuildModelSourceTransformer extends AbstractModelSourceTransformer { @Inject @Nullable diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java index 6334f1b84bc2..6f9fa124579e 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java @@ -367,7 +367,7 @@ public DefaultModelBuilder newInstance() ); } - private static class StubLifecycleBindingsInjector + public static class StubLifecycleBindingsInjector implements LifecycleBindingsInjector { diff --git a/maven-resolver-provider/pom.xml b/maven-resolver-provider/pom.xml index 0027e348f4c8..9643717eb47f 100644 --- a/maven-resolver-provider/pom.xml +++ b/maven-resolver-provider/pom.xml @@ -117,12 +117,7 @@ under the License. org.apache.maven.resolver - maven-resolver-transport-wagon - test - - - org.apache.maven.wagon - wagon-file + maven-resolver-transport-file test diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java index 9491b12e35fe..27cbea4980a0 100644 --- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java +++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java @@ -19,16 +19,72 @@ * under the License. */ +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.inject.Named; import javax.inject.Singleton; import com.google.inject.AbstractModule; +import com.google.inject.Key; import com.google.inject.Provides; import com.google.inject.name.Names; +import com.google.inject.util.Providers; +import org.apache.maven.model.building.BuildModelSourceTransformer; +import org.apache.maven.model.building.DefaultModelBuilder; import org.apache.maven.model.building.DefaultModelBuilderFactory; +import org.apache.maven.model.building.DefaultModelProcessor; import org.apache.maven.model.building.ModelBuilder; +import org.apache.maven.model.building.ModelProcessor; +import org.apache.maven.model.building.ModelSourceTransformer; +import org.apache.maven.model.composition.DefaultDependencyManagementImporter; +import org.apache.maven.model.composition.DependencyManagementImporter; +import org.apache.maven.model.inheritance.DefaultInheritanceAssembler; +import org.apache.maven.model.inheritance.InheritanceAssembler; +import org.apache.maven.model.interpolation.ModelInterpolator; +import org.apache.maven.model.interpolation.StringVisitorModelInterpolator; +import org.apache.maven.model.io.DefaultModelReader; +import org.apache.maven.model.io.DefaultModelWriter; +import org.apache.maven.model.io.ModelReader; +import org.apache.maven.model.io.ModelWriter; +import org.apache.maven.model.locator.DefaultModelLocator; +import org.apache.maven.model.locator.ModelLocator; +import org.apache.maven.model.management.DefaultDependencyManagementInjector; +import org.apache.maven.model.management.DefaultPluginManagementInjector; +import org.apache.maven.model.management.DependencyManagementInjector; +import org.apache.maven.model.management.PluginManagementInjector; +import org.apache.maven.model.normalization.DefaultModelNormalizer; +import org.apache.maven.model.normalization.ModelNormalizer; +import org.apache.maven.model.path.DefaultModelPathTranslator; +import org.apache.maven.model.path.DefaultModelUrlNormalizer; +import org.apache.maven.model.path.DefaultPathTranslator; +import org.apache.maven.model.path.DefaultUrlNormalizer; +import org.apache.maven.model.path.ModelPathTranslator; +import org.apache.maven.model.path.ModelUrlNormalizer; +import org.apache.maven.model.path.PathTranslator; +import org.apache.maven.model.path.UrlNormalizer; +import org.apache.maven.model.plugin.DefaultPluginConfigurationExpander; +import org.apache.maven.model.plugin.DefaultReportConfigurationExpander; +import org.apache.maven.model.plugin.DefaultReportingConverter; +import org.apache.maven.model.plugin.LifecycleBindingsInjector; +import org.apache.maven.model.plugin.PluginConfigurationExpander; +import org.apache.maven.model.plugin.ReportConfigurationExpander; +import org.apache.maven.model.plugin.ReportingConverter; +import org.apache.maven.model.profile.DefaultProfileInjector; +import org.apache.maven.model.profile.DefaultProfileSelector; +import org.apache.maven.model.profile.ProfileInjector; +import org.apache.maven.model.profile.ProfileSelector; +import org.apache.maven.model.profile.activation.FileProfileActivator; +import org.apache.maven.model.profile.activation.JdkVersionProfileActivator; +import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator; +import org.apache.maven.model.profile.activation.ProfileActivator; +import org.apache.maven.model.profile.activation.PropertyProfileActivator; +import org.apache.maven.model.superpom.DefaultSuperPomProvider; +import org.apache.maven.model.superpom.SuperPomProvider; +import org.apache.maven.model.transform.BuildToRawPomXMLFilterListener; +import org.apache.maven.model.validation.DefaultModelValidator; +import org.apache.maven.model.validation.ModelValidator; import org.eclipse.aether.impl.ArtifactDescriptorReader; import org.eclipse.aether.impl.MetadataGeneratorFactory; import org.eclipse.aether.impl.VersionRangeResolver; @@ -57,7 +113,46 @@ protected void configure() bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) ) .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class ); - bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() ); + // Model builder + bind( ModelBuilder.class ).to( DefaultModelBuilder.class ).in( Singleton.class ); + bind( ModelValidator.class ).to( DefaultModelValidator.class ).in( Singleton.class ); + bind( SuperPomProvider.class ).to( DefaultSuperPomProvider.class ).in( Singleton.class ); + bind( InheritanceAssembler.class ).to( DefaultInheritanceAssembler.class ).in( Singleton.class ); + bind( ModelProcessor.class ).to( DefaultModelProcessor.class ).in( Singleton.class ); + bind( ModelInterpolator.class ).to( StringVisitorModelInterpolator.class ).in( Singleton.class ); + bind( ModelLocator.class ).to( DefaultModelLocator.class ).in( Singleton.class ); + bind( ModelReader.class ).to( DefaultModelReader.class ).in( Singleton.class ); + bind( ModelWriter.class ).to( DefaultModelWriter.class ).in( Singleton.class ); + bind( DependencyManagementImporter.class ) + .to( DefaultDependencyManagementImporter.class ).in( Singleton.class ); + bind( DependencyManagementInjector.class ) + .to( DefaultDependencyManagementInjector.class ).in( Singleton.class ); + bind( PluginManagementInjector.class ).to( DefaultPluginManagementInjector.class ).in( Singleton.class ); + bind( ModelNormalizer.class ).to( DefaultModelNormalizer.class ).in( Singleton.class ); + bind( PathTranslator.class ).to( DefaultPathTranslator.class ).in( Singleton.class ); + bind( UrlNormalizer.class ).to( DefaultUrlNormalizer.class ).in( Singleton.class ); + bind( ModelPathTranslator.class ).to( DefaultModelPathTranslator.class ).in( Singleton.class ); + bind( ModelUrlNormalizer.class ).to( DefaultModelUrlNormalizer.class ).in( Singleton.class ); + bind( PluginConfigurationExpander.class ).to( DefaultPluginConfigurationExpander.class ).in( Singleton.class ); + bind( ReportConfigurationExpander.class ).to( DefaultReportConfigurationExpander.class ).in( Singleton.class ); + bind( ReportingConverter.class ).to( DefaultReportingConverter.class ).in( Singleton.class ); + bind( ProfileSelector.class ).to( DefaultProfileSelector.class ).in( Singleton.class ); + bind( ProfileInjector.class ).to( DefaultProfileInjector.class ).in( Singleton.class ); + bind( Key.get( ProfileActivator.class, Names.named( "os" ) ) ) + .to( OperatingSystemProfileActivator.class ).in( Singleton.class ); + bind( Key.get( ProfileActivator.class, Names.named( "property" ) ) ) + .to( PropertyProfileActivator.class ).in( Singleton.class ); + bind( Key.get( ProfileActivator.class, Names.named( "jdk-version" ) ) ) + .to( JdkVersionProfileActivator.class ).in( Singleton.class ); + bind( Key.get( ProfileActivator.class, Names.named( "file" ) ) ) + .to( FileProfileActivator.class ).in( Singleton.class ); + + bind( LifecycleBindingsInjector.class ) + .toInstance( new DefaultModelBuilderFactory.StubLifecycleBindingsInjector() ); + + // ??? + bind( ModelSourceTransformer.class ).to( BuildModelSourceTransformer.class ).in( Singleton.class ); + bind( BuildToRawPomXMLFilterListener.class ).toProvider( Providers.of( null ) ); } @Provides @@ -72,4 +167,19 @@ Set provideMetadataGeneratorFactories( return Collections.unmodifiableSet( factories ); } + @Provides + @Singleton + List provideProfileActivatorList( + @Named( "os" ) ProfileActivator os, + @Named( "property" ) ProfileActivator property, + @Named( "jdk-version" ) ProfileActivator jdkVersion, + @Named( "file" ) ProfileActivator file ) + { + ArrayList factories = new ArrayList<>( 4 ); + factories.add( os ); + factories.add( property ); + factories.add( jdkVersion ); + factories.add( file ); + return Collections.unmodifiableList( factories ); + } } diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenResolverModuleTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenResolverModuleTest.java new file mode 100644 index 000000000000..d8e0b71207da --- /dev/null +++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenResolverModuleTest.java @@ -0,0 +1,67 @@ +package org.apache.maven.repository.internal; + +/* + * 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 com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Provides; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory; +import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; +import org.eclipse.aether.spi.connector.transport.TransporterFactory; +import org.eclipse.aether.transport.file.FileTransporterFactory; +import org.junit.jupiter.api.Test; + +import javax.inject.Singleton; +import java.util.Collections; +import java.util.Set; + +public class MavenResolverModuleTest +{ + @Test + public void smokeTest() + { + Guice.createInjector( + new MavenResolverModule(), + // this is to be added by integrator + // Note: using File here for simplicity, Wagon would need even more components + new AbstractModule() { + @Override + protected void configure() { + bind(RepositoryConnectorFactory.class).to(BasicRepositoryConnectorFactory.class); + bind(TransporterFactory.class).to(FileTransporterFactory.class); + } + + @Provides + @Singleton + Set provideRepositoryConnectorFactory( + BasicRepositoryConnectorFactory basicRepositoryConnectorFactory) { + return Collections.singleton(basicRepositoryConnectorFactory); + } + + @Provides + @Singleton + Set provideTransporterFactory( + FileTransporterFactory fileTransporterFactory) { + return Collections.singleton(fileTransporterFactory); + } + }).getInstance(RepositorySystem.class); + } +} diff --git a/pom.xml b/pom.xml index eb63fa13c49e..94755b9cecb8 100644 --- a/pom.xml +++ b/pom.xml @@ -379,6 +379,11 @@ under the License. maven-resolver-connector-basic ${resolverVersion} + + org.apache.maven.resolver + maven-resolver-transport-file + ${resolverVersion} + org.apache.maven.resolver maven-resolver-transport-wagon