You are viewing a plain text version of this content. The canonical link for it is here.
Posted to npanday-commits@incubator.apache.org by lc...@apache.org on 2011/12/29 12:50:19 UTC

svn commit: r1225516 - in /incubator/npanday/trunk/plugins/azure-maven-plugin: pom.xml src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java

Author: lcorneliussen
Date: Thu Dec 29 12:50:18 2011
New Revision: 1225516

URL: http://svn.apache.org/viewvc?rev=1225516&view=rev
Log:
[NPANDAY-480] Support Windows Azure Cloud Service Project and Packaging (CCPack)

o support for worker roles

Modified:
    incubator/npanday/trunk/plugins/azure-maven-plugin/pom.xml
    incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java
    incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java

Modified: incubator/npanday/trunk/plugins/azure-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/azure-maven-plugin/pom.xml?rev=1225516&r1=1225515&r2=1225516&view=diff
==============================================================================
--- incubator/npanday/trunk/plugins/azure-maven-plugin/pom.xml (original)
+++ incubator/npanday/trunk/plugins/azure-maven-plugin/pom.xml Thu Dec 29 12:50:18 2011
@@ -76,6 +76,17 @@
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-archiver</artifactId>
+      <version>2.0</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-component-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
       <version>${plexus.utils.version}</version>
     </dependency>

Modified: incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java?rev=1225516&r1=1225515&r2=1225516&view=diff
==============================================================================
--- incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java (original)
+++ incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/CreateCloudServicePackageMojo.java Thu Dec 29 12:50:18 2011
@@ -128,20 +128,74 @@ public class CreateCloudServicePackageMo
         for ( Object artifactAsObject : projectDependencyArtifacts )
         {
             Artifact artifact = (Artifact) artifactAsObject;
-            if ( artifact.getType().equals( ArtifactType.MSDEPLOY_PACKAGE.getPackagingType() )
-                || artifact.getType().equals( ArtifactType.MSDEPLOY_PACKAGE.getExtension() ) )
+            final boolean isWebRole = artifact.getType().equals(
+                ArtifactType.MSDEPLOY_PACKAGE.getPackagingType()
+            ) || artifact.getType().equals(
+                ArtifactType.MSDEPLOY_PACKAGE.getExtension()
+            );
+
+            final boolean isWorkerRole = artifact.getType().equals(
+                ArtifactType.DOTNET_APPLICATION.getPackagingType()
+            ) || artifact.getType().equals(
+                ArtifactType.DOTNET_APPLICATION.getExtension()
+            );
+
+            if ( !isWebRole && !isWorkerRole )
+            {
+                throw new MojoExecutionException(
+                    "NPANDAY-123-005: Artifact type " + artifact.getType() + " of artifact " + artifact.getArtifactId()
+                        + " is not supported for azure cloud services.\n\nPlease use "
+                        + ArtifactType.DOTNET_APPLICATION.getPackagingType() + " for worker roles, and "
+                        + ArtifactType.MSDEPLOY_PACKAGE.getPackagingType() + " for web roles"
+                );
+            }
+
+            final File roleRoot = new File(
+                PathUtil.getPreparedPackageFolder( project ), artifact.getArtifactId()
+            );
+
+            if ( isWebRole )
+            {
+                getLog().debug( "NPANDAY-123-003: Found web role " + artifact.getArtifactId() );
+            }
+            else if ( isWorkerRole )
+            {
+                getLog().debug( "NPANDAY-123-004: Found worker role " + artifact.getArtifactId() );
+            }
+
+            if ( !roleRoot.exists() )
             {
-                final File webRoot = new File(
-                    PathUtil.getPreparedPackageFolder( project ), artifact.getArtifactId()
+                throw new MojoExecutionException(
+                    "NPANDAY-123-006: Could not find worker/web role root for " + artifact.getArtifactId() + ": "
+                        + roleRoot
                 );
+            }
 
+            if ( isWebRole )
+            {
+                commands.add(
+                    "/role:" + artifact.getArtifactId() + ";" + roleRoot.getAbsolutePath()
+                );
+                // TODO: 'Web/' is hardcoded here; where to get it from?
                 commands.add(
-                    "/role:" + artifact.getArtifactId() + ";" + webRoot.getAbsolutePath()
+                    "/sitePhysicalDirectories:" + artifact.getArtifactId() + ";Web/;" + roleRoot.getAbsolutePath()
                 );
+            }
+            else if ( isWorkerRole )
+            {
+                File entryPoint = new File( roleRoot, artifact.getArtifactId() + ".dll" );
+
+                if ( !entryPoint.exists() )
+                {
+                    throw new MojoExecutionException(
+                        "NPANDAY-123-007: Could not find entry point dll for " + artifact.getArtifactId() + ": "
+                            + entryPoint
+                    );
+                }
 
-                // TODO: 'Web/' is hardcoded here; where to get it from?1 (310) 728-2143 x2813
                 commands.add(
-                    "/sitePhysicalDirectories:" + artifact.getArtifactId() + ";Web/;" + webRoot.getAbsolutePath()
+                    "/role:" + artifact.getArtifactId() + ";" + roleRoot.getAbsolutePath() + ";"
+                        + entryPoint.getAbsolutePath()
                 );
             }
         }
@@ -149,5 +203,4 @@ public class CreateCloudServicePackageMo
         return commands;
     }
 
-
 }

Modified: incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java?rev=1225516&r1=1225515&r2=1225516&view=diff
==============================================================================
--- incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java (original)
+++ incubator/npanday/trunk/plugins/azure-maven-plugin/src/main/java/npanday.plugin.azure/ResolveWorkerRoleFilesMojo.java Thu Dec 29 12:50:18 2011
@@ -19,24 +19,89 @@
 
 package npanday.plugin.azure;
 
+import npanday.ArtifactType;
+import npanday.PathUtil;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.zip.ZipUnArchiver;
+
+import java.io.File;
+import java.util.Set;
 
 /**
- *
- *
  * @author <a href="mailto:lcorneliussen@apache.org">Lars Corneliussen</a>
  * @goal resolve-worker-roles
- *
  * @requiresDependencyResolution runtime
  */
 public class ResolveWorkerRoleFilesMojo
     extends AbstractNPandayMojo
 {
+    /**
+     * The Zip archiver.
+     *
+     * @parameter expression="${component.org.codehaus.plexus.archiver.UnArchiver#zip}"
+     * @required
+     */
+    private ZipUnArchiver unarchiver;
+
     public void execute() throws MojoExecutionException, MojoFailureException
     {
+        // TODO: this mojo could be moved to application-maven-plugin / unpack-dependencies (as with msdeploy)
         super.execute();
 
+        final Set projectDependencyArtifacts = project.getDependencyArtifacts();
+        for ( Object artifactAsObject : projectDependencyArtifacts )
+        {
+            Artifact artifact = (Artifact) artifactAsObject;
+            if ( artifact.getType().equals( ArtifactType.DOTNET_APPLICATION.getPackagingType() )
+                || artifact.getType().equals( ArtifactType.DOTNET_APPLICATION.getExtension() ) )
+            {
+                unpack( artifact );
+            }
+        }
+    }
+
+    private void unpack( Artifact artifact ) throws MojoFailureException
+    {
+        // TODO: partially duplicate code with MSDeploy unpack-dependencies
+        File targetDirectory = new File( PathUtil.getPreparedPackageFolder( project ), artifact.getArtifactId() );
+        try
+        {
+            if ( !artifact.isResolved() )
+            {
+                throw new MojoFailureException(
+                    "NPANDAY-131-000: The artifact should already have been resolved: " + artifact
+                );
+            }
+
+            final File packageSource = artifact.getFile();
+            assert packageSource != null : "package source should not be null here";
+            getLog().info(
+                "NPANDAY-131-002: Unpacking worker role " + artifact.getArtifactId() + " from " + packageSource + " "
+                    + "to " + targetDirectory
+            );
+
+            // unarchiver expects the dir to be there
+            targetDirectory.mkdirs();
+
+            unarchiver.setSourceFile( packageSource );
+            unarchiver.setDestDirectory( targetDirectory );
+            unarchiver.extract();
 
+            if ( targetDirectory.listFiles().length == 0 )
+            {
+                throw new MojoFailureException(
+                    "NPANDAY-131-003: Wasn't able to unpack worker role " + artifact.getArtifactId()
+                );
+            }
+        }
+        catch ( ArchiverException e )
+        {
+            throw new MojoFailureException(
+                "NPANDAY-131-001: Unable to unpack worker role from artifact: " + artifact
+            );
+        }
     }
 }