You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/07/07 10:06:38 UTC

svn commit: r419837 - in /geronimo/sandbox/svkmerge/m2migration/m2-plugins: ./ geronimo-assembly-plugin/ geronimo-assembly-plugin/src/ geronimo-assembly-plugin/src/java/ geronimo-assembly-plugin/src/java/org/ geronimo-assembly-plugin/src/java/org/apach...

Author: jdillon
Date: Fri Jul  7 01:06:37 2006
New Revision: 419837

URL: http://svn.apache.org/viewvc?rev=419837&view=rev
Log:
Adding assembly plugin from patch in GERONIMO-1737; augmented to use MojoSupport and improved error handling

Added:
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml   (with props)
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java   (with props)
Modified:
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-packaging-plugin/pom.xml
    geronimo/sandbox/svkmerge/m2migration/m2-plugins/pom.xml

Added: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml?rev=419837&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml (added)
+++ geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml Fri Jul  7 01:06:37 2006
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2006 The Apache Software Foundation
+    
+    Licensed 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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.geronimo.plugins</groupId>
+        <artifactId>plugins-parent</artifactId>
+        <version>1.2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <artifactId>geronimo-assembly-plugin</artifactId>
+    <name>Geronimo Plugins :: Assembly</name>
+    <packaging>maven-plugin</packaging>
+    
+    <dependencies>
+        
+        <dependency>
+            <groupId>${pom.groupId}</groupId>
+            <artifactId>plugin-support</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-kernel</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-system</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <configuration>
+                    <goalPrefix>assembly</goalPrefix>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
+

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java?rev=419837&view=auto
==============================================================================
--- geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java (added)
+++ geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java Fri Jul  7 01:06:37 2006
@@ -0,0 +1,262 @@
+/*
+ *  Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed 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.geronimo.plugin.assembly;
+
+import org.apache.geronimo.kernel.config.InvalidConfigException;
+import org.apache.geronimo.kernel.config.NoSuchConfigException;
+import org.apache.geronimo.kernel.config.ConfigurationData;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.kernel.repository.ArtifactManager;
+import org.apache.geronimo.kernel.repository.ArtifactResolver;
+import org.apache.geronimo.kernel.repository.DefaultArtifactManager;
+import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.geronimo.kernel.repository.FileWriteMonitor;
+import org.apache.geronimo.kernel.repository.MissingDependencyException;
+import org.apache.geronimo.kernel.repository.Dependency;
+import org.apache.geronimo.kernel.repository.WritableListableRepository;
+import org.apache.geronimo.system.repository.Maven2Repository;
+import org.apache.geronimo.system.configuration.RepositoryConfigurationStore;
+import org.apache.geronimo.system.resolver.ExplicitDefaultArtifactResolver;
+
+import org.apache.geronimo.plugin.MojoSupport;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.Collections;
+
+//
+// TODO: Rename to InstallConfigMojo
+//
+
+/**
+ * @goal installConfig
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ConfigInstallerMojo
+    extends MojoSupport
+{
+    public static final FileWriteMonitor LOG_COPY_START = new StartFileWriteMonitor();
+
+    /**
+     * The Maven Project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+
+    /**
+     * Root file of the TargetRepository.
+     *
+     * @parameter expression="${project.build.directory}"
+     */
+    private String targetRoot;
+
+    /**
+     * The location of the target repository relative to targetRoot.
+     * 
+     * @parameter default-value="archive-tmp/repository"
+     */
+    private String targetRepository;
+
+    /**
+     * Configuration to be installed specified as groupId/artifactId/version/type
+     * if none specified, plugin will install all dependencies of type "car"
+     *
+     * @parameter
+     * @optional
+     */
+    private String artifact;
+
+    /**
+     * Location of the source repository for the dependencies
+     *
+     * @parameter expression="${localRepository}"
+     */
+    private ArtifactRepository sourceRepository;
+
+    /**
+     * @parameter expression="${basedir}/../../etc/explicit_versions.properties"
+     */
+    private String explicitResolutionLocation;
+
+    private ArtifactResolver artifactResolver;
+
+    private WritableListableRepository targetRepo;
+    private RepositoryConfigurationStore targetStore;
+
+    private WritableListableRepository sourceRepo;
+    private RepositoryConfigurationStore sourceStore;
+
+    protected void doExecute() throws Exception {
+        sourceRepo = new Maven2Repository(new File(sourceRepository.getBasedir()));
+        sourceStore = new RepositoryConfigurationStore(sourceRepo);
+
+        File targetRepoFile = new File(targetRoot, targetRepository);
+        if (  !targetRepoFile.exists() ) {
+            targetRepoFile.mkdirs();
+        }
+        
+        targetRepo = new Maven2Repository(targetRepoFile);
+        targetStore = new RepositoryConfigurationStore(targetRepo);
+
+        Artifact configId;
+        ArtifactManager artifactManager = new DefaultArtifactManager();
+        artifactResolver = new ExplicitDefaultArtifactResolver(explicitResolutionLocation,
+                artifactManager, Collections.singleton(sourceRepo), null);
+
+        if ( artifact != null ) {
+            configId = Artifact.create(artifact);
+            execute(configId);
+        }
+        else {
+            Iterator itr = getDependencies().iterator();
+            while ( itr.hasNext() ) {
+                org.apache.maven.artifact.Artifact  mavenArtifact = (org.apache.maven.artifact.Artifact) itr.next();
+                if ( "car".equals(mavenArtifact.getType()) ) {
+                    configId = new Artifact(mavenArtifact.getGroupId(), mavenArtifact.getArtifactId(), mavenArtifact.getVersion(), "car");
+                    execute(configId);
+                }
+            }
+        }
+    }
+
+    /**
+     * Retrieves all artifact dependencies.
+     *
+     * @return A HashSet of artifacts
+     */
+    protected Set getDependencies() {
+        Set dependenciesSet = new HashSet();
+
+        if ( project.getArtifact() != null && project.getArtifact().getFile() != null )
+        {
+            dependenciesSet.add( project.getArtifact() );
+        }
+
+        Set projectArtifacts = project.getArtifacts();
+        if ( projectArtifacts != null )
+        {
+            dependenciesSet.addAll( projectArtifacts );
+        }
+
+        return dependenciesSet;
+    }
+
+    private void execute(Artifact configId) throws Exception {
+        LinkedHashSet dependencies;
+
+        // does this configuration exist?
+        if (!sourceRepo.contains(configId)) {
+            throw new NoSuchConfigException(configId);
+        }
+
+        // is this config already installed?
+        if (targetStore.containsConfiguration(configId)) {
+            log.info("Configuration " + configId + " already present in configuration store");
+            return;
+        }
+
+        if (sourceStore.containsConfiguration(configId)) {
+            // Copy the configuration into the target configuration store
+            if (!targetStore.containsConfiguration(configId)) {
+                File sourceFile = sourceRepo.getLocation(configId);
+                InputStream in = new FileInputStream(sourceFile);
+                try {
+                    targetStore.install(in, (int)sourceFile.length(), configId, LOG_COPY_START);
+                }
+                finally {
+                    in.close();
+                }
+            }
+
+            // Determine the dependencies of this configuration
+            try {
+                ConfigurationData configurationData = targetStore.loadConfiguration(configId);
+                Environment environment = configurationData.getEnvironment();
+                dependencies = new LinkedHashSet();
+                for (Iterator iterator = environment.getDependencies().iterator(); iterator.hasNext();) {
+                    Dependency dependency = (Dependency) iterator.next();
+                    dependencies.add(dependency.getArtifact());
+                }
+
+                log.info("Installed configuration " + configId);
+            }
+            catch (IOException e) {
+                throw new InvalidConfigException("Unable to load configuration: " + configId, e);
+            }
+            catch (NoSuchConfigException e) {
+                throw new InvalidConfigException("Unable to load configuration: " + configId, e);
+            }
+        }
+        else {
+            if (!sourceRepo.contains(configId)) {
+                throw new RuntimeException("Dependency: " + configId + " not found in local maven repo: for configuration: " + artifact);
+            }
+
+            // Copy the artifact into the target repo
+            if (!targetRepo.contains(configId)) {
+                File sourceFile = sourceRepo.getLocation(configId);
+                InputStream in = new FileInputStream(sourceFile);
+                try {
+                    targetRepo.copyToRepository(in, (int)sourceFile.length(), configId, LOG_COPY_START);
+                }
+                finally {
+                    in.close();
+                }
+            }
+
+            // Determine the dependencies of this artifact
+            dependencies = sourceRepo.getDependencies(configId);
+        }
+        
+        dependencies = artifactResolver.resolveInClassLoader(dependencies);
+        for (Iterator iterator = dependencies.iterator(); iterator.hasNext();) {
+            Artifact artifact = (Artifact) iterator.next();
+            execute(artifact);
+        }
+    }
+
+    private static class StartFileWriteMonitor implements FileWriteMonitor {
+        public void writeStarted(String fileDescription, int fileSize) {
+            //
+            // FIXME: Using logging?
+            //
+            System.out.println("Copying " + fileDescription);
+        }
+
+        public void writeProgress(int bytes) {
+            // ???
+        }
+
+        public void writeComplete(int bytes) {
+            // ???
+        }
+    }
+}

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-assembly-plugin/src/java/org/apache/geronimo/plugin/assembly/ConfigInstallerMojo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-packaging-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-packaging-plugin/pom.xml?rev=419837&r1=419836&r2=419837&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-packaging-plugin/pom.xml (original)
+++ geronimo/sandbox/svkmerge/m2migration/m2-plugins/geronimo-packaging-plugin/pom.xml Fri Jul  7 01:06:37 2006
@@ -141,12 +141,10 @@
         </dependency> 
     </dependencies>
 
-    <!-- bind jmxDistribute to deploy -->
     <build>
         <plugins>
             <plugin>
                 <artifactId>maven-plugin-plugin</artifactId>
-                <version>2.1</version>
                 <configuration>
                     <goalPrefix>car</goalPrefix>
                 </configuration>

Modified: geronimo/sandbox/svkmerge/m2migration/m2-plugins/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/m2migration/m2-plugins/pom.xml?rev=419837&r1=419836&r2=419837&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/m2migration/m2-plugins/pom.xml (original)
+++ geronimo/sandbox/svkmerge/m2migration/m2-plugins/pom.xml Fri Jul  7 01:06:37 2006
@@ -64,7 +64,20 @@
     <modules>
         <module>plugin-support</module>
         <module>geronimo-packaging-plugin</module>
+        <module>geronimo-assembly-plugin</module>
     </modules>
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-plugin-plugin</artifactId>
+                    <version>2.1</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
     
 </project>