org.eclipse.jkube.kit.build.maven.assembly.DockerAssemblyConfigurationSource Maven / Gradle / Ivy
The newest version!
/**
* Copyright (c) 2019 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at:
*
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.jkube.kit.build.maven.assembly;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import javax.annotation.Nonnull;
import org.apache.maven.plugins.assembly.model.Assembly;
import org.eclipse.jkube.kit.build.maven.MavenBuildContext;
import org.eclipse.jkube.kit.build.maven.config.MavenAssemblyConfiguration;
import org.eclipse.jkube.kit.config.image.build.AssemblyConfiguration;
import org.apache.maven.archiver.MavenArchiveConfiguration;
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.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;
/**
* @author roland
* @since 07.05.14
*/
public class DockerAssemblyConfigurationSource implements AssemblerConfigurationSource {
private final MavenAssemblyConfiguration assemblyConfig;
private final MavenBuildContext context;
private final BuildDirs buildDirs;
// Required by configuration source and duplicated from AbstractAssemblyMojo (which is unfortunately
// not extracted to be usable
private FixedStringSearchInterpolator commandLinePropertiesInterpolator;
private FixedStringSearchInterpolator envInterpolator;
private FixedStringSearchInterpolator rootInterpolator;
private FixedStringSearchInterpolator mainProjectInterpolator;
public DockerAssemblyConfigurationSource(
MavenBuildContext context, BuildDirs buildDirs, MavenAssemblyConfiguration assemblyConfig) {
this.context = context;
this.assemblyConfig = assemblyConfig;
this.buildDirs = buildDirs;
}
@Override
public String[] getDescriptors() {
if (assemblyConfig != null) {
String descriptor = assemblyConfig.getDescriptor();
if (descriptor != null) {
return new String[] {
context.inSourceDir(descriptor).getAbsolutePath() };
}
}
return new String[0];
}
@Override
public String[] getDescriptorReferences() {
if (assemblyConfig != null) {
String descriptorRef = assemblyConfig.getDescriptorRef();
if (descriptorRef != null) {
return new String[]{descriptorRef};
}
}
return null;
}
// ============================================================================================
@Override
public File getOutputDirectory() {
return buildDirs.getOutputDirectory();
}
@Override
public File getWorkingDirectory() {
return buildDirs.getWorkingDirectory();
}
// X
@Override
public File getTemporaryRootDirectory() {
return buildDirs.getTemporaryRootDirectory();
}
@Override
public String getFinalName() {
//return params.getProject().getBuild().getFinalName();
return ".";
}
@Override
public ArtifactRepository getLocalRepository() {
return context.getSession().getLocalRepository();
}
public MavenFileFilter getMavenFileFilter() {
return context.getMavenFileFilter();
}
// Maybe use injection
@Override
public List getReactorProjects() {
return context.getReactorProjects();
}
// Maybe use injection
@Override
public List getRemoteRepositories() {
return context.getProject().getRemoteArtifactRepositories();
}
@Override
public MavenSession getMavenSession() {
return context.getSession();
}
@Override
public MavenArchiveConfiguration getJarArchiveConfiguration() {
return context.getArchiveConfiguration();
}
// X
@Override
public String getEncoding() {
return context.getProject().getProperties().getProperty("project.build.sourceEncoding");
}
// X
@Override
public String getEscapeString() {
return null;
}
@Override
public List getDelimiters() {
return null;
}
@Nonnull
public FixedStringSearchInterpolator getCommandLinePropsInterpolator()
{
if (commandLinePropertiesInterpolator == null) {
this.commandLinePropertiesInterpolator = createCommandLinePropertiesInterpolator();
}
return commandLinePropertiesInterpolator;
}
@Nonnull
public FixedStringSearchInterpolator getEnvInterpolator()
{
if (envInterpolator == null) {
this.envInterpolator = createEnvInterpolator();
}
return envInterpolator;
}
@Nonnull
public FixedStringSearchInterpolator getRepositoryInterpolator()
{
if (rootInterpolator == null) {
this.rootInterpolator = createRepositoryInterpolator();
}
return rootInterpolator;
}
@Nonnull
public FixedStringSearchInterpolator getMainProjectInterpolator()
{
if (mainProjectInterpolator == null) {
this.mainProjectInterpolator = mainProjectInterpolator(getProject());
}
return mainProjectInterpolator;
}
// X
@Override
public MavenProject getProject() {
return context.getProject();
}
// X
@Override
public File getBasedir() {
return context.getProject().getBasedir();
}
// X
@Override
public boolean isIgnoreDirFormatExtensions() {
return true;
}
// X
@Override
public boolean isDryRun() {
return false;
}
// X
@Override
public List getFilters() {
return Collections.emptyList();
}
@Override
public boolean isIncludeProjectBuildFilters() {
return true;
}
// X
@Override
public File getDescriptorSourceDirectory() {
return null;
}
// X
@Override
public File getArchiveBaseDirectory() {
return null;
}
// X
@Override
public String getTarLongFileMode() {
return assemblyConfig.getTarLongFileMode() == null ? "warn" : assemblyConfig.getTarLongFileMode();
}
// X
@Override
public File getSiteDirectory() {
return null;
}
// X
@Override
public boolean isAssemblyIdAppended() {
return false;
}
// X
@Override
public boolean isIgnoreMissingDescriptor() {
return false;
}
// X: (maybe inject MavenArchiveConfiguration)
@Override
public String getArchiverConfig() {
return null;
}
@Override
public MavenReaderFilter getMavenReaderFilter() {
return context.getMavenReaderFilter();
}
@Override
public boolean isUpdateOnly() {
return false;
}
@Override
public boolean isUseJvmChmod() {
return false;
}
@Override
public boolean isIgnorePermissions() {
return
assemblyConfig != null &&
assemblyConfig.getPermissions() != null &&
assemblyConfig.getPermissions() == AssemblyConfiguration.PermissionMode.ignore;
}
// =======================================================================
// Taken from AbstractAssemblyMojo
private FixedStringSearchInterpolator mainProjectInterpolator(MavenProject mainProject)
{
if (mainProject != null) {
// 5
return FixedStringSearchInterpolator.create(
new org.codehaus.plexus.interpolation.fixed.PrefixedObjectValueSource(
InterpolationConstants.PROJECT_PREFIXES, mainProject, true ),
// 6
new PrefixedPropertiesValueSource(
InterpolationConstants.PROJECT_PROPERTIES_PREFIXES, mainProject.getProperties(), true ) );
}
else {
return FixedStringSearchInterpolator.empty();
}
}
private FixedStringSearchInterpolator createRepositoryInterpolator()
{
final Properties settingsProperties = new Properties();
final MavenSession session = getMavenSession();
if (getLocalRepository() != null) {
settingsProperties.setProperty("localRepository", getLocalRepository().getBasedir());
settingsProperties.setProperty("settings.localRepository", getLocalRepository().getBasedir());
}
else if (session != null && session.getSettings() != null) {
settingsProperties.setProperty("localRepository", session.getSettings().getLocalRepository() );
settingsProperties.setProperty("settings.localRepository", getLocalRepository().getBasedir() );
}
return FixedStringSearchInterpolator.create(new PropertiesBasedValueSource(settingsProperties));
}
private FixedStringSearchInterpolator createCommandLinePropertiesInterpolator()
{
Properties commandLineProperties = System.getProperties();
final MavenSession session = getMavenSession();
if (session != null) {
commandLineProperties = new Properties();
if (session.getSystemProperties() != null) {
commandLineProperties.putAll(session.getSystemProperties());
}
if (session.getUserProperties() != null) {
commandLineProperties.putAll(session.getUserProperties());
}
}
PropertiesBasedValueSource cliProps = new PropertiesBasedValueSource( commandLineProperties );
return FixedStringSearchInterpolator.create( cliProps );
}
private FixedStringSearchInterpolator createEnvInterpolator() {
PrefixedPropertiesValueSource envProps = new PrefixedPropertiesValueSource(Collections.singletonList("env."),
CommandLineUtils.getSystemEnvVars(false), true );
return FixedStringSearchInterpolator.create( envProps );
}
}