1 package org.codehaus.mojo.natives.plugin; 2 3 /* 4 * The MIT License 5 * 6 * Copyright (c) 2004, The Codehaus 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy of 9 * this software and associated documentation files (the "Software"), to deal in 10 * the Software without restriction, including without limitation the rights to 11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 * of the Software, and to permit persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in all 16 * copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 27 import java.io.File; 28 import java.util.List; 29 30 import org.apache.maven.plugin.AbstractMojo; 31 import org.apache.maven.plugin.MojoExecutionException; 32 import org.apache.maven.plugins.annotations.LifecyclePhase; 33 import org.apache.maven.plugins.annotations.Mojo; 34 import org.apache.maven.plugins.annotations.Parameter; 35 import org.apache.maven.project.MavenProject; 36 37 /** 38 * Initialize build lifecycle 39 */ 40 @Mojo(name = "initialize", defaultPhase = LifecyclePhase.INITIALIZE) 41 public class NativeInitializeMojo 42 extends AbstractMojo 43 { 44 45 @Parameter(defaultValue = "${project}", readonly = true, required = true) 46 protected MavenProject project; 47 48 public void execute() 49 throws MojoExecutionException 50 { 51 File buildDirectory = new File( this.project.getBuild().getDirectory() ); 52 53 if ( !buildDirectory.exists() ) 54 { 55 buildDirectory.mkdirs(); 56 } 57 58 // strip version from finalName since and 59 // disallow user from changing the final name since many 60 // final linker output depending heavily on the name without any associated version 61 String finalName = project.getArtifactId(); 62 63 project.getBuild().setFinalName( finalName ); 64 65 // we need to clear out object files list since it possible that compile phase gets called mulitple times 66 // and produce duplicate objects, and therefore will fail at link phase 67 List objList = (List) this.getPluginContext().get( AbstractNativeMojo.LINKER_INPUT_LIST_NAME ); 68 if ( objList != null ) 69 { 70 objList.clear(); 71 } 72 73 } 74 75 }