From f15728a43eb1576d8255351c683111c60550cf33 Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Thu, 2 Apr 2009 22:02:25 +0000 Subject: [PATCH] [MNG-3714] Allow specification of the toolchains.xml location on the command line o Extended IT to check propagation of toolchain via session git-svn-id: https://svn.apache.org/repos/asf/maven/core-integration-testing/trunk@761442 13f79535-47bb-0310-9956-ffa450edef68 --- .../maven/plugin/coreit/CoreItMojo.java | 33 ++++- .../maven/plugin/coreit/FindToolMojo.java | 126 ++++++++++++++++++ 2 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/FindToolMojo.java diff --git a/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java b/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java index 7407f6a90b..ac490b8666 100644 --- a/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java +++ b/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java @@ -27,6 +27,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Properties; +import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.toolchain.MisconfiguredToolchainException; @@ -40,11 +41,21 @@ import org.apache.maven.toolchain.ToolchainPrivate; public class CoreItMojo extends AbstractMojo { + /** * @component */ private ToolchainManagerPrivate toolchainManager; + /** + * The current Maven session holding the selected toolchain. + * + * @parameter expression="${session}" + * @required + * @readonly + */ + private MavenSession session; + /** * The path to the output file for the properties. * @@ -53,15 +64,26 @@ public class CoreItMojo private File outputFile; /** - * @parameter default-value="jdk" + * The type identifier of the toolchain, e.g. "jdk". + * + * @parameter expression="${toolchain.type}" */ private String type; /** - * @parameter default-value="javac" + * The name of the tool, e.g. "javac". + * + * @parameter expression="${toolchain.tool}" */ private String tool; + /** + * The zero-based index of the toolchain to select and store in the build context. + * + * @parameter expression="${toolchain.selected}" + */ + private int selected; + public void execute() throws MojoExecutionException { @@ -77,6 +99,12 @@ public class CoreItMojo getLog().info( "[MAVEN-CORE-IT-LOG] Toolchains in plugin: " + Arrays.asList( tcs ) ); + if ( selected >= 0 ) + { + ToolchainPrivate toolchain = tcs[selected]; + toolchainManager.storeToolchainToBuildContext( toolchain, session ); + } + Properties properties = new Properties(); int count = 1; @@ -112,6 +140,7 @@ public class CoreItMojo } catch ( IOException e ) { + // ignore } } } diff --git a/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/FindToolMojo.java b/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/FindToolMojo.java new file mode 100644 index 0000000000..e72ac7347e --- /dev/null +++ b/its/core-it-support/core-it-plugins/maven-it-plugin-toolchain/src/main/java/org/apache/maven/plugin/coreit/FindToolMojo.java @@ -0,0 +1,126 @@ +package org.apache.maven.plugin.coreit; + +/* + * 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. + */ + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Properties; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.toolchain.Toolchain; +import org.apache.maven.toolchain.ToolchainManager; + +/** + * Finds a tool from a previously selected toolchain. This tests the public API just like toolchain-enabled plugins + * would do. + * + * @goal find-tool + * @phase validate + */ +public class FindToolMojo + extends AbstractMojo +{ + + /** + * @component + */ + private ToolchainManager toolchainManager; + + /** + * The current Maven session holding the selected toolchain. + * + * @parameter expression="${session}" + * @required + * @readonly + */ + private MavenSession session; + + /** + * The path to the output file for the properties. + * + * @parameter expression="${toolchain.outputFile}" default-value="${project.build.directory}/tool.properties" + */ + private File outputFile; + + /** + * The type identifier of the toolchain, e.g. "jdk". + * + * @parameter expression="${toolchain.type}" + */ + private String type; + + /** + * The name of the tool, e.g. "javac". + * + * @parameter expression="${toolchain.tool}" + */ + private String tool; + + public void execute() + throws MojoExecutionException + { + Toolchain toolchain = toolchainManager.getToolchainFromBuildContext( type, session ); + + getLog().info( "[MAVEN-CORE-IT-LOG] Toolchain in session: " + toolchain ); + + Properties properties = new Properties(); + + if ( toolchain != null ) + { + properties.setProperty( "toolchain.type", toolchain.getType() ); + + String path = toolchain.findTool( tool ); + if ( path != null ) + { + properties.setProperty( "tool." + tool, path ); + } + } + + OutputStream out = null; + try + { + outputFile.getParentFile().mkdirs(); + out = new FileOutputStream( outputFile ); + properties.store( out, "MAVEN-CORE-IT-LOG" ); + } + catch ( IOException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } + finally + { + if ( out != null ) + { + try + { + out.close(); + } + catch ( IOException e ) + { + // ignore + } + } + } + } +}