incubator-nmaven-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sisb...@apache.org
Subject svn commit: r543698 - in /incubator/nmaven/trunk/plugins/maven-repository-plugin: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/main/java/org/apache/maven/dotnet/ src/main/java/org/apa...
Date Sat, 02 Jun 2007 03:04:35 GMT
Author: sisbell
Date: Fri Jun  1 20:04:34 2007
New Revision: 543698

URL: http://svn.apache.org/viewvc?view=rev&rev=543698
Log:
Initial import of repository plugin. This is similar to the maven-assembly-plugin but handles
both .NET and Java artifacts.

Added:
    incubator/nmaven/trunk/plugins/maven-repository-plugin/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml   (with props)
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/
    incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java
  (with props)

Added: incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml?view=auto&rev=543698
==============================================================================
--- incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml (added)
+++ incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml Fri Jun  1 20:04:34 2007
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+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.
+-->
+<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">
+  <parent>
+    <groupId>org.apache.maven.dotnet.plugins</groupId>
+    <version>0.14-SNAPSHOT</version>
+    <artifactId>maven-dotnet-plugins</artifactId>
+  </parent>  
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.dotnet.plugins</groupId>
+  <artifactId>maven-repository-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>maven-repository-plugin</name>
+  <description>
+    Maven Plugin for .NET
+  </description>
+</project>
\ No newline at end of file

Propchange: incubator/nmaven/trunk/plugins/maven-repository-plugin/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java?view=auto&rev=543698
==============================================================================
--- incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java
(added)
+++ incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java
Fri Jun  1 20:04:34 2007
@@ -0,0 +1,248 @@
+package org.apache.maven.dotnet.plugin.repository;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
+import org.apache.maven.artifact.deployer.ArtifactDeployer;
+import org.apache.maven.dotnet.artifact.AssemblyResolver;
+import org.apache.maven.dotnet.artifact.ArtifactType;
+import org.apache.maven.dotnet.artifact.AssemblyRepositoryLayout;
+import org.apache.maven.dotnet.artifact.ArtifactContext;
+import org.apache.maven.dotnet.registry.RepositoryRegistry;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.ProjectArtifactMetadata;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.io.File;
+import java.io.IOException;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+
+/**
+ * @author Shane Isbell
+ * @goal package
+ */
+public class RepositoryAssemblerMojo
+    extends AbstractMojo
+{
+    /**
+     * The maven project.
+     *
+     * @parameter expression="${project}"
+     * @required
+     */
+    private MavenProject project;
+
+    /**
+     * @parameter expression="${settings.localRepository}"
+     * @readonly
+     */
+    private String localRepository;
+
+    /**
+     * @component
+     */
+    private AssemblyResolver assemblyResolver;
+
+    /**
+     * @component
+     */
+    private ArtifactDeployer artifactDeployer;
+
+    /**
+     * Component used to create a repository
+     *
+     * @component
+     */
+    private ArtifactRepositoryFactory repositoryFactory;
+
+    /**
+     * @component
+     */
+    private ArtifactFactory artifactFactory;
+
+    /**
+     * @component
+     */
+    private org.apache.maven.dotnet.NMavenRepositoryRegistry nmavenRegistry;
+
+    /**
+     * @component
+     */
+    private ArtifactContext artifactContext;
+
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        RepositoryRegistry repositoryRegistry;
+        try
+        {
+            repositoryRegistry = nmavenRegistry.createRepositoryRegistry();
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException(
+                "NMAVEN-1600-000: Failed to create the repository registry for this plugin",
e );
+        }
+
+        artifactContext.init( project, project.getRemoteArtifactRepositories(), new File(
localRepository ) );
+
+        List<Dependency> javaDependencies = new ArrayList<Dependency>();
+        List<Dependency> netDependencies = new ArrayList<Dependency>();
+
+        for ( Dependency dependency : (List<Dependency>) project.getDependencies()
)
+        {
+            if ( !dependency.getType().equals( ArtifactType.LIBRARY.getTargetCompileType()
) )
+            {
+                javaDependencies.add( dependency );
+            }
+            else
+            {
+                netDependencies.add( dependency );
+            }
+        }
+
+        assemblyRepository( javaDependencies, new DefaultRepositoryLayout() );
+        assemblyRepository( netDependencies, new AssemblyRepositoryLayout() );
+    }
+
+    public void assemblyRepository( List<Dependency> dependencies, ArtifactRepositoryLayout
layout )
+        throws MojoExecutionException, MojoFailureException
+    {
+        if ( dependencies.size() == 0 )
+        {
+            return;
+        }
+
+        ArtifactRepository localArtifactRepository =
+            new DefaultArtifactRepository( "local", "file://" + localRepository, layout );
+        ArtifactRepository deploymentRepository = repositoryFactory.createDeploymentArtifactRepository(
null,
+                                                                                        
               "file://" + project.getBuild().getDirectory() +
+                                                                                        
                   "/archive-temp/releases",
+                                                                                        
               new DefaultRepositoryLayout(),
+                                                                                        
               true );
+
+        try
+        {
+            assemblyResolver.resolveTransitivelyFor( project, project.getArtifact(), dependencies,
+                                                     project.getRemoteArtifactRepositories(),
localArtifactRepository,
+                                                     true );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new MojoExecutionException( "NMAVEN-901-000: Unable to resolve assemblies",
e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new MojoExecutionException( "NMAVEN-901-001: Unable to resolve assemblies",
e );
+        }
+
+        for ( Artifact artifact : (Set<Artifact>) project.getDependencyArtifacts()
)
+        {
+            Set<Artifact> pomParentArtifacts = getPomArtifactsFor( artifact.getGroupId(),
artifact.getArtifactId(),
+                                                                   artifact.getVersion(),
layout, true );
+            Set<Artifact> pomArtifacts = getPomArtifactsFor( artifact.getGroupId(),
artifact.getArtifactId(),
+                                                             artifact.getVersion(), layout,
false );
+            if ( pomArtifacts.size() == 1 )
+            {
+                ArtifactMetadata metadata =
+                    new ProjectArtifactMetadata( artifact, pomArtifacts.toArray( new Artifact[1]
)[0].getFile() );
+                artifact.addMetadata( metadata );
+            }
+
+            try
+            {
+                artifactDeployer.deploy( artifact.getFile(), artifact, deploymentRepository,
localArtifactRepository );
+                //Deploy parent poms
+                for ( Artifact pomArtifact : pomParentArtifacts )
+                {
+                    artifactDeployer.deploy( pomArtifact.getFile(), pomArtifact, deploymentRepository,
+                                             localArtifactRepository );
+                }
+            }
+            catch ( ArtifactDeploymentException e )
+            {
+                throw new MojoExecutionException( "NMAVEN-DEPLOY: Deploy Failed", e );
+            }
+        }
+    }
+
+    private Set<Artifact> getPomArtifactsFor( String groupId, String artifactId, String
version,
+                                              ArtifactRepositoryLayout layout, boolean addParents
)
+        throws MojoExecutionException
+    {
+        Set<Artifact> pomArtifacts = new HashSet<Artifact>();
+        Artifact pomArtifact = artifactFactory.createArtifact( groupId, artifactId, version,
"pom", "pom" );
+        File pomFile = new File( localRepository, layout.pathOf( pomArtifact ) );
+
+        if ( pomFile.exists() )
+        {
+            File tmpFile = null;
+            try
+            {
+                tmpFile = File.createTempFile( "pom" + artifactId, "pom" );
+                FileUtils.copyFile( pomFile, tmpFile );
+            }
+            catch ( IOException e )
+            {
+                e.printStackTrace();
+            }
+            pomArtifact.setFile( tmpFile );
+            pomArtifacts.add( pomArtifact );
+            FileReader fileReader;
+            try
+            {
+                fileReader = new FileReader( tmpFile );
+            }
+            catch ( FileNotFoundException e )
+            {
+                throw new MojoExecutionException( "NMAVEN-000-000: Unable to read pom" );
+            }
+            MavenXpp3Reader reader = new MavenXpp3Reader();
+            Model model;
+            try
+            {
+                model = reader.read( fileReader );
+            }
+            catch ( XmlPullParserException e )
+            {
+                throw new MojoExecutionException( "NMAVEN-000-000: Unable to read model"
);
+
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "NMAVEN-000-000: Unable to read model"
);
+            }
+
+            Parent parent = model.getParent();
+
+            if ( parent != null && addParents )
+            {
+                pomArtifacts.addAll( getPomArtifactsFor( parent.getGroupId(), parent.getArtifactId(),
+                                                         parent.getVersion(), layout, true
) );
+            }
+        }
+
+        return pomArtifacts;
+    }
+}

Propchange: incubator/nmaven/trunk/plugins/maven-repository-plugin/src/main/java/org/apache/maven/dotnet/plugin/repository/RepositoryAssemblerMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message