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:37 UTC

[sling-maven-sling-plugin] 13/48: Add new plugin comparable to install named install-file which allows installation of a bundle without a POM

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

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

commit f6f3119d03c0c4cff1692d57ffd9eef583af9d88
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Mon Sep 24 08:34:29 2007 +0000

    Add new plugin comparable to install named install-file which allows installation of a bundle without a POM
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/maven-sling-plugin@578707 13f79535-47bb-0310-9956-ffa450edef68
---
 ...allMojo.java => AbstractBundleInstallMojo.java} |  87 ++++++---------
 .../bundlesupport/AbstractBundlePostMojo.java      |  31 ++++--
 .../maven/bundlesupport/BundleInstallFileMojo.java |  48 ++++++++
 .../maven/bundlesupport/BundleInstallMojo.java     | 121 +++------------------
 4 files changed, 113 insertions(+), 174 deletions(-)

diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
similarity index 68%
copy from src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
copy to src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
index 4b9d588..8f93351 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
@@ -1,20 +1,17 @@
 /*
- * 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
+ * $Url: $
+ * $Id: $
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ * Copyright 1997-2005 Day Management AG
+ * Barfuesserplatz 6, 4001 Basel, Switzerland
+ * All Rights Reserved.
  *
- * 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.
+ * This software is the confidential and proprietary information of
+ * Day Management AG, ("Confidential Information"). You shall not
+ * disclose such Confidential Information and shall use it only in
+ * accordance with the terms of the license agreement you entered into
+ * with Day.
  */
-
 package org.apache.sling.maven.bundlesupport;
 
 import java.io.File;
@@ -33,34 +30,10 @@ import org.apache.commons.httpclient.methods.multipart.FilePartSource;
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
 import org.apache.commons.httpclient.methods.multipart.StringPart;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 
-/**
- * Install an OSGi bundle to a running Sling instance.
- *
- * @goal install
- * @phase install
- * @description install an OSGi bundle jar to a running Sling instance
- */
-public class BundleInstallMojo extends AbstractBundlePostMojo {
-
-    /**
-     * Whether to skip this step even though it has been configured in the
-     * project to be executed. This property may be set by the
-     * <code>sling.install.skip</code> comparable to the <code>maven.test.skip</code>
-     * property to prevent running the unit tests.
-     * 
-     * @parameter expression="${sling.install.skip}" default-value="false"
-     * @required
-     */
-    private boolean skip;
-    
-    /**
-     * The name of the generated JAR file.
-     *
-     * @parameter expression="${sling.file}" default-value="${project.build.directory}/${project.build.finalName}.jar"
-     * @required
-     */
-    private String bundleFileName;
+public abstract class AbstractBundleInstallMojo extends AbstractBundlePostMojo {
 
     /**
      * The URL of the running Sling instance.
@@ -102,15 +75,16 @@ public class BundleInstallMojo extends AbstractBundlePostMojo {
      */
     private boolean bundleStart;
 
-	/**
-	 * Execute this Mojo
-	 */
-	public void execute() {
-	    // don't do anything, if this step is to be skipped
-	    if (skip) {
-	        getLog().debug("Skipping bundle installation as instructed");
-	        return;
-	    }
+    public AbstractBundleInstallMojo() {
+        super();
+    }
+
+    protected abstract String getBundleFileName() throws MojoExecutionException;
+    
+    public void execute() throws MojoExecutionException {
+
+        // get the file to upload
+        String bundleFileName = getBundleFileName();
 
         // only upload if packaging as an osgi-bundle
         File bundleFile = new File(bundleFileName);
@@ -122,15 +96,15 @@ public class BundleInstallMojo extends AbstractBundlePostMojo {
 
         getLog().info("Installing Bundle " + bundleName + "(" + bundleFile + ") to " + slingUrl);
         post(slingUrl, bundleFile);
-	}
-
-	private void post(String targetURL, File file) {
+    }
 
+    protected void post(String targetURL, File file) {
+    
         // append pseudo path after root URL to not get redirected for nothing
         PostMethod filePost = new PostMethod(targetURL + "/install");
-
+    
         try {
-
+    
             List<Part> partList = new ArrayList<Part>();
             partList.add(new StringPart("action", "install"));
             partList.add(new StringPart("_noredir_", "_noredir_"));
@@ -140,9 +114,9 @@ public class BundleInstallMojo extends AbstractBundlePostMojo {
             if (bundleStart) {
                 partList.add(new StringPart("bundlestart", "start"));
             }
-
+    
             Part[] parts = partList.toArray(new Part[partList.size()]);
-
+    
             filePost.setRequestEntity(new MultipartRequestEntity(parts,
                 filePost.getParams()));
             HttpClient client = new HttpClient();
@@ -171,4 +145,5 @@ public class BundleInstallMojo extends AbstractBundlePostMojo {
             filePost.releaseConnection();
         }
     }
+
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundlePostMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundlePostMojo.java
index 93b5886..17d2317 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundlePostMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundlePostMojo.java
@@ -24,13 +24,14 @@ import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 
 import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
 
 public abstract class AbstractBundlePostMojo extends AbstractMojo {
 
     /**
      * Returns the symbolic name of the given bundle. If the
-     * <code>jarFile</code> does not exist or does not contain a manifest with
-     * a <code>Bundle-SymbolicName</code> header <code>null</code> is
+     * <code>jarFile</code> does not contain a manifest with a
+     * <code>Bundle-SymbolicName</code> header <code>null</code> is
      * returned. Otherwise the value of the <code>Bundle-SymbolicName</code>
      * header is returned.
      * <p>
@@ -42,15 +43,17 @@ public abstract class AbstractBundlePostMojo extends AbstractMojo {
      *            requested.
      * @return The bundle's symbolic name from the
      *         <code>Bundle-SymbolicName</code> manifest header or
-     *         <code>null</code> if the file does not exists or no manifest
-     *         exists in the file or the header is not contained in the
-     *         manifest. However, if <code>null</code> is returned, the file
-     *         may be assumed to not contain an OSGi bundle.
+     *         <code>null</code> if no manifest exists in the file or the
+     *         header is not contained in the manifest. However, if
+     *         <code>null</code> is returned, the file may be assumed to not
+     *         contain an OSGi bundle.
+     * @throws MojoExecutionException if the file does not exist
      */
-    protected String getBundleSymbolicName(File jarFile) {
+    protected String getBundleSymbolicName(File jarFile)
+            throws MojoExecutionException {
+
         if (!jarFile.exists()) {
-            getLog().debug("getBundleSymbolicName: " + jarFile + " does not exist");
-            return null;
+            throw new MojoExecutionException("Missing file " + jarFile);
         }
 
         JarFile jaf = null;
@@ -58,20 +61,24 @@ public abstract class AbstractBundlePostMojo extends AbstractMojo {
             jaf = new JarFile(jarFile);
             Manifest manif = jaf.getManifest();
             if (manif == null) {
-                getLog().debug("getBundleSymbolicName: Missing manifest in " + jarFile);
+                getLog().debug(
+                    "getBundleSymbolicName: Missing manifest in " + jarFile);
                 return null;
             }
 
             String symbName = manif.getMainAttributes().getValue(
                 "Bundle-SymbolicName");
             if (symbName == null) {
-                getLog().debug("getBundleSymbolicName: No Bundle-SymbolicName in " + jarFile);
+                getLog().debug(
+                    "getBundleSymbolicName: No Bundle-SymbolicName in "
+                        + jarFile);
                 return null;
             }
 
             return symbName;
         } catch (IOException ioe) {
-            getLog().warn("getBundleSymbolicName: Problem checking " + jarFile, ioe);
+            getLog().warn("getBundleSymbolicName: Problem checking " + jarFile,
+                ioe);
         } finally {
             if (jaf != null) {
                 try {
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java
new file mode 100644
index 0000000..5168ca2
--- /dev/null
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+package org.apache.sling.maven.bundlesupport;
+
+import java.io.File;
+
+import org.apache.maven.plugin.MojoExecutionException;
+
+/**
+ * Install an OSGi bundle to a running Sling instance.
+ *
+ * @goal install-file
+ * @description install an OSGi bundle jar to a running Sling instance
+ * @requiresProject false
+ */
+public class BundleInstallFileMojo extends AbstractBundleInstallMojo {
+
+    /**
+     * The name of the generated JAR file.
+     *
+     * @parameter expression="${sling.file}"
+     */
+    private String bundleFileName;
+    
+    @Override
+    protected String getBundleFileName() throws MojoExecutionException {
+        if (bundleFileName == null) {
+            throw new MojoExecutionException("Missing sling.file parameter");
+        }
+        
+        return bundleFileName;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
index 4b9d588..121d299 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
@@ -33,6 +33,9 @@ import org.apache.commons.httpclient.methods.multipart.FilePartSource;
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
 import org.apache.commons.httpclient.methods.multipart.StringPart;
+import org.apache.maven.model.Build;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 
 /**
  * Install an OSGi bundle to a running Sling instance.
@@ -41,7 +44,7 @@ import org.apache.commons.httpclient.methods.multipart.StringPart;
  * @phase install
  * @description install an OSGi bundle jar to a running Sling instance
  */
-public class BundleInstallMojo extends AbstractBundlePostMojo {
+public class BundleInstallMojo extends AbstractBundleInstallMojo {
 
     /**
      * Whether to skip this step even though it has been configured in the
@@ -62,113 +65,19 @@ public class BundleInstallMojo extends AbstractBundlePostMojo {
      */
     private String bundleFileName;
 
-    /**
-     * The URL of the running Sling instance.
-     *
-     * @parameter expression="${sling.url}" default-value="http://localhost:8080/sling"
-     * @required
-     */
-    private String slingUrl;
-    
-    /**
-     * The user name to authenticate at the running Sling instance.
-     *
-     * @parameter expression="${sling.user}" default-value="admin"
-     * @required
-     */
-    private String user;
-    
-    /**
-     * The password to authenticate at the running Sling instance.
-     *
-     * @parameter expression="${sling.password}" default-value="admin"
-     * @required
-     */
-    private String password;
-    
-    /**
-     * The startlevel for the uploaded bundle
-     *
-     * @parameter expression="${sling.bundle.startlevel}" default-value="20"
-     * @required
-     */
-    private String bundleStartLevel;
-    
-    /**
-     * Whether to start the uploaded bundle or not
-     *
-     * @parameter expression="${sling.bundle.start}" default-value="true"
-     * @required
-     */
-    private boolean bundleStart;
-
-	/**
-	 * Execute this Mojo
-	 */
-	public void execute() {
-	    // don't do anything, if this step is to be skipped
-	    if (skip) {
-	        getLog().debug("Skipping bundle installation as instructed");
-	        return;
-	    }
-
-        // only upload if packaging as an osgi-bundle
-        File bundleFile = new File(bundleFileName);
-        String bundleName = getBundleSymbolicName(bundleFile);
-        if (bundleName == null) {
-            getLog().info(bundleFile + " is not an OSGi Bundle, not uploading");
+    @Override
+    public void execute() throws MojoExecutionException {
+        // don't do anything, if this step is to be skipped
+        if (skip) {
+            getLog().debug("Skipping bundle installation as instructed");
             return;
         }
 
-        getLog().info("Installing Bundle " + bundleName + "(" + bundleFile + ") to " + slingUrl);
-        post(slingUrl, bundleFile);
-	}
-
-	private void post(String targetURL, File file) {
-
-        // append pseudo path after root URL to not get redirected for nothing
-        PostMethod filePost = new PostMethod(targetURL + "/install");
-
-        try {
-
-            List<Part> partList = new ArrayList<Part>();
-            partList.add(new StringPart("action", "install"));
-            partList.add(new StringPart("_noredir_", "_noredir_"));
-            partList.add(new FilePart("bundlefile", new FilePartSource(file.getName(), file)));
-            partList.add(new StringPart("bundlestartlevel", bundleStartLevel));
-            
-            if (bundleStart) {
-                partList.add(new StringPart("bundlestart", "start"));
-            }
-
-            Part[] parts = partList.toArray(new Part[partList.size()]);
-
-            filePost.setRequestEntity(new MultipartRequestEntity(parts,
-                filePost.getParams()));
-            HttpClient client = new HttpClient();
-            client.getHttpConnectionManager().getParams().setConnectionTimeout(
-                5000);
-            
-            // authentication stuff
-            client.getParams().setAuthenticationPreemptive(true);
-            Credentials defaultcreds = new UsernamePasswordCredentials(user, password);
-            client.getState().setCredentials(AuthScope.ANY, defaultcreds);
-            
-            int status = client.executeMethod(filePost);
-            if (status == HttpStatus.SC_OK) {
-                getLog().info("Bundle installed");
-            } else {
-                getLog().error(
-                    "Installation failed, cause: " + HttpStatus.getStatusText(status));
-            }
-        } catch (ConnectException ce) {
-            getLog().info("Installation on " + targetURL + " failed, cause: " + ce.getMessage());
-            getLog().debug(ce); // dump on debug
-        } catch (Exception ex) {
-            getLog().error(ex.getClass().getName() + " " + ex.getMessage());
-            ex.printStackTrace();
-        } finally {
-            filePost.releaseConnection();
-        }
+        super.execute();
+    }
+    
+    @Override
+    protected String getBundleFileName() {
+        return bundleFileName;
     }
 }
\ No newline at end of file

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