You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:15:52 UTC

[sling-maven-launchpad-plugin] 15/34: SLING-2134 : Provide a way to add additional properties to sling.properties

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag maven-launchpad-plugin-2.1.0
in repository https://gitbox.apache.org/repos/asf/sling-maven-launchpad-plugin.git

commit d72004a32a36bf5c85585e1586d92a33bcb631ba
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Jul 11 12:56:45 2011 +0000

    SLING-2134 : Provide a way to add additional properties to sling.properties
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/maven/maven-launchpad-plugin@1145156 13f79535-47bb-0310-9956-ffa450edef68
---
 .../AbstractUsingBundleListMojo.java               |  17 ++-
 .../maven/projectsupport/PreparePackageMojo.java   | 135 ++++++++++++++++++---
 2 files changed, 134 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/sling/maven/projectsupport/AbstractUsingBundleListMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/AbstractUsingBundleListMojo.java
index 5420b42..ec00009 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/AbstractUsingBundleListMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/AbstractUsingBundleListMojo.java
@@ -224,7 +224,7 @@ public abstract class AbstractUsingBundleListMojo extends AbstractBundleListMojo
             } catch (ArtifactMetadataRetrievalException e) {
                 throw new MojoExecutionException("Unable to find version for artifact", e);
             }
-            
+
         }
 
         try {
@@ -309,7 +309,7 @@ public abstract class AbstractUsingBundleListMojo extends AbstractBundleListMojo
                 bundleList.remove(def.toBundle(), false);
             }
         }
-        
+
         Set<Artifact> dependencies = project.getDependencyArtifacts();
         for (Artifact artifact : dependencies) {
             if (PARTIAL.equals(artifact.getType())) {
@@ -319,8 +319,8 @@ public abstract class AbstractUsingBundleListMojo extends AbstractBundleListMojo
                 bundleList.merge(readBundleList(artifact.getFile()));
             }
         }
-        
-        
+
+
         initBundleList(bundleList);
 
         rewriteBundleList(bundleList);
@@ -371,4 +371,13 @@ public abstract class AbstractUsingBundleListMojo extends AbstractBundleListMojo
         }
     }
 
+    protected File getSlingProperties() {
+        if ( this.configDirectory != null && this.configDirectory.exists() && this.configDirectory.isDirectory() ) {
+            final File slingProps = new File(this.configDirectory, "sling.properties");
+            if ( slingProps.exists() && slingProps.isFile() ) {
+                return slingProps;
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
index 9f445f3..f0788bb 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
@@ -17,7 +17,10 @@
 package org.apache.sling.maven.projectsupport;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.Enumeration;
 import java.util.Properties;
 
 import org.apache.maven.artifact.Artifact;
@@ -26,6 +29,7 @@ import org.apache.maven.plugin.MojoFailureException;
 import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.BundleList;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.jar.JarArchiver;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
 import org.codehaus.plexus.util.FileUtils;
@@ -81,13 +85,28 @@ public class PreparePackageMojo extends AbstractLaunchpadFrameworkMojo {
 	private File buildOutputDirectory;
 
     /**
+     * The temp directory (i.e. target/maven-launchpad-plugintmp).
+     *
+     * @parameter expression="${project.build.directory}/maven-launchpad-plugintmp"
+     * @readonly
+     */
+    private File tempDirectory;
+
+    /**
      * To look up Archiver/UnArchiver implementations
      *
      * @component
      */
     private ArchiverManager archiverManager;
 
-	public void executeWithArtifacts() throws MojoExecutionException, MojoFailureException {
+    /**
+     * The Jar archiver.
+     *
+     * @component role="org.codehaus.plexus.archiver.Archiver" roleHint="jar"
+     */
+    private JarArchiver jarArchiver;
+
+    public void executeWithArtifacts() throws MojoExecutionException, MojoFailureException {
 		copyBaseArtifact();
 		copyBundles(getBundleList(), getOutputDirectory());
 		copyConfigurationFiles();
@@ -131,20 +150,91 @@ public class PreparePackageMojo extends AbstractLaunchpadFrameworkMojo {
 		File destinationFile = new File(destinationDir, artifact
 				.getArtifactId()
 				+ "." + artifact.getArtifactHandler().getExtension());
-		if (shouldCopy(artifact.getFile(), destinationFile)) {
-			try {
-				getLog().info(
-						String.format("Copying base artifact from %s to %s.",
-								artifact.getFile(), destinationFile));
-				FileUtils.copyFile(artifact.getFile(), destinationFile);
-			} catch (IOException e) {
-				throw new MojoExecutionException(
-						"Unable to copy base artifact.", e);
-			}
+
+		// check if custom sling.properties file exists
+		final File slingProps = this.getSlingProperties();
+		if ( slingProps != null ) {
+    		// unpack to a temp destination
+		    final File dest = new File(this.tempDirectory, "basejar");
+		    try {
+        		unpack(artifact.getFile(), dest);
+        		final File origSlingProps = new File(dest, "sling.properties");
+        		if ( !origSlingProps.exists() ) {
+        		    throw new MojoExecutionException("sling.properties not found at " + origSlingProps);
+        		}
+
+        		// read original properties
+        		final Properties orig = new Properties();
+        		FileInputStream fis = null;
+        		try {
+        		    fis = new FileInputStream(origSlingProps);
+                    orig.load(fis);
+        		} catch (final IOException ioe) {
+        		    throw new MojoExecutionException("Unable to read " + origSlingProps, ioe);
+        		} finally {
+        		    if ( fis != null ) {
+        		        try { fis.close(); } catch (final IOException ignore) {}
+        		    }
+        		}
+
+        		// read additional properties
+                final Properties addProps = new Properties();
+                try {
+                    fis = new FileInputStream(slingProps);
+                    addProps.load(fis);
+                } catch (final IOException ioe) {
+                    throw new MojoExecutionException("Unable to read " + slingProps, ioe);
+                } finally {
+                    if ( fis != null ) {
+                        try { fis.close(); } catch (final IOException ignore) {}
+                    }
+                }
+
+                // patch
+                final Enumeration<Object> keys = addProps.keys();
+                if ( keys.hasMoreElements() ) {
+                    getLog().info("Patching sling.properties");
+                }
+                while ( keys.hasMoreElements() ) {
+                    final Object key = keys.nextElement();
+                    orig.put(key, addProps.get(key));
+                }
+
+                /// and save
+                FileOutputStream fos = null;
+                try {
+                    fos = new FileOutputStream(origSlingProps);
+                    orig.store(fos, null);
+                } catch (final IOException ioe) {
+                    throw new MojoExecutionException("Unable to save " + origSlingProps, ioe);
+                } finally {
+                    if ( fis != null ) {
+                        try { fis.close(); } catch (final IOException ignore) {}
+                    }
+                }
+
+                // and repack again
+        		pack(dest, destinationFile);
+		    } finally {
+		        this.tempDirectory.delete();
+		    }
 		} else {
-			getLog().debug(
-					String.format("Skipping copy of base artifact from %s.",
-							artifact.getFile()));
+		    // we can just copy
+    		if (shouldCopy(artifact.getFile(), destinationFile)) {
+    			try {
+    				getLog().info(
+    						String.format("Copying base artifact from %s to %s.",
+    								artifact.getFile(), destinationFile));
+    				FileUtils.copyFile(artifact.getFile(), destinationFile);
+    			} catch (IOException e) {
+    				throw new MojoExecutionException(
+    						"Unable to copy base artifact.", e);
+    			}
+    		} else {
+    			getLog().debug(
+    					String.format("Skipping copy of base artifact from %s.",
+    							artifact.getFile()));
+    		}
 		}
 	}
 
@@ -212,4 +302,21 @@ public class PreparePackageMojo extends AbstractLaunchpadFrameworkMojo {
             throw new MojoExecutionException("Unable to unpack " + source.getPath(), e);
         }
     }
+
+    private void pack(File sourceDir, File destination)
+    throws MojoExecutionException {
+        getLog().info("Packing " + sourceDir.getPath() + " to\n  " + destination.getPath());
+        try {
+            destination.getParentFile().mkdirs();
+
+            jarArchiver.setDestFile(destination);
+            jarArchiver.addDirectory(sourceDir);
+            jarArchiver.setManifest(new File(sourceDir, "META-INF/MANIFEST.MF".replace('/', File.separatorChar)));
+            jarArchiver.createArchive();
+        } catch (IOException e) {
+            throw new MojoExecutionException("Unable to pack " + sourceDir.getPath(), e);
+        } catch (ArchiverException e) {
+            throw new MojoExecutionException("Unable to pack " + sourceDir.getPath(), e);
+        }
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.