summaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java
diff options
context:
space:
mode:
authorMark Donszelmann <Mark.Donszelmann@gmail.com>2009-10-16 13:29:18 +0200
committerMark Donszelmann <Mark.Donszelmann@gmail.com>2009-10-16 13:29:18 +0200
commit9b1643ef71a5b0d6c9db8cb9859b045c4adad911 (patch)
treeedf6360a90443ce403ccc61486e3783920ec5c75 /src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java
parentdd1c5dec28cd418fc319f64dbb52eee295ca150f (diff)
downloadmaven-nar-plugin-9b1643ef71a5b0d6c9db8cb9859b045c4adad911.tar.gz
maven-nar-plugin-9b1643ef71a5b0d6c9db8cb9859b045c4adad911.tar.bz2
maven-nar-plugin-9b1643ef71a5b0d6c9db8cb9859b045c4adad911.tar.xz
maven-nar-plugin-9b1643ef71a5b0d6c9db8cb9859b045c4adad911.zip
Fixed NAR-64
Diffstat (limited to 'src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java')
-rw-r--r--src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java b/src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java
new file mode 100644
index 0000000..31d9960
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugin/nar/AbstractResourcesMojo.java
@@ -0,0 +1,150 @@
+package org.apache.maven.plugin.nar;
+
+/*
+ * 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.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * Keeps track of resources
+ *
+ * @author Mark Donszelmann
+ */
+public abstract class AbstractResourcesMojo
+ extends AbstractCompileMojo
+{
+ /**
+ * Binary directory
+ *
+ * @parameter expression="bin"
+ * @required
+ */
+ private String resourceBinDir;
+
+ /**
+ * Include directory
+ *
+ * @parameter expression="include"
+ * @required
+ */
+ private String resourceIncludeDir;
+
+ /**
+ * Library directory
+ *
+ * @parameter expression="lib"
+ * @required
+ */
+ private String resourceLibDir;
+
+ /**
+ * To look up Archiver/UnArchiver implementations
+ *
+ * @component role="org.codehaus.plexus.archiver.manager.ArchiverManager"
+ * @required
+ */
+ private ArchiverManager archiverManager;
+
+ protected void copyResources( File srcDir, String aol)
+ throws MojoExecutionException, MojoFailureException
+ {
+ int copied = 0;
+ try
+ {
+ // copy headers
+ File includeDir = new File( srcDir, resourceIncludeDir );
+ if ( includeDir.exists() )
+ {
+ File includeDstDir = new File( getTargetDirectory(), "include" );
+ copied += NarUtil.copyDirectoryStructure( includeDir, includeDstDir, null, NarUtil.DEFAULT_EXCLUDES );
+ }
+
+ // copy binaries
+ File binDir = new File( srcDir, resourceBinDir );
+ if ( binDir.exists() )
+ {
+ File binDstDir = new File( getTargetDirectory(), "bin" );
+ binDstDir = new File( binDstDir, aol );
+
+ copied += NarUtil.copyDirectoryStructure( binDir, binDstDir, null, NarUtil.DEFAULT_EXCLUDES );
+ }
+
+ // copy libraries
+ File libDir = new File( srcDir, resourceLibDir );
+ if ( libDir.exists() )
+ {
+ // create all types of libs
+ for ( Iterator i = getLibraries().iterator(); i.hasNext(); )
+ {
+ Library library = (Library) i.next();
+ String type = library.getType();
+ File libDstDir = new File( getTargetDirectory(), "lib" );
+ libDstDir = new File( libDstDir, aol );
+ libDstDir = new File( libDstDir, type );
+
+ // filter files for lib
+ String includes =
+ "**/*."
+ + NarUtil.getDefaults().getProperty( NarUtil.getAOLKey( aol ) + "." + type + ".extension" );
+ copied += NarUtil.copyDirectoryStructure( libDir, libDstDir, includes, NarUtil.DEFAULT_EXCLUDES );
+ }
+ }
+
+ // unpack jar files
+ File classesDirectory = new File( getOutputDirectory(), "classes" );
+ classesDirectory.mkdirs();
+ List jars = FileUtils.getFiles( srcDir, "**/*.jar", null );
+ for ( Iterator i = jars.iterator(); i.hasNext(); )
+ {
+ File jar = (File) i.next();
+ getLog().debug( "Unpacking jar " + jar );
+ UnArchiver unArchiver;
+ unArchiver = archiverManager.getUnArchiver( AbstractNarMojo.NAR_ROLE_HINT );
+ unArchiver.setSourceFile( jar );
+ unArchiver.setDestDirectory( classesDirectory );
+ unArchiver.extract();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "NAR: Could not copy resources", e );
+ }
+ catch ( NoSuchArchiverException e )
+ {
+ throw new MojoExecutionException( "NAR: Could not find archiver", e );
+ }
+ catch ( ArchiverException e )
+ {
+ throw new MojoExecutionException( "NAR: Could not unarchive jar file", e );
+ }
+ getLog().info( "Copied " + copied + " resources for " + aol );
+ }
+
+}