[ http://jira.codehaus.org/browse/MOJO-214?page=comments#action_55003 ] 

Brian Fox commented on MOJO-214:
--------------------------------

You would have to specify it 2x, but if you put it in the dependencyManagement 
section, we would pick up the version from there so you would only need to 
change 1 place. It's all moot since the functionality is already there ;-)

> [dependency-maven-plugin] only copy "direct" dependencies not transitive 
> dependencies
> -------------------------------------------------------------------------------------
>
>          Key: MOJO-214
>          URL: http://jira.codehaus.org/browse/MOJO-214
>      Project: Mojo
>         Type: Improvement

>     Reporter: Wim Deblauwe
>     Assignee: Brian Fox
>      Fix For: 1.1

>
>
> 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