/* * Copyright 2016 JBoss, by Red Hat, Inc * * Licensed 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. */ package org.guvnor.ala.build.maven.util; import java.io.File; import java.io.PrintStream; import java.util.Arrays; import java.util.Properties; import org.apache.maven.execution.MavenExecutionResult; import org.guvnor.ala.exceptions.BuildException; import org.kie.scanner.embedder.MavenEmbedder; import org.kie.scanner.embedder.MavenEmbedderException; import org.kie.scanner.embedder.MavenProjectLoader; import org.kie.scanner.embedder.MavenRequest; import org.slf4j.LoggerFactory; public final class MavenBuildExecutor { protected static final org.slf4j.Logger LOG = LoggerFactory.getLogger( MavenBuildExecutor.class ); private MavenBuildExecutor() { } public static void executeMaven( final File pom, final Properties properties, final String... goals ) { executeMaven( pom, System.out, System.err, properties, goals ); } public static void executeMaven( final File pom, final PrintStream stdout, final PrintStream stderr, final Properties properties, final String... goals ) { final PrintStream oldout = System.out; final PrintStream olderr = System.err; final Properties oldProperties = System.getProperties(); if ( properties != null ) { properties.keySet().forEach( (o) -> { if ( properties.getProperty( ( String ) o ) != null ) { System.setProperty( ( String ) o, properties.getProperty( ( String ) o ) ); } } ); } final MavenEmbedder mavenEmbedder = newMavenEmbedder(); try { if ( stdout != null ) { System.setOut( stdout ); } if ( stderr != null ) { System.setErr( stderr ); } final MavenRequest mavenRequest = MavenProjectLoader.createMavenRequest( false ); mavenRequest.setGoals( Arrays.asList( goals ) ); mavenRequest.setPom( pom.getAbsolutePath() ); final MavenExecutionResult result = mavenEmbedder.execute( mavenRequest ); if ( result.hasExceptions() ) { for ( Throwable t : result.getExceptions() ) { LOG.error( "Error Running Maven", t ); } throw new BuildException( "Maven found issues trying to build the pom file: " + pom.getAbsolutePath() + ". Look at the Error Logs for more information" ); } } catch ( final MavenEmbedderException ex ) { throw new BuildException( "Maven coudn't build the project for pom file: " + pom.getAbsolutePath(), ex ); } finally { System.setProperties( oldProperties ); mavenEmbedder.dispose(); System.setOut( oldout ); System.setErr( olderr ); } } private static MavenEmbedder newMavenEmbedder() { MavenEmbedder mavenEmbedder; try { mavenEmbedder = new MavenEmbedder( MavenProjectLoader.createMavenRequest( false ) ); } catch ( MavenEmbedderException e ) { throw new RuntimeException( e ); } return mavenEmbedder; } }