[ http://jira.codehaus.org/browse/MDEP-13?page=all ]

Brett Porter moved MOJO-214 to MDEP-13:
---------------------------------------

    Fix Version:     (was: 1.1)
            Key: MDEP-13  (was: MOJO-214)
        Project: Maven 2.x Dependency Plugin  (was: Mojo)

> [dependency-maven-plugin] only copy "direct" dependencies not transitive 
> dependencies
> -------------------------------------------------------------------------------------
>
>          Key: MDEP-13
>          URL: http://jira.codehaus.org/browse/MDEP-13
>      Project: Maven 2.x Dependency Plugin
>         Type: Improvement

>     Reporter: Wim Deblauwe
>     Assignee: Brian Fox

>
>
> I would like to be able to copy only the direct dependies without the 
> transitive dependencies for the following use cases:
> Using Merge Modules in InstallShield:
> a merge module bundles a jar into some re-usable object for InstallShield. So 
> in the pom.xml of my merge module, I have a direct dependency on that 
> perticular jar file. But that jar file also has it's own dependencies, I 
> don't want to copy those other dependencies, I only want that jar file.
> Taking this further to building the final installer: this bundles all merge 
> modules. So in the pom.xml of the installer, I have dependencies on merge 
> modules. I don't want to copy any jar dependencies that are below that also.
> I already created a Mojo that does all I want but it would be better if this 
> also included in the dependency plugin.
> This is the code I have:
> package com.mycomp.maven.plugin.msm;
> import org.apache.maven.artifact.Artifact ;
> import org.apache.maven.model.Dependency;
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.plugin.MojoExecutionException;
> import org.apache.maven.plugin.MojoFailureException;
> import org.codehaus.plexus.util.FileUtils ;
> import java.io.File;
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Iterator;
> import java.util.List;
> /**
>  * @goal process-resources
>  * @requiresDependencyResolution
>  * @description Copy the dependencies for the InstallShield Merge Module
>  */
> public class MsmProcessResourcesMojo extends AbstractMojo
> {
>     /**
>      * @parameter expression="${ project.artifacts}"
>      * @required
>      * @read-only
>      */
>     private Collection artifacts;
>     /**
>      * @parameter expression="${project.dependencies}
>      * @required
>      * @read-only
>      */
>     private Collection dependencies;
>     /**
>      * @parameter expression="${project.build.directory}/resources"
>      * @required
>      */
>     private File targetDirectory;
>     /**
>      * @parameter expression="${stripVersions}" default-value="true"
>      */
>     private boolean stripVersions;
>     /**
>      * @parameter expression="${limitToExtension}"
>      */
>     private String limitToExtension;
>     /**
>      * @parameter expression="${useSubDirectoryPerType}" default-value="true"
>      */
>     private boolean useSubDirectoryPerType;
>     public MsmProcessResourcesMojo()
>     {
>     }
>     public void execute() throws MojoExecutionException, MojoFailureException
>     {
>         try
>         {
>             getLog().info( "Process Resources for InstallShield Merge 
> Module..." );
>             List firstListArtifacts = getFirstLineArtifacts();
>             Iterator iterator = firstListArtifacts.iterator();
>             while (iterator.hasNext())
>             {
>                 Artifact artifact = (Artifact)iterator.next();
>                 if (limitToExtension == null || limitToExtension.equals( 
> artifact.getType() ))
>                 {
>                     File targetDir;
>                     if( useSubDirectoryPerType )
>                     {
>                         targetDir = new File( targetDirectory, 
> artifact.getType() + "s" );
>                     }
>                     else
>                     {
>                         targetDir = targetDirectory;
>                     }
>                    
>                     getLog().info( "Copying artifact: " + artifact.toString() 
> );
>                     if (stripVersions)
>                     {
>                         FileUtils.copyFile( artifact.getFile(), new File( 
> targetDir, artifact.getGroupId() + "." + artifact.getType() ) );
>                     }
>                     else
>                     {
>                         FileUtils.copyFileToDirectory( artifact.getFile(), 
> targetDir );
>                     }
>                 }
>             }
>         }
>         catch (IOException e)
>         {
>             throw new MojoExecutionException( "Error copying artifacts", e );
>         }
>     }
>     private List getFirstLineArtifacts()
>     {
>         List result = new ArrayList( dependencies.size() );
>         Iterator iterator = artifacts.iterator();
>         while (iterator.hasNext ())
>         {
>             Artifact artifact = (Artifact)iterator.next();
>             if (artifactIsADirectDependency( artifact ))
>             {
>                 result.add( artifact );
>             }
>         }
>         return result;
>     }
>     private boolean artifactIsADirectDependency( Artifact artifact )
>     {
>         boolean result = false;
>         Iterator iterator = dependencies.iterator();
>         while ( iterator.hasNext())
>         {
>             Dependency dependency = (Dependency)iterator.next();
>             if (dependency.getGroupId().equals( artifact.getGroupId() )
>                     && dependency.getArtifactId ().equals( 
> artifact.getArtifactId() ))
>             {
>                 result = true;
>                 break;
>             }
>         }
>         return result;
>     }
> }
> Note that I have 2 additional options:
> - limitToExtension: if you only want to copy dependencies with a certain 
> extension (e.g. only .msm or .dll files for example)
> - useSubDirectoryPerType: this will create a structure as follows (simular to 
> m1 repo) :
>      * root dir
>           * dlls
>               * mydll.dll
>           * msms
>               * mymsm.dll
> regards,
> Wim

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to