diff --git a/maven/impl-projects/src/main/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilder.java b/maven/impl-projects/src/main/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilder.java index b6fc56f440..7ec4caf0a9 100644 --- a/maven/impl-projects/src/main/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilder.java +++ b/maven/impl-projects/src/main/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilder.java @@ -30,6 +30,7 @@ public class MavenProjectBuilder implements ProjectBuilder private boolean runTests = true; private boolean quiet; + private final List profiles = new ArrayList<>(); private final List args = new ArrayList<>(); public MavenProjectBuilder(final Environment environment, final Project project) @@ -59,6 +60,14 @@ public ProjectBuilder quiet(boolean quiet) return this; } + @Override + public ProjectBuilder profiles(String... profiles) + { + this.profiles.clear(); + this.profiles.addAll(Arrays.asList(profiles)); + return this; + } + @Override public Resource build() { @@ -94,6 +103,10 @@ public Resource build(PrintStream out, PrintStream err) throws BuildException { selected.add("-q"); } + if (profiles.size() > 0) + { + selected.add("-P" + String.join(",", profiles)); + } boolean success = project.getFacet(MavenFacet.class).executeMavenEmbedded(selected, out, err); if (success) diff --git a/maven/tests/pom.xml b/maven/tests/pom.xml index 7cefa13393..beb6cbb38c 100644 --- a/maven/tests/pom.xml +++ b/maven/tests/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.jboss.forge.addon @@ -64,9 +65,9 @@ - org.assertj - assertj-core - 1.7.1 + org.jboss.forge.addon + assertj + forge-addon test diff --git a/maven/tests/src/test/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilderTest.java b/maven/tests/src/test/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilderTest.java new file mode 100644 index 0000000000..0fcf77fde4 --- /dev/null +++ b/maven/tests/src/test/java/org/jboss/forge/addon/maven/projects/MavenProjectBuilderTest.java @@ -0,0 +1,60 @@ +/* + * Copyright 2017 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ + +package org.jboss.forge.addon.maven.projects; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.forge.addon.projects.Project; +import org.jboss.forge.addon.projects.ProjectFactory; +import org.jboss.forge.addon.projects.building.ProjectBuilder; +import org.jboss.forge.addon.projects.facets.PackagingFacet; +import org.jboss.forge.furnace.container.simple.lifecycle.SimpleContainer; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * + * @author George Gastaldi + */ +@RunWith(Arquillian.class) +public class MavenProjectBuilderTest +{ + + private ProjectFactory projectFactory; + + @Before + public void setUp() + { + projectFactory = SimpleContainer.getServices(getClass().getClassLoader(), ProjectFactory.class).get(); + } + + /** + * Test method for {@link org.jboss.forge.addon.maven.projects.MavenProjectBuilder#build()}. + */ + @Test + public void testBuild() throws Exception + { + Project project = projectFactory.createTempProject(); + ProjectBuilder projectBuilder = project.getFacet(PackagingFacet.class).createBuilder(); + projectBuilder.profiles("foo", "bar"); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + projectBuilder.build(new PrintStream(out, true), new PrintStream(err, true)); + assertThat(out.toString()).contains("BUILD SUCCESS", + "[WARNING] The requested profile \"foo\" could not be activated because it does not exist.", + "[WARNING] The requested profile \"bar\" could not be activated because it does not exist."); + assertThat(err.toString()).isEmpty(); + + } + +} diff --git a/projects/api/src/main/java/org/jboss/forge/addon/projects/building/ProjectBuilder.java b/projects/api/src/main/java/org/jboss/forge/addon/projects/building/ProjectBuilder.java index 526b1075de..b70928f770 100644 --- a/projects/api/src/main/java/org/jboss/forge/addon/projects/building/ProjectBuilder.java +++ b/projects/api/src/main/java/org/jboss/forge/addon/projects/building/ProjectBuilder.java @@ -27,6 +27,15 @@ public interface ProjectBuilder */ ProjectBuilder runTests(boolean test); + /** + * Profiles to be enabled for this build (ignored if not applicable to the project build system) + */ + default ProjectBuilder profiles(String... profiles) + { + // Default implementation is a NOOP + return this; + } + /** * Execute the build, returning the final product as a {@link Resource}. */ diff --git a/projects/impl/src/main/java/org/jboss/forge/addon/projects/ui/BuildCommand.java b/projects/impl/src/main/java/org/jboss/forge/addon/projects/ui/BuildCommand.java index d9338ec574..395d97ebbe 100644 --- a/projects/impl/src/main/java/org/jboss/forge/addon/projects/ui/BuildCommand.java +++ b/projects/impl/src/main/java/org/jboss/forge/addon/projects/ui/BuildCommand.java @@ -27,6 +27,7 @@ import org.jboss.forge.addon.ui.util.Categories; import org.jboss.forge.addon.ui.util.Metadata; import org.jboss.forge.furnace.container.simple.lifecycle.SimpleContainer; +import org.jboss.forge.furnace.util.Lists; /** * Executes Build commands @@ -39,7 +40,7 @@ public class BuildCommand extends AbstractProjectCommand private UIInputMany arguments; private UIInput notest; private UIInput quiet; - private UIInput profile; + private UIInputMany profile; @Override public void initializeUI(UIBuilder builder) throws Exception @@ -48,7 +49,7 @@ public void initializeUI(UIBuilder builder) throws Exception arguments = factory.createInputMany("arguments", String.class); notest = factory.createInput("notest", Boolean.class).setLabel("No Test"); quiet = factory.createInput("quiet", 'q', Boolean.class).setLabel("Quiet").setDescription("Quiet output"); - profile = factory.createInput("profile", String.class); + profile = factory.createInputMany("profile", String.class); builder.add(arguments).add(profile).add(notest).add(quiet); } @@ -69,7 +70,7 @@ public Result execute(UIExecutionContext context) throws Exception if (arguments.getValue() != null && arguments.getValue().iterator().hasNext()) { - List args = new ArrayList(); + List args = new ArrayList<>(); for (String val : arguments.getValue()) { args.add(val); @@ -84,7 +85,8 @@ public Result execute(UIExecutionContext context) throws Exception if (profile.hasValue()) { - builder.addArguments("-P" + profile.getValue()); + List list = Lists.toList(profile.getValue()); + builder.profiles(list.toArray(new String[list.size()])); } builder.quiet(quiet.getValue());