001 /**
002 * Copyright (C) 2009 Progress Software, Inc.
003 * http://fusesource.com
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.fusesource.hawtjni.maven;
018
019 import java.io.File;
020
021 import org.apache.maven.plugin.AbstractMojo;
022 import org.apache.maven.plugin.MojoExecutionException;
023 import org.apache.maven.project.MavenProject;
024 import org.apache.maven.project.MavenProjectHelper;
025 import org.codehaus.plexus.archiver.Archiver;
026 import org.codehaus.plexus.archiver.manager.ArchiverManager;
027
028 /**
029 * This goal creates a source zip file of the native build
030 * module and attaches it to the build so that it can get
031 * deployed.
032 *
033 * @goal package-source
034 * @phase package
035 * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
036 */
037 public class PackageSourceMojo extends AbstractMojo {
038
039 /**
040 * The maven project.
041 *
042 * @parameter expression="${project}"
043 * @required
044 * @readonly
045 */
046 protected MavenProject project;
047
048 /**
049 * @component
050 * @required
051 * @readonly
052 */
053 private ArchiverManager archiverManager;
054
055 /**
056 * @component
057 * @required
058 * @readonly
059 */
060 private MavenProjectHelper projectHelper;
061
062 /**
063 * The directory where the generated native files are located..
064 *
065 * @parameter default-value="${project.build.directory}/generated-sources/hawtjni/native-package"
066 */
067 private File packageDirectory;
068
069 /**
070 * The classifier of the package archive that will be created.
071 *
072 * @parameter default-value="native-src"
073 */
074 private String sourceClassifier;
075
076 /**
077 * Should we skip executing the autogen.sh file.
078 *
079 * @parameter default-value="${skip-autogen}"
080 */
081 private boolean skipAutogen;
082
083
084 public void execute() throws MojoExecutionException {
085 try {
086
087 String packageName = project.getArtifactId()+"-"+project.getVersion()+"-"+sourceClassifier;
088 File packageFile = new File(new File(project.getBuild().getDirectory()), packageName+".zip");
089
090 // Verify the the configure script got generated before packaging.
091 File configure = new File(packageDirectory, "configure");
092 if( !skipAutogen && !configure.exists() ) {
093 // Looks like this platform could not generate the
094 // configure script. So don't install deploy
095 // partially created source package.
096 getLog().info("");
097 getLog().warn("Will NOT package the native sources to: "+packageFile);
098 getLog().info(" Native source build directory did not contain a 'configure' script.");
099 getLog().info(" To ignore this warnning and package it up anyways configure the plugin with: <skipAutogen>true</skipAutogen>");
100 getLog().info("");
101 return;
102 }
103
104 Archiver archiver = archiverManager.getArchiver( "zip" );
105 archiver.setDestFile( packageFile);
106 archiver.setIncludeEmptyDirs(true);
107 archiver.addDirectory(packageDirectory, packageName+"/");
108 archiver.createArchive();
109 projectHelper.attachArtifact( project, "zip", sourceClassifier, packageFile );
110
111 } catch (Exception e) {
112 throw new MojoExecutionException("packageing failed: "+e, e);
113 }
114 }
115
116 }