Skip to content

Commit

Permalink
SHRINKRES-277 Upgraded to maven-invoker 3.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
MatousJobanek committed Jul 21, 2017
1 parent 7793570 commit c516230
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 70 deletions.
Expand Up @@ -21,6 +21,7 @@
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.InvokerLogger;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.BuildStage;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.BuiltProject;
Expand All @@ -33,12 +34,13 @@ public interface ConfigurationStage<DIST_OR_CONFIG extends ConfigurationStage, D
extends BuildStage<DAEMON_TRIGGER_TYPE> {

/**
* Sets the interaction mode of the Maven invocation. Inverse equivalent of -B and --batch-mode
* Sets the interaction mode of the Maven invocation. Equivalent of {@code -B} and {@code --batch-mode}
*
* @param interactive true if Maven should be executed in interactive mode, false if the batch mode is used.
* @param batchMode <code>true</code> if Maven should be executed in non-interactive mode, <code>false</code> if the
* interactive modes is used.
* @return Modified instance of EmbeddedMaven
*/
DIST_OR_CONFIG setInteractive(boolean interactive);
DIST_OR_CONFIG setBatchMode(boolean batchMode);

/**
* Sets the network mode of the Maven invocation. Equivalent of -o and --offline
Expand Down Expand Up @@ -73,21 +75,23 @@ public interface ConfigurationStage<DIST_OR_CONFIG extends ConfigurationStage, D
DIST_OR_CONFIG setUpdateSnapshots(boolean updateSnapshots);

/**
* Sets the failure mode of the Maven invocation. Equivalent of -ff and --fail-fast, -fae and --fail-at-end, -fn and --fail-never
* Sets the failure mode of the Maven invocation. Equivalent of {@code -ff} and {@code --fail-fast}, {@code -fae}
* and {@code --fail-at-end}, {@code -fn} and {@code --fail-never}
*
* @param failureBehavior The failure mode, must be one of {@link REACTOR_FAIL_FAST}, {@link REACTOR_FAIL_AT_END} and {@link REACTOR_FAIL_NEVER}.
* @param failureBehavior The failure mode, must be one of {@link InvocationRequest.ReactorFailureBehavior#FailFast},
* {@link InvocationRequest.ReactorFailureBehavior#FailAtEnd} and {@link InvocationRequest.ReactorFailureBehavior#FailNever}.
* @return Modified instance of EmbeddedMaven
*/
DIST_OR_CONFIG setFailureBehavior(String failureBehavior);
DIST_OR_CONFIG setReactorFailureBehavior(InvocationRequest.ReactorFailureBehavior reactorFailureBehavior);

/**
* Dynamically constructs a reactor using the subdirectories of the current directory
* The id of the build strategy to use. equivalent of {@code --builder id}. <b>Note. This is available since Maven
* 3.2.1</b>
*
* @param includes a list of filename patterns to include, or null, in which case the default is *&#47;pom.xml
* @param excludes a list of filename patterns to exclude, or null, in which case nothing is excluded
* @param id The builder id.
* @return Modified instance of EmbeddedMaven
*/
DIST_OR_CONFIG activateReactor(String[] includes, String[] excludes);
DIST_OR_CONFIG setBuilder(String id);

/**
* Sets the path to the base directory of the local repository to use for the Maven invocation.
Expand Down Expand Up @@ -220,12 +224,24 @@ public interface ConfigurationStage<DIST_OR_CONFIG extends ConfigurationStage, D
DIST_OR_CONFIG setToolchainsFile(File toolchainsFile);

/**
* Sets the checksum mode of the Maven invocation. Equivalent of -c or --lax-checksums, -C or --strict-checksums
* Sets the alternate path for the global toolchains file Equivalent of {@code -gt} or {@code --global-toolchains}
*
* @param globalChecksumPolicy The checksum mode, must be one of ${@link CHECKSUM_POLICY_WARN} and ${@link CHECKSUM_POLICY_FAIL}.
* @param toolchains
* the alternate path for the global toolchains file
*
* @return Modified instance of EmbeddedMaven
*/
DIST_OR_CONFIG setGlobalToolchainsFile(File toolchains);

/**
* Sets the checksum mode of the Maven invocation. Equivalent of {@code -c} or {@code --lax-checksums}, {@code -C}
* or {@code --strict-checksums}
*
* @param globalChecksumPolicy The checksum mode, must be one of {@link InvocationRequest.CheckSumPolicy#Warn} and
* {@link InvocationRequest.CheckSumPolicy#Fail}.
* @return Modified instance of EmbeddedMaven
*/
DIST_OR_CONFIG setGlobalChecksumPolicy(String globalChecksumPolicy);
DIST_OR_CONFIG setGlobalChecksumPolicy(InvocationRequest.CheckSumPolicy globalChecksumPolicy);

/**
* Specifies whether Maven should check for plugin updates.
Expand Down
1 change: 0 additions & 1 deletion maven/impl-maven-embedded/pom.xml
Expand Up @@ -14,7 +14,6 @@
<description>Implementation for running Maven builds and retrieving information and archives from the built project</description>

<properties>
<version.maven.invoker>2.2</version.maven.invoker>
<version.arquillian.spacelift>1.0.0.Alpha8</version.arquillian.spacelift>
<version.assertj>2.7.0</version.assertj>
<version.awaitility>3.0.0</version.awaitility>
Expand Down
Expand Up @@ -11,6 +11,9 @@
import org.jboss.shrinkwrap.resolver.api.maven.embedded.pom.equipped.ConfigurationStage;
import org.jboss.shrinkwrap.resolver.impl.maven.embedded.BuildStageImpl;

import static org.apache.maven.shared.invoker.InvocationRequest.CheckSumPolicy;
import static org.apache.maven.shared.invoker.InvocationRequest.ReactorFailureBehavior;

/**
* @author <a href="mailto:mjobanek@redhat.com">Matous Jobanek</a>
*/
Expand All @@ -21,8 +24,8 @@ public abstract class ConfigurationStageImpl extends
private boolean skipTests = true;

@Override
public ConfigurationDistributionStage setInteractive(boolean interactive) {
getInvocationRequest().setInteractive(interactive);
public ConfigurationDistributionStage setBatchMode(boolean batchMode) {
getInvocationRequest().setBatchMode(batchMode);
return this;
}

Expand Down Expand Up @@ -51,14 +54,14 @@ public ConfigurationDistributionStage setUpdateSnapshots(boolean updateSnapshots
}

@Override
public ConfigurationDistributionStage setFailureBehavior(String failureBehavior) {
getInvocationRequest().setFailureBehavior(failureBehavior);
public ConfigurationDistributionStage setReactorFailureBehavior(ReactorFailureBehavior reactorFailureBehavior) {
getInvocationRequest().setReactorFailureBehavior(reactorFailureBehavior);
return this;
}

@Override
public ConfigurationDistributionStage activateReactor(String[] includes, String[] excludes) {
getInvocationRequest().activateReactor(includes, excludes);
public ConfigurationDistributionStage setBuilder(String id) {
getInvocationRequest().setBuilder(id);
return this;
}

Expand Down Expand Up @@ -163,7 +166,13 @@ public ConfigurationDistributionStage setToolchainsFile(File toolchainsFile) {
}

@Override
public ConfigurationDistributionStage setGlobalChecksumPolicy(String globalChecksumPolicy) {
public ConfigurationDistributionStage setGlobalToolchainsFile(File toolchains) {
getInvocationRequest().setGlobalToolchainsFile(toolchains);
return this;
}

@Override
public ConfigurationDistributionStage setGlobalChecksumPolicy(CheckSumPolicy globalChecksumPolicy) {
getInvocationRequest().setGlobalChecksumPolicy(globalChecksumPolicy);
return this;
}
Expand Down
Expand Up @@ -3,23 +3,21 @@
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.InvokerLogger;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.pom.equipped.ConfigurationStage;
import org.assertj.core.api.JUnitSoftAssertions;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.EmbeddedMaven;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.pom.equipped.ConfigurationStage;
import org.jboss.shrinkwrap.resolver.impl.maven.embedded.pom.equipped.ConfigurationStageImpl;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;

import static org.jboss.shrinkwrap.resolver.impl.maven.embedded.Utils.pathToJarSamplePom;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

/**
* @author <a href="mailto:mjobanek@redhat.com">Matous Jobanek</a>
Expand All @@ -37,8 +35,8 @@ public class ConfigurationStageTestCase {
put("shellEnvName1", "shellEnvValue1");
put("shellEnvName2", "shellEnvValue2");
}};
String failureBehavior = "failureBehavior";
String globalChecksumPolicy = "globalChecksumPolicy";
InvocationRequest.ReactorFailureBehavior failureBehavior = InvocationRequest.ReactorFailureBehavior.FailNever;
InvocationRequest.CheckSumPolicy globalChecksumPolicy = InvocationRequest.CheckSumPolicy.Warn;
InputStream inputStream = new ByteArrayInputStream(new byte[] {});
File globalSettingFile = new File("globalSettingFile");
File javaHome = new File("javaHome");
Expand All @@ -49,10 +47,15 @@ public class ConfigurationStageTestCase {
String[] projects = new String[] { "project1", "project2" };
String resumeFrom = "resumeFrom";
String threads = "8.0C";
String builderId = "builderId";
File toolChainsFile = new File("toolChainsFile");
File globalToolChainsFile = new File("globalToolChainsFile");
File userSettingFile = new File("userSettingFile");
File workingDirectory = new File("workingDirectory");

@Rule
public final JUnitSoftAssertions softly = new JUnitSoftAssertions();

@Test
public void runTest() {
ConfigurationStageImpl configurationStageImpl = getConfigurationStageImpl();
Expand All @@ -61,46 +64,45 @@ public void runTest() {
InvocationRequest invocationRequest = configurationStageImpl.getInvocationRequest();

properties.put("skipTests", "true");
assertEquals(properties, invocationRequest.getProperties());
assertEquals(Arrays.asList(profiles), invocationRequest.getProfiles());
assertEquals(excludes, invocationRequest.getActivatedReactorExcludes());
assertEquals(includes, invocationRequest.getActivatedReactorIncludes());
assertEquals(failureBehavior, invocationRequest.getFailureBehavior());
assertEquals(globalChecksumPolicy, invocationRequest.getGlobalChecksumPolicy());
assertEquals(globalSettingFile, invocationRequest.getGlobalSettingsFile());
assertEquals(Arrays.asList(goals), invocationRequest.getGoals());
assertEquals(inputStream, invocationRequest.getInputStream(null));
assertEquals(javaHome, invocationRequest.getJavaHome());
assertEquals(localRepositoryDirectory, invocationRequest.getLocalRepositoryDirectory(null));
assertEquals(mavenOpts, invocationRequest.getMavenOpts());
softly.assertThat(invocationRequest.getProperties()).isEqualTo(properties);
softly.assertThat(invocationRequest.getProfiles()).containsExactly(profiles);
softly.assertThat(invocationRequest.getReactorFailureBehavior()).isEqualTo(failureBehavior);
softly.assertThat(invocationRequest.getGlobalChecksumPolicy()).isEqualTo(globalChecksumPolicy);
softly.assertThat(invocationRequest.getGlobalSettingsFile()).isEqualTo(globalSettingFile);
softly.assertThat(invocationRequest.getGoals()).containsExactly(goals);
softly.assertThat(invocationRequest.getInputStream(null)).isEqualTo(inputStream);
softly.assertThat(invocationRequest.getJavaHome()).isEqualTo(javaHome);
softly.assertThat(invocationRequest.getLocalRepositoryDirectory(null)).isEqualTo(localRepositoryDirectory);
softly.assertThat(invocationRequest.getMavenOpts()).isEqualTo(mavenOpts);
File jarSamplePom = new File(pathToJarSamplePom);
assertEquals(jarSamplePom.getAbsoluteFile(), invocationRequest.getPomFile());
assertEquals(Arrays.asList(profiles), invocationRequest.getProfiles());
assertEquals(Arrays.asList(projects), invocationRequest.getProjects());
assertEquals(resumeFrom, invocationRequest.getResumeFrom());
assertEquals(shellEnvironments, invocationRequest.getShellEnvironments());
assertEquals(threads, invocationRequest.getThreads());
assertEquals(toolChainsFile, invocationRequest.getToolchainsFile());
assertEquals(userSettingFile, invocationRequest.getUserSettingsFile());
assertEquals(true, invocationRequest.isActivatedReactor());
assertEquals(true, invocationRequest.isAlsoMake());
assertEquals(true, invocationRequest.isAlsoMakeDependents());
assertEquals(true, invocationRequest.isDebug());
assertEquals(true, invocationRequest.isInteractive());
assertEquals(true, invocationRequest.isNonPluginUpdates());
assertEquals(true, invocationRequest.isOffline());
assertEquals(true, invocationRequest.isRecursive());
assertEquals(true, invocationRequest.isShellEnvironmentInherited());
assertEquals(true, invocationRequest.isShowErrors());
assertEquals(true, invocationRequest.isShowVersion());
assertEquals(true, invocationRequest.isUpdateSnapshots());
softly.assertThat(invocationRequest.getPomFile()).isEqualTo(jarSamplePom.getAbsoluteFile());
softly.assertThat(invocationRequest.getProfiles()).containsExactly(profiles);
softly.assertThat(invocationRequest.getProjects()).containsExactly(projects);
softly.assertThat(invocationRequest.getResumeFrom()).isEqualTo(resumeFrom);
softly.assertThat(invocationRequest.getShellEnvironments()).isEqualTo(shellEnvironments);
softly.assertThat(invocationRequest.getThreads()).isEqualTo(threads);
softly.assertThat(invocationRequest.getToolchainsFile()).isEqualTo(toolChainsFile);
softly.assertThat(invocationRequest.getGlobalToolchainsFile()).isEqualTo(globalToolChainsFile);
softly.assertThat(invocationRequest.getUserSettingsFile()).isEqualTo(userSettingFile);
softly.assertThat(invocationRequest.getBuilder()).isEqualTo(builderId);
softly.assertThat(invocationRequest.isAlsoMake()).isTrue();
softly.assertThat(invocationRequest.isAlsoMakeDependents()).isTrue();
softly.assertThat(invocationRequest.isDebug()).isTrue();
softly.assertThat(invocationRequest.isBatchMode()).isTrue();
softly.assertThat(invocationRequest.isNonPluginUpdates()).isTrue();
softly.assertThat(invocationRequest.isOffline()).isTrue();
softly.assertThat(invocationRequest.isRecursive()).isTrue();
softly.assertThat(invocationRequest.isShellEnvironmentInherited()).isTrue();
softly.assertThat(invocationRequest.isShowErrors()).isTrue();
softly.assertThat(invocationRequest.isShowVersion()).isTrue();
softly.assertThat(invocationRequest.isUpdateSnapshots()).isTrue();

// invoker validation
Invoker invoker = configurationStageImpl.getInvoker();

assertEquals(invokerLogger, invoker.getLogger());
assertEquals(localRepositoryDirectory, invoker.getLocalRepositoryDirectory());
assertEquals(workingDirectory, invoker.getWorkingDirectory());
softly.assertThat(invoker.getLogger()).isEqualTo(invokerLogger);
softly.assertThat(invoker.getLocalRepositoryDirectory()).isEqualTo(localRepositoryDirectory);
softly.assertThat(invoker.getWorkingDirectory()).isEqualTo(workingDirectory);

boolean hasFailed = false;
try {
Expand All @@ -112,28 +114,27 @@ public void runTest() {
Assert.fail("Maven build execution should fail as the local repository location is NOT a directory");
}

assertNotNull(invoker.getMavenHome());
assertEquals("apache-maven-3.3.9", invoker.getMavenHome().getName());
softly.assertThat(invoker.getMavenHome()).isNotNull();
softly.assertThat(invoker.getMavenHome().getName()).isEqualTo("apache-maven-3.3.9");
}

private ConfigurationStageImpl getConfigurationStageImpl() {
ConfigurationStage configurationStage =
EmbeddedMaven.forProject(pathToJarSamplePom)
.useMaven3Version("3.3.9")
.setGoals(goals)
.activateReactor(includes, excludes)
.addProperty("propertyKey1", properties.getProperty("propertyKey1"))
.addProperty("propertyKey2", properties.getProperty("propertyKey2"))
.addShellEnvironment("shellEnvName1", shellEnvironments.get("shellEnvName1"))
.addShellEnvironment("shellEnvName2", shellEnvironments.get("shellEnvName2"))
.setAlsoMake(true)
.setAlsoMakeDependents(true)
.setDebug(true)
.setFailureBehavior(failureBehavior)
.setReactorFailureBehavior(failureBehavior)
.setGlobalChecksumPolicy(globalChecksumPolicy)
.setInputStream(inputStream)
.setGlobalSettingsFile(globalSettingFile)
.setInteractive(true)
.setBatchMode(true)
.setJavaHome(javaHome)
.setLocalRepositoryDirectory(localRepositoryDirectory)
.setLogger(invokerLogger)
Expand All @@ -149,10 +150,12 @@ private ConfigurationStageImpl getConfigurationStageImpl() {
.setShowVersion(true)
.setThreads(threads)
.setToolchainsFile(toolChainsFile)
.setGlobalToolchainsFile(globalToolChainsFile)
.setUpdateSnapshots(true)
.setRecursive(true)
.setUserSettingsFile(userSettingFile)
.setWorkingDirectory(workingDirectory);
.setWorkingDirectory(workingDirectory)
.setBuilder(builderId);

return (ConfigurationStageImpl) configurationStage;
}
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -38,7 +38,7 @@
<version.org.jboss.shrinkwrap>1.2.6</version.org.jboss.shrinkwrap>
<version.org.codehaus.plexus.compiler.javac>2.7</version.org.codehaus.plexus.compiler.javac>
<version.gradle-tooling-api>3.3</version.gradle-tooling-api>
<version.maven.invoker>2.2</version.maven.invoker>
<version.maven.invoker>3.0.0</version.maven.invoker>

<!-- Versions of test dependencies -->
<version.junit_junit>4.12</version.junit_junit>
Expand Down

0 comments on commit c516230

Please sign in to comment.