/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ // // $Id$ // package buildharness.commands import buildharness.util.* class maven extends CommandSupport { /** The path for JAVA_HOME. */ def javaHome = System.getenv("JAVA_HOME") def setJavaVersion(ver) { assert ver != null def tmp = String.valueOf(ver).replace('.', '_') def dir = System.getenv("JAVA_HOME_${tmp}") if (dir == null) { throw new Exception("Unable to use Java ${ver}; missing JAVA_HOME_${tmp}") } this.javaHome = dir } def execute() { // Java version def tmp = context.get('java_version') if (tmp != null) { javaVersion = tmp } println "Using JAVA_HOME: ${javaHome}" // MAVEN_OPTS def mavenOpts = context.get('maven_opts') println "Using MAVEN_OPTS: ${mavenOpts}" // Setup the POM def pom = context.getRequiredAsFile('pom') assert pom.exists() : "Missing POM file: ${pom}" println "Using POM: ${pom}" // Setup the repository def repodir = context.resolveFile('repository') ant.mkdir(dir: repodir) println "Using repository: ${repodir}" // Optional timeout def timeout = context.getAsInt('timeout', -1) println "Using timeout: ${timeout}" // Optional args def args = context.get('args') println "Using args: ${args}" def mavenHome = context.resolveFile('tools/maven') println "Using MAVEN_HOME: ${mavenHome}" // Execute Maven Line.display() try { ant.exec(executable: "${mavenHome}/bin/mvn", failonerror: true) { // Get a reference to the current node so we can conditionally set attributes def node = current.wrapper // Maybe set timeout if (timeout > 0) { println "Timeout after: ${timeout} seconds" def millis = timeout * 1000 node.setAttribute('timeout', "${millis}") } env(key: 'MAVEN_HOME', value: mavenHome) env(key: 'M2_HOME', value: mavenHome) if (javaHome != null) { env(key: 'JAVA_HOME', file: javaHome) } if (mavenOpts != null) { env(key: 'MAVEN_OPTS', value: mavenOpts) } arg(value: '--batch-mode') arg(value: '--errors') arg(value: '--file') arg(file: pom) arg(value: "-Dmaven.repo.local=${repodir}") // Attach any optional args passed in if (args != null) { arg(line: args) } } } catch (Exception e) { context.fail('Maven execution failed', e) } } }