From e475442ecd3845eab82163e5a3a2a62a76c1b8b4 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 3 Jan 2025 21:47:25 +0100 Subject: [PATCH] chore: get rid of Plexus DI and more --- pom.xml | 92 +++++++++---------- .../maven/docker/AbstractDockerMojo.java | 10 +- .../docker/access/util/ExternalCommand.java | 3 +- .../DockerAssemblyConfigurationSource.java | 72 +++++++++++---- .../assembly/DockerAssemblyManager.java | 32 ++++--- .../docker/assembly/MappingTrackArchiver.java | 10 +- .../assembly/TrackArchiverCollection.java | 6 +- .../maven/docker/config/ConfigHelper.java | 2 +- .../config/handler/ImageConfigResolver.java | 39 +++----- .../compose/DockerComposeConfigHandler.java | 15 +-- .../property/PropertyConfigHandler.java | 8 +- .../docker/service/DockerAccessFactory.java | 8 +- .../docker/service/ServiceHubFactory.java | 13 ++- .../maven/docker/service/WaitService.java | 2 +- .../maven/docker/util/AuthConfigFactory.java | 34 +++---- .../io/fabric8/maven/docker/util/EnvUtil.java | 17 +++- .../resources/META-INF/plexus/components.xml | 20 ---- .../maven/docker/PushMojoBuildXTest.java | 14 +-- .../assembly/DockerAssemblyManagerTest.java | 4 +- .../config/ImageConfigResolverTest.java | 15 +-- .../docker/util/AuthConfigFactoryTest.java | 11 +-- 21 files changed, 225 insertions(+), 202 deletions(-) diff --git a/pom.xml b/pom.xml index 07aa74687..68d4d8271 100644 --- a/pom.xml +++ b/pom.xml @@ -75,12 +75,12 @@ 1.3.11 0.38.19 5.8.2 - 3.8.1 + 3.8.8 3.3.9 4.5.1 2024-09-29T06:28:50Z UTF-8 - 3.0.0-M2 + 3.5.2 2.0.1 3.25.3 3.11.0.3922 @@ -144,16 +144,22 @@ 2.4.0 + + org.apache.commons + commons-compress + 1.27.1 + + org.apache.commons commons-lang3 - 3.6 + 3.17.0 org.apache.commons commons-text - 1.1 + 1.12.0 @@ -214,18 +220,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 - - - org.apache.maven - maven-project - - - - com.google.collections - google-collections - - + 3.7.1 @@ -237,15 +232,8 @@ org.bouncycastle - bcpkix-jdk15on - 1.65 - - - - org.codehaus.plexus - plexus-component-annotations - 1.6 - provided + bcpkix-jdk18on + 1.79 @@ -257,7 +245,7 @@ org.codehaus.plexus plexus-utils - 3.0.24 + 3.5.1 @@ -311,7 +299,7 @@ org.yaml snakeyaml - 1.32 + 2.3 @@ -334,15 +322,30 @@ + + maven-clean-plugin + 3.4.0 + maven-deploy-plugin - 2.8.2 + 3.1.3 + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.7 + + + + maven-install-plugin + 3.1.3 maven-jar-plugin - 3.2.0 + 3.4.2 true @@ -352,17 +355,17 @@ maven-javadoc-plugin - 3.2.0 + 3.11.1 maven-release-plugin - 3.0.0-M1 + 3.1.1 maven-source-plugin - 3.2.0 + 3.3.1 @@ -428,10 +431,10 @@ maven-compiler-plugin - 3.8.1 + 3.13.0 - 1.8 - 1.8 + 8 + 8 -Xlint:deprecation true @@ -439,7 +442,7 @@ maven-plugin-plugin - 3.6.0 + 3.13.1 docker true @@ -463,7 +466,7 @@ maven-resources-plugin - 3.0.2 + 3.3.1 copy-plexus-resources @@ -499,18 +502,16 @@ - - org.codehaus.plexus - plexus-component-metadata - 2.1.0 - - ${basedir}/target/filtered-resources/META-INF/plexus - + org.eclipse.sisu + sisu-maven-plugin + 0.9.0.M3 + index-project - generate-metadata + main-index + test-index @@ -544,7 +545,6 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 false diff --git a/src/main/java/io/fabric8/maven/docker/AbstractDockerMojo.java b/src/main/java/io/fabric8/maven/docker/AbstractDockerMojo.java index 3d3af1d6c..3cf261578 100644 --- a/src/main/java/io/fabric8/maven/docker/AbstractDockerMojo.java +++ b/src/main/java/io/fabric8/maven/docker/AbstractDockerMojo.java @@ -59,7 +59,6 @@ import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; -import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; import org.fusesource.jansi.Ansi; /** @@ -68,7 +67,7 @@ * @author roland * @since 26.03.14 */ -public abstract class AbstractDockerMojo extends AbstractMojo implements Contextualizable, ConfigHelper.Customizer { +public abstract class AbstractDockerMojo extends AbstractMojo implements ConfigHelper.Customizer { // Key for indicating that a "start" goal has run public static final String CONTEXT_KEY_START_CALLED = "CONTEXT_KEY_DOCKER_START_CALLED"; @@ -255,6 +254,7 @@ public abstract class AbstractDockerMojo extends AbstractMojo implements Context List resolvedImages; // Handler dealing with authentication credentials + @Component AuthConfigFactory authConfigFactory; protected AnsiLogger log; @@ -481,12 +481,6 @@ protected List getVolumes() { // ================================================================================= - @Override - public void contextualize(Context context) throws ContextException { - authConfigFactory = new AuthConfigFactory((PlexusContainer) context.get(PlexusConstants.PLEXUS_KEY)); - } - - // ================================================================================= protected GavLabel getGavLabel() { // Label used for this run return new GavLabel(project.getGroupId(), project.getArtifactId(), project.getVersion()); diff --git a/src/main/java/io/fabric8/maven/docker/access/util/ExternalCommand.java b/src/main/java/io/fabric8/maven/docker/access/util/ExternalCommand.java index 0e88e5b9d..b639f0cbd 100644 --- a/src/main/java/io/fabric8/maven/docker/access/util/ExternalCommand.java +++ b/src/main/java/io/fabric8/maven/docker/access/util/ExternalCommand.java @@ -19,9 +19,8 @@ import java.io.*; import java.util.concurrent.*; -import io.fabric8.maven.docker.util.AnsiLogger; import io.fabric8.maven.docker.util.Logger; -import org.apache.maven.shared.utils.StringUtils; +import org.codehaus.plexus.util.StringUtils; /** * @author roland diff --git a/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyConfigurationSource.java b/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyConfigurationSource.java index f5accd095..32214400d 100644 --- a/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyConfigurationSource.java +++ b/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyConfigurationSource.java @@ -3,6 +3,7 @@ import java.io.File; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Properties; import javax.annotation.Nonnull; @@ -14,11 +15,11 @@ import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugins.assembly.AssemblerConfigurationSource; +import org.apache.maven.plugins.assembly.model.Assembly; import org.apache.maven.plugins.assembly.utils.InterpolationConstants; import org.apache.maven.project.MavenProject; import org.apache.maven.shared.filtering.MavenFileFilter; import org.apache.maven.shared.filtering.MavenReaderFilter; -import org.apache.maven.shared.utils.cli.CommandLineUtils; import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator; import org.codehaus.plexus.interpolation.fixed.PrefixedPropertiesValueSource; import org.codehaus.plexus.interpolation.fixed.PropertiesBasedValueSource; @@ -93,11 +94,6 @@ public String getFinalName() { return "."; } - @Override - public ArtifactRepository getLocalRepository() { - return params.getSession().getLocalRepository(); - } - public MavenFileFilter getMavenFileFilter() { return params.getMavenFileFilter(); } @@ -108,12 +104,6 @@ public List getReactorProjects() { return params.getReactorProjects(); } - // Maybe use injection - @Override - public List getRemoteRepositories() { - return params.getProject().getRemoteArtifactRepositories(); - } - @Override public MavenSession getMavenSession() { return params.getSession(); @@ -265,18 +255,57 @@ public boolean isUpdateOnly() { } @Override - public boolean isUseJvmChmod() { + public boolean isIgnorePermissions() { + return assemblyConfig != null ? assemblyConfig.isIgnorePermissions() : false; + } + + @Override + public List getInlineDescriptors() { + return Collections.emptyList(); + } + + @Override + public Properties getAdditionalProperties() { + return new Properties(); + } + + @Override + public Integer getOverrideUid() { + return null; + } + + @Override + public String getOverrideUserName() { + return null; + } + + @Override + public Integer getOverrideGid() { + return null; + } + + @Override + public String getOverrideGroupName() { + return null; + } + + @Override + public boolean isRecompressZippedFiles() { return false; } @Override - public boolean isIgnorePermissions() { - return assemblyConfig != null ? assemblyConfig.isIgnorePermissions() : false; + public String getMergeManifestMode() { + return null; } // ======================================================================= // Taken from AbstractAssemblyMojo + private ArtifactRepository getLocalRepository() { + return params.getSession().getLocalRepository(); + } + private FixedStringSearchInterpolator mainProjectInterpolator(MavenProject mainProject) { if (mainProject != null) { @@ -330,7 +359,18 @@ private FixedStringSearchInterpolator createCommandLinePropertiesInterpolator() private FixedStringSearchInterpolator createEnvInterpolator() { PrefixedPropertiesValueSource envProps = new PrefixedPropertiesValueSource(Collections.singletonList("env."), - CommandLineUtils.getSystemEnvVars(false), true ); + getSystemEnvVars(), true ); return FixedStringSearchInterpolator.create( envProps ); } + + private static Properties getSystemEnvVars() { + Properties envVars = new Properties(); + Map envs = System.getenv(); + + for(String key : envs.keySet()) { + String value = envs.get(key); + envVars.put(key, value); + } + return envVars; + } } diff --git a/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyManager.java b/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyManager.java index 7910ff9ba..4ac734a7c 100644 --- a/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyManager.java +++ b/src/main/java/io/fabric8/maven/docker/assembly/DockerAssemblyManager.java @@ -4,10 +4,12 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import io.fabric8.maven.docker.config.ArchiveCompression; import io.fabric8.maven.docker.config.Arguments; @@ -31,8 +33,6 @@ import org.apache.maven.plugins.assembly.io.AssemblyReader; import org.apache.maven.plugins.assembly.model.Assembly; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.utils.PathTool; -import org.apache.maven.shared.utils.io.FileUtils; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; @@ -42,11 +42,13 @@ import org.codehaus.plexus.archiver.tar.TarUnArchiver.UntarCompressionMethod; import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet; import org.codehaus.plexus.archiver.util.DefaultFileSet; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.PathTool; import javax.annotation.Nonnull; +import javax.inject.Inject; +import javax.inject.Named; /** * Tool for creating a docker image tar ball including a Dockerfile for building @@ -55,7 +57,7 @@ * @author roland * @since 08.05.14 */ -@Component(role = DockerAssemblyManager.class, instantiationStrategy = "per-lookup") +@Named public class DockerAssemblyManager { public static final String DEFAULT_DATA_BASE_IMAGE = "busybox:latest"; @@ -69,16 +71,16 @@ public class DockerAssemblyManager { private static final String TAR_ARCHIVER_TYPE = "tar"; - @Requirement + @Inject private AssemblyArchiver assemblyArchiver; - @Requirement + @Inject private AssemblyReader assemblyReader; - @Requirement + @Inject private ArchiverManager archiverManager; - @Requirement + @Inject private TrackArchiverCollection trackArchivers; /** @@ -300,7 +302,7 @@ public AssemblyFiles getAssemblyFiles(@Nonnull String name, AssemblyConfiguratio synchronized (trackArchivers) { trackArchivers.init(log, assemblyName); assembly.setId("tracker"); - File trackArchiverDestFile = assemblyArchiver.createArchive(assembly, assemblyName, "track", source, false, null); + File trackArchiverDestFile = assemblyArchiver.createArchive(assembly, assemblyName, "track", source, null); trackArchivers.get(assemblyName).setDestFile(trackArchiverDestFile); return trackArchivers.getAssemblyFiles(mojoParams.getSession(), assemblyName); } @@ -394,7 +396,9 @@ private void addDockerExcludes(DefaultFileSet fileSet, MojoParameters params) th for (String file : new String[] { DOCKER_EXCLUDE, DOCKER_IGNORE } ) { File dockerIgnore = new File(directory, file); if (dockerIgnore.exists()) { - excludes.addAll(Arrays.asList(FileUtils.fileReadArray(dockerIgnore))); + excludes.addAll(Files.readAllLines(dockerIgnore.toPath()).stream() + .filter(l -> !l.startsWith("#") && !l.trim().isEmpty()) + .collect(Collectors.toList())); excludes.add(DOCKER_IGNORE); } } @@ -405,7 +409,9 @@ private void addDockerIncludes(DefaultFileSet fileSet) throws IOException { File directory = fileSet.getDirectory(); File dockerInclude = new File(directory, DOCKER_INCLUDE); if (dockerInclude.exists()) { - ArrayList includes = new ArrayList<>(Arrays.asList(FileUtils.fileReadArray(dockerInclude))); + ArrayList includes = new ArrayList<>(Files.readAllLines(dockerInclude.toPath()).stream() + .filter(l -> !l.startsWith("#") && !l.trim().isEmpty()) + .collect(Collectors.toList())); fileSet.setIncludes(includes.toArray(new String[0])); } } @@ -543,7 +549,7 @@ private void createAssemblyArchive(AssemblyConfiguration assemblyConfig, MojoPar try { originalArtifactFile = ensureThatArtifactFileIsSet(params.getProject()); assembly.setId("docker"); - assemblyArchiver.createArchive(assembly, assemblyConfig.getName(), buildMode.getExtension(), source, false, null); + assemblyArchiver.createArchive(assembly, assemblyConfig.getName(), buildMode.getExtension(), source, null); } catch (ArchiveCreationException | AssemblyFormattingException e) { String error = "Failed to create assembly for docker image " + " (with mode '" + buildMode + "'): " + e.getMessage() + "."; diff --git a/src/main/java/io/fabric8/maven/docker/assembly/MappingTrackArchiver.java b/src/main/java/io/fabric8/maven/docker/assembly/MappingTrackArchiver.java index 1e939d72a..3b7101ef5 100644 --- a/src/main/java/io/fabric8/maven/docker/assembly/MappingTrackArchiver.java +++ b/src/main/java/io/fabric8/maven/docker/assembly/MappingTrackArchiver.java @@ -28,12 +28,13 @@ import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenSession; -import org.apache.maven.shared.utils.io.DirectoryScanner; -import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.FileSet; import org.codehaus.plexus.archiver.diags.TrackingArchiver; -import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.components.io.resources.PlexusIoFileResource; +import org.codehaus.plexus.util.DirectoryScanner; + +import javax.inject.Named; +import javax.inject.Singleton; /** * An archiver which remembers all resolved files and directories and returns them @@ -42,7 +43,8 @@ * @author roland * @since 15/06/15 */ -@Component(role = Archiver.class, hint = "track", instantiationStrategy = "singleton") +@Singleton +@Named("track") public class MappingTrackArchiver extends TrackingArchiver { // Logger to use diff --git a/src/main/java/io/fabric8/maven/docker/assembly/TrackArchiverCollection.java b/src/main/java/io/fabric8/maven/docker/assembly/TrackArchiverCollection.java index 455f96db0..9ca8f9dbe 100644 --- a/src/main/java/io/fabric8/maven/docker/assembly/TrackArchiverCollection.java +++ b/src/main/java/io/fabric8/maven/docker/assembly/TrackArchiverCollection.java @@ -2,15 +2,17 @@ import io.fabric8.maven.docker.util.Logger; import org.apache.maven.execution.MavenSession; -import org.codehaus.plexus.component.annotations.Component; +import javax.inject.Named; +import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; /** * Contains several {@link MappingTrackArchiver} instances, one per assembly */ -@Component(role = TrackArchiverCollection.class, instantiationStrategy = "singleton") +@Singleton +@Named public class TrackArchiverCollection { private final Map archivers = new HashMap<>(); diff --git a/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java b/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java index df30b9c87..25a813df0 100644 --- a/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java +++ b/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java @@ -24,7 +24,7 @@ import io.fabric8.maven.docker.util.Logger; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.utils.StringUtils; +import org.codehaus.plexus.util.StringUtils; /** * Utility class which helps in resolving, customizing, initializing and validating diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/ImageConfigResolver.java b/src/main/java/io/fabric8/maven/docker/config/handler/ImageConfigResolver.java index 8b72952b3..fa20f84a9 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/ImageConfigResolver.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/ImageConfigResolver.java @@ -19,15 +19,14 @@ import io.fabric8.maven.docker.config.ConfigHelper; import io.fabric8.maven.docker.config.ImageConfiguration; -import io.fabric8.maven.docker.config.handler.compose.DockerComposeConfigHandler; import io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler; import io.fabric8.maven.docker.util.Logger; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; -import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; -import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; /** * Manager holding all config handlers for external configuration @@ -36,34 +35,24 @@ * @since 18/11/14 */ -@Component(role = ImageConfigResolver.class, instantiationStrategy = "singleton") -public class ImageConfigResolver implements Initializable { +@Singleton +@Named +public class ImageConfigResolver { // Map type to handler - private Map registry; - - // No List injection possible currently with Plexus. - // Strangely, only the first element is injected in the list. - // So the elements are injected via scalar field injection and collected later. - // Very ugly, but I dont see any other solution until Plexus is fixed. - - @Requirement(role = PropertyConfigHandler.class) - private ExternalConfigHandler propertyConfigHandler; - - @Requirement(role = DockerComposeConfigHandler.class) - private ExternalConfigHandler dockerComposeConfigHandler; + private final Map registry; - private Logger log; - - @Override - public void initialize() throws InitializationException { + @Inject + public ImageConfigResolver(List externalConfigHandlers) { this.registry = new HashMap<>(); - for (ExternalConfigHandler handler : new ExternalConfigHandler[] { propertyConfigHandler, dockerComposeConfigHandler }) { + for (ExternalConfigHandler handler : externalConfigHandlers) { if (handler != null) { registry.put(handler.getType(), handler); } } } + private Logger log; + public void setLog(Logger log) { this.log = log; } @@ -112,7 +101,7 @@ private void injectExternalConfigActivation(ImageConfiguration unresolvedConfig, Map externalConfig = unresolvedConfig.getExternalConfig(); if(externalConfig == null) { externalConfig = new HashMap<>(); - externalConfig.put("type", propertyConfigHandler.getType()); + externalConfig.put("type", PropertyConfigHandler.TYPE_NAME); externalConfig.put("mode", mode); unresolvedConfig.setExternalConfiguration(externalConfig); diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java index 0f4d25017..8cbb3bc5e 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/compose/DockerComposeConfigHandler.java @@ -15,6 +15,10 @@ import org.apache.maven.shared.filtering.MavenReaderFilterRequest; import org.yaml.snakeyaml.Yaml; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + import static io.fabric8.maven.docker.config.handler.compose.ComposeUtils.resolveAbsolutely; import static io.fabric8.maven.docker.config.handler.compose.ComposeUtils.resolveComposeFileAbsolutely; @@ -23,18 +27,17 @@ * Docker Compose handler for allowing a docker-compose file to be used * to specify the docker images. */ - -// Moved temporarily to resources/META-INF/plexus/components.xml because of https://github.com/codehaus-plexus/plexus-containers/issues/4 -// @Component(role = ExternalConfigHandler.class) +@Singleton +@Named(DockerComposeConfigHandler.TYPE_NAME) public class DockerComposeConfigHandler implements ExternalConfigHandler { + public static final String TYPE_NAME = "compose"; @Override public String getType() { - return "compose"; + return TYPE_NAME; } - // Enable later when issue above is fixed. In the meantime its declared in the components.xml, too - // @Requirement(role = MavenReaderFilter.class) + @Inject MavenReaderFilter readerFilter; @Override diff --git a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java index 3d1cd495b..2ada4cb7b 100644 --- a/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java +++ b/src/main/java/io/fabric8/maven/docker/config/handler/property/PropertyConfigHandler.java @@ -46,16 +46,18 @@ import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.CollectionUtils; +import javax.inject.Named; +import javax.inject.Singleton; + import static io.fabric8.maven.docker.config.handler.property.ConfigKey.*; /** * @author roland * @since 18/11/14 */ -// Moved temporarily to resources/META-INF/plexus/components.xml because of https://github.com/codehaus-plexus/plexus-containers/issues/4 -// @Component(role = ExternalConfigHandler.class) +@Singleton +@Named(PropertyConfigHandler.TYPE_NAME) public class PropertyConfigHandler implements ExternalConfigHandler { - public static final String TYPE_NAME = "properties"; public static final String DEFAULT_PREFIX = "docker"; diff --git a/src/main/java/io/fabric8/maven/docker/service/DockerAccessFactory.java b/src/main/java/io/fabric8/maven/docker/service/DockerAccessFactory.java index 619ce8ae4..28cae0d47 100644 --- a/src/main/java/io/fabric8/maven/docker/service/DockerAccessFactory.java +++ b/src/main/java/io/fabric8/maven/docker/service/DockerAccessFactory.java @@ -13,17 +13,19 @@ import io.fabric8.maven.docker.access.DockerMachine; import io.fabric8.maven.docker.access.hc.DockerAccessWithHcClient; import io.fabric8.maven.docker.config.DockerMachineConfiguration; -import io.fabric8.maven.docker.util.EnvUtil; import io.fabric8.maven.docker.util.Logger; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; -import org.codehaus.plexus.component.annotations.Component; + +import javax.inject.Named; +import javax.inject.Singleton; /** * */ -@Component(role = DockerAccessFactory.class, instantiationStrategy = "singleton") +@Singleton +@Named public class DockerAccessFactory { public DockerAccess createDockerAccess(DockerAccessContext dockerAccessContext) throws MojoExecutionException, MojoFailureException { diff --git a/src/main/java/io/fabric8/maven/docker/service/ServiceHubFactory.java b/src/main/java/io/fabric8/maven/docker/service/ServiceHubFactory.java index 06dbc24e5..c815b62ee 100644 --- a/src/main/java/io/fabric8/maven/docker/service/ServiceHubFactory.java +++ b/src/main/java/io/fabric8/maven/docker/service/ServiceHubFactory.java @@ -6,23 +6,26 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.BuildPluginManager; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; import io.fabric8.maven.docker.log.LogOutputSpecFactory; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * Factory for creating the ServiceHub (i.e. the overall context for performing all services) */ -@Component(role = ServiceHubFactory.class, instantiationStrategy = "singleton") +@Singleton +@Named public class ServiceHubFactory { // Track started containers private final ContainerTracker containerTracker = new ContainerTracker(); - @Requirement + @Inject protected BuildPluginManager pluginManager; - @Requirement + @Inject protected DockerAssemblyManager dockerAssemblyManager; private LogOutputSpecFactory logOutputSpecFactory; diff --git a/src/main/java/io/fabric8/maven/docker/service/WaitService.java b/src/main/java/io/fabric8/maven/docker/service/WaitService.java index 976371a7c..389860c37 100644 --- a/src/main/java/io/fabric8/maven/docker/service/WaitService.java +++ b/src/main/java/io/fabric8/maven/docker/service/WaitService.java @@ -7,7 +7,6 @@ import java.util.Properties; import org.apache.commons.text.StrSubstitutor; -import org.apache.maven.shared.utils.StringUtils; import io.fabric8.maven.docker.access.DockerAccess; import io.fabric8.maven.docker.access.DockerAccessException; @@ -28,6 +27,7 @@ import io.fabric8.maven.docker.wait.WaitChecker; import io.fabric8.maven.docker.wait.WaitTimeoutException; import io.fabric8.maven.docker.wait.WaitUtil; +import org.codehaus.plexus.util.StringUtils; import static io.fabric8.maven.docker.StartMojo.DOCKER_START_CONTAINER_WAIT_TIMEOUT; diff --git a/src/main/java/io/fabric8/maven/docker/util/AuthConfigFactory.java b/src/main/java/io/fabric8/maven/docker/util/AuthConfigFactory.java index be6a0bbc7..c0056b4f6 100644 --- a/src/main/java/io/fabric8/maven/docker/util/AuthConfigFactory.java +++ b/src/main/java/io/fabric8/maven/docker/util/AuthConfigFactory.java @@ -35,8 +35,6 @@ import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest; import org.apache.maven.settings.crypto.SettingsDecrypter; import org.apache.maven.settings.crypto.SettingsDecryptionResult; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.xml.Xpp3Dom; import com.google.common.net.UrlEscapers; @@ -46,12 +44,18 @@ import io.fabric8.maven.docker.access.ecr.EcrExtendedAuth; import io.fabric8.maven.docker.util.aws.AwsSdkAuthConfigFactory; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + /** * Factory for creating docker specific authentication configuration * * @author roland * @since 29.07.14 */ +@Singleton +@Named public class AuthConfigFactory { // Whether to check for OpenShift authentication @@ -59,20 +63,21 @@ public class AuthConfigFactory { static final String DOCKER_LOGIN_DEFAULT_REGISTRY = "https://index.docker.io/v1/"; - private final PlexusContainer container; - private Logger log; private static final String[] DEFAULT_REGISTRIES = new String[]{ "docker.io", "index.docker.io", "registry.hub.docker.com" }; + private SettingsDecrypter settingsDecrypter; + /** * Constructor which should be used during startup phase of a plugin * - * @param container the container used for do decryption of passwords + * @param settingsDecrypter the settingsDecrypter used for do decryption of passwords */ - public AuthConfigFactory(PlexusContainer container) { - this.container = container; + @Inject + public AuthConfigFactory(SettingsDecrypter settingsDecrypter) { + this.settingsDecrypter = settingsDecrypter; } public void setLog(Logger log) { @@ -670,17 +675,12 @@ private Server checkForServer(Server server, String id, String registry, String } private String decrypt(String password) throws MojoExecutionException { - try { - SettingsDecrypter settingsDecrypter = container.lookup(SettingsDecrypter.class); - Server stub = new Server(); - stub.setUsername("whatever"); - stub.setPassword(password); + Server stub = new Server(); + stub.setUsername("whatever"); + stub.setPassword(password); - SettingsDecryptionResult result = settingsDecrypter.decrypt(new DefaultSettingsDecryptionRequest(stub)); - return result.getServers().get(0).getPassword(); - } catch (ComponentLookupException e) { - throw new MojoExecutionException("Error looking security dispatcher",e); - } + SettingsDecryptionResult result = settingsDecrypter.decrypt(new DefaultSettingsDecryptionRequest(stub)); + return result.getServers().get(0).getPassword(); } private AuthConfig createAuthConfigFromServer(Server server) throws MojoExecutionException { diff --git a/src/main/java/io/fabric8/maven/docker/util/EnvUtil.java b/src/main/java/io/fabric8/maven/docker/util/EnvUtil.java index 4861f39b8..7eddd8f40 100644 --- a/src/main/java/io/fabric8/maven/docker/util/EnvUtil.java +++ b/src/main/java/io/fabric8/maven/docker/util/EnvUtil.java @@ -4,19 +4,30 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; import java.util.concurrent.TimeUnit; import java.util.function.UnaryOperator; import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.google.common.base.*; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.utils.io.FileUtils; +import org.codehaus.plexus.util.FileUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/resources/META-INF/plexus/components.xml b/src/main/resources/META-INF/plexus/components.xml index 55aa9dc96..c5669db89 100644 --- a/src/main/resources/META-INF/plexus/components.xml +++ b/src/main/resources/META-INF/plexus/components.xml @@ -73,24 +73,4 @@ - - - - io.fabric8.maven.docker.config.handler.compose.DockerComposeConfigHandler - io.fabric8.maven.docker.config.handler.compose.DockerComposeConfigHandler - - - org.apache.maven.shared.filtering.MavenReaderFilter - readerFilter - - - false - - - io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler - io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler - false - - \ No newline at end of file diff --git a/src/test/java/io/fabric8/maven/docker/PushMojoBuildXTest.java b/src/test/java/io/fabric8/maven/docker/PushMojoBuildXTest.java index a7494977c..a7d69d960 100644 --- a/src/test/java/io/fabric8/maven/docker/PushMojoBuildXTest.java +++ b/src/test/java/io/fabric8/maven/docker/PushMojoBuildXTest.java @@ -5,6 +5,8 @@ import io.fabric8.maven.docker.config.BuildXConfiguration; import io.fabric8.maven.docker.config.ImageConfiguration; import io.fabric8.maven.docker.config.handler.ImageConfigResolver; +import io.fabric8.maven.docker.config.handler.compose.DockerComposeConfigHandler; +import io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler; import io.fabric8.maven.docker.service.BuildXService; import io.fabric8.maven.docker.service.DockerAccessFactory; import io.fabric8.maven.docker.service.ServiceHubFactory; @@ -15,9 +17,6 @@ import org.apache.maven.settings.Server; import org.apache.maven.settings.Settings; import org.apache.maven.settings.crypto.DefaultSettingsDecrypter; -import org.apache.maven.settings.crypto.SettingsDecrypter; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -57,14 +56,12 @@ class PushMojoBuildXTest { private MockedConstruction defaultExecMockedConstruction; @BeforeEach - void setup() throws MojoExecutionException, MojoFailureException, IOException, ComponentLookupException, SecDispatcherException { + void setup() throws MojoExecutionException, MojoFailureException, IOException, SecDispatcherException { mockedMavenSettings = mock(Settings.class); MavenProject mavenProject = mock(MavenProject.class, RETURNS_DEEP_STUBS); DockerAccessFactory dockerAccessFactory = mock(DockerAccessFactory.class); DockerAccess dockerAccess = mock(DockerAccess.class); - PlexusContainer mockedPlexusContainer = mock(PlexusContainer.class); SecDispatcher mockedSecDispatcher = mock(SecDispatcher.class); - when(mockedPlexusContainer.lookup(SettingsDecrypter.class)).thenReturn(new DefaultSettingsDecrypter(mockedSecDispatcher)); ServiceHubFactory serviceHubFactory = new ServiceHubFactory(); when(mockedMavenSettings.getInteractiveMode()).thenReturn(false); Properties properties = new Properties(); @@ -79,7 +76,6 @@ void setup() throws MojoExecutionException, MojoFailureException, IOException, C when(mavenProject.getBuild().getOutputDirectory()).thenReturn(targetDir.getAbsolutePath()); when(mavenProject.getBasedir()).thenReturn(temporaryFolder); when(dockerAccessFactory.createDockerAccess(any())).thenReturn(dockerAccess); - when(mockedPlexusContainer.lookup(SecDispatcher.ROLE, "maven")).thenReturn(mockedSecDispatcher); when(mockedSecDispatcher.decrypt(anyString())).thenReturn("testpassword"); Map pluginContext = new HashMap<>(); defaultExecMockedConstruction = mockConstruction(BuildXService.DefaultExec.class); @@ -88,8 +84,8 @@ void setup() throws MojoExecutionException, MojoFailureException, IOException, C pushMojo.verbose = "true"; pushMojo.settings = mockedMavenSettings; pushMojo.project = mavenProject; - pushMojo.authConfigFactory = new AuthConfigFactory(mockedPlexusContainer); - pushMojo.imageConfigResolver = new ImageConfigResolver(); + pushMojo.authConfigFactory = new AuthConfigFactory(new DefaultSettingsDecrypter(mockedSecDispatcher)); + pushMojo.imageConfigResolver = new ImageConfigResolver(Arrays.asList(new PropertyConfigHandler(), new DockerComposeConfigHandler())); pushMojo.dockerAccessFactory = dockerAccessFactory; pushMojo.serviceHubFactory = serviceHubFactory; pushMojo.outputDirectory = "target/docker"; diff --git a/src/test/java/io/fabric8/maven/docker/assembly/DockerAssemblyManagerTest.java b/src/test/java/io/fabric8/maven/docker/assembly/DockerAssemblyManagerTest.java index 2782186ee..c0fb98e07 100644 --- a/src/test/java/io/fabric8/maven/docker/assembly/DockerAssemblyManagerTest.java +++ b/src/test/java/io/fabric8/maven/docker/assembly/DockerAssemblyManagerTest.java @@ -112,7 +112,7 @@ void assemblyFiles(@TempDir Path tmpDir, assemblyManager.getAssemblyFiles("testImage", buildConfig.getAllAssemblyConfigurations().get(0), mojoParams, new AnsiLogger(new SystemStreamLog(), true, "build")); Mockito.verify(assemblyArchiver).createArchive(Mockito.eq(assembly), Mockito.eq("maven"), Mockito.eq("track"), Mockito.any(DockerAssemblyConfigurationSource.class), - Mockito.eq(false), Mockito.any()); + Mockito.any()); } @Test @@ -140,7 +140,7 @@ private void setupAssemblies(Path tmpDir, MavenProject project, MojoParameters Mockito.doAnswer(i -> tmpDir.resolve( (String) i.getArguments()[1]).toFile()) .when(assemblyArchiver) .createArchive(Mockito.any(Assembly.class), Mockito.anyString(), Mockito.anyString(), - Mockito.any(AssemblerConfigurationSource.class), Mockito.anyBoolean(), Mockito.any()); + Mockito.any(AssemblerConfigurationSource.class), Mockito.any()); Mockito.doReturn("target/").when(mojoParams).getOutputDirectory(); Mockito.doReturn(project).when(mojoParams).getProject(); diff --git a/src/test/java/io/fabric8/maven/docker/config/ImageConfigResolverTest.java b/src/test/java/io/fabric8/maven/docker/config/ImageConfigResolverTest.java index 1f0cc4ac8..79faa921a 100644 --- a/src/test/java/io/fabric8/maven/docker/config/ImageConfigResolverTest.java +++ b/src/test/java/io/fabric8/maven/docker/config/ImageConfigResolverTest.java @@ -19,10 +19,10 @@ import io.fabric8.maven.docker.config.handler.ExternalConfigHandler; import io.fabric8.maven.docker.config.handler.ImageConfigResolver; +import io.fabric8.maven.docker.config.handler.property.PropertyConfigHandler; import io.fabric8.maven.docker.util.Logger; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.ReflectionUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -31,6 +31,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -49,9 +50,7 @@ class ImageConfigResolverTest { @BeforeEach void setUp() throws Exception { - resolver = new ImageConfigResolver(); - ReflectionUtils.setVariableValueInObject(resolver, "propertyConfigHandler", new TestHandler(3)); - resolver.initialize(); + resolver = new ImageConfigResolver(Arrays.asList(new TestHandler(PropertyConfigHandler.TYPE_NAME, 3), new TestHandler("test", 3))); resolver.setLog(log); } @@ -108,15 +107,17 @@ void unknownType() { private static class TestHandler implements ExternalConfigHandler { - int nr; + final String typeName; + final int nr; - public TestHandler(int nr) { + public TestHandler(String typeName, int nr) { + this.typeName = typeName; this.nr = nr; } @Override public String getType() { - return "test"; + return typeName; } @Override diff --git a/src/test/java/io/fabric8/maven/docker/util/AuthConfigFactoryTest.java b/src/test/java/io/fabric8/maven/docker/util/AuthConfigFactoryTest.java index 20858291e..1d34ea6a2 100644 --- a/src/test/java/io/fabric8/maven/docker/util/AuthConfigFactoryTest.java +++ b/src/test/java/io/fabric8/maven/docker/util/AuthConfigFactoryTest.java @@ -15,9 +15,6 @@ import org.apache.maven.settings.Server; import org.apache.maven.settings.Settings; import org.apache.maven.settings.crypto.DefaultSettingsDecrypter; -import org.apache.maven.settings.crypto.SettingsDecrypter; -import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.util.Base64; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.xml.Xpp3Dom; @@ -95,18 +92,14 @@ public String decrypt(String password) { } } - @Mock - PlexusContainer container; - @Mock SecDispatcher secDispatcher; @BeforeEach - void containerSetup() throws ComponentLookupException, SecDispatcherException { - Mockito.lenient().when(container.lookup(SettingsDecrypter.class)).thenReturn(new DefaultSettingsDecrypter(secDispatcher)); + void containerSetup() throws SecDispatcherException { Mockito.lenient().when(secDispatcher.decrypt(Mockito.anyString())).thenAnswer(invocation -> invocation.getArguments()[0]); - factory = new AuthConfigFactory(container); + factory = new AuthConfigFactory(new DefaultSettingsDecrypter(secDispatcher)); factory.setLog(log); gsonBuilder = new GsonBuilder();