You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ke...@apache.org on 2005/09/15 12:14:39 UTC

svn commit: r289188 - in /maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse: EclipseClasspathWriter.java EclipsePlugin.java EclipseSettingsWriter.java EclipseUtils.java

Author: kenney
Date: Thu Sep 15 03:14:32 2005
New Revision: 289188

URL: http://svn.apache.org/viewcvs?rev=289188&view=rev
Log:
o Did some refactoring: moving utility methods to EclipseUtils so there's no
  confusion as to which project is used.

o Use executedProject everywhere except for acquiring the artifact list; the 
  executedProject misses that list (that's because no deps are resolved in
  the forked lifecycle execution; it's delayed until the plugin is encountered
  and it's requiresDependencyResolution is seen.)

o Added flag -Declipse.downloadSources=true|false to skip source downloading

Modified:
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
    maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java

Modified: maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java (original)
+++ maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseClasspathWriter.java Thu Sep 15 03:14:32 2005
@@ -57,7 +57,7 @@
     protected void write( File projectBaseDir, File basedir, MavenProject project, List referencedReactorArtifacts,
                          EclipseSourceDir[] sourceDirs, List classpathContainers, ArtifactRepository localRepository,
                          ArtifactResolver artifactResolver, ArtifactFactory artifactFactory,
-                         List remoteArtifactRepositories )
+                         List remoteArtifactRepositories, boolean downloadSources )
         throws EclipsePluginException
     {
 
@@ -128,7 +128,7 @@
         {
             Artifact artifact = (Artifact) it.next();
             addDependency( writer, artifact, referencedReactorArtifacts, localRepository, artifactResolver,
-                           artifactFactory, remoteArtifactRepositories );
+                           artifactFactory, remoteArtifactRepositories, downloadSources );
         }
 
         // ----------------------------------------------------------------------
@@ -150,7 +150,8 @@
 
     private void addDependency( XMLWriter writer, Artifact artifact, List referencedReactorArtifacts,
                                ArtifactRepository localRepository, ArtifactResolver artifactResolver,
-                               ArtifactFactory artifactFactory, List remoteArtifactRepositories )
+                               ArtifactFactory artifactFactory, List remoteArtifactRepositories,
+                               boolean downloadSources )
     {
 
         String path;
@@ -173,51 +174,33 @@
             }
 
             String fullPath = artifactPath.getPath();
+
             File localRepositoryFile = new File( localRepository.getBasedir() );
 
             path = "M2_REPO/" //$NON-NLS-1$
                 + EclipseUtils.toRelativeAndFixSeparator( localRepositoryFile, fullPath, false );
 
-            // source artifact: use the "sources" classifier added by the source plugin
-            Artifact sourceArtifact = artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact
-                .getArtifactId(), artifact.getVersion(), "java-source", "sources" ); //$NON-NLS-1$ //$NON-NLS-2$
-
-            try
+            if ( downloadSources )
             {
-                if ( log.isDebugEnabled() )
+            	Artifact sourceArtifact = retrieveSourceArtifact( artifact, remoteArtifactRepositories,
+                                                                  localRepository, artifactResolver, artifactFactory );
+            	
+                if ( !sourceArtifact.isResolved() )
                 {
-                    log.debug( Messages.getString( "EclipseClasspathWriter.lookingforsources", //$NON-NLS-1$
-                                                   sourceArtifact.getArtifactId() ) );
+                    log.info( Messages.getString( "EclipseClasspathWriter.sourcesnotavailable", //$NON-NLS-1$
+                                                  sourceArtifact.getArtifactId() ) );
                 }
-                artifactResolver.resolve( sourceArtifact, remoteArtifactRepositories, localRepository );
-            }
-            catch ( ArtifactResolutionException e )
-            {
-                // ignore, the jar has not been found
-                if ( log.isDebugEnabled() )
-                {
-                    log.debug( e.getMessage(), e );
-                }
-            }
-
-            File sourceArtifactFile = sourceArtifact.getFile();
-
-            if ( !sourceArtifact.isResolved() )
-            {
-                log.info( Messages.getString( "EclipseClasspathWriter.sourcesnotavailable", //$NON-NLS-1$
-                                              sourceArtifact.getArtifactId() ) );
-            }
-            else
-            {
-                if ( log.isDebugEnabled() )
+                else
                 {
                     log.debug( Messages.getString( "EclipseClasspathWriter.sourcesavailable", //$NON-NLS-1$
                                                    new Object[] {
                                                        sourceArtifact.getArtifactId(),
-                                                       sourceArtifactFile.getPath() } ) );
+                                                       sourceArtifact.getFile().getAbsolutePath() } ) );
+
+                    sourcepath = "M2_REPO/" //$NON-NLS-1$
+                        + EclipseUtils.toRelativeAndFixSeparator( localRepositoryFile, sourceArtifact.getFile().getAbsolutePath(), false );
                 }
-                sourcepath = "M2_REPO/" //$NON-NLS-1$
-                    + EclipseUtils.toRelativeAndFixSeparator( localRepositoryFile, sourceArtifactFile.getPath(), false );
+
             }
 
             kind = "var"; //$NON-NLS-1$
@@ -236,5 +219,31 @@
 
     }
 
+    
+    private Artifact retrieveSourceArtifact( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository, ArtifactResolver artifactResolver,
+                                       ArtifactFactory artifactFactory )
+    {
+        // source artifact: use the "sources" classifier added by the source plugin
+        Artifact sourceArtifact = artifactFactory.createArtifactWithClassifier( artifact.getGroupId(), artifact
+            .getArtifactId(), artifact.getVersion(), "java-source", "sources" ); //$NON-NLS-1$ //$NON-NLS-2$
+
+        try
+        {
+            log.debug( Messages.getString( "EclipseClasspathWriter.lookingforsources", //$NON-NLS-1$
+                                               sourceArtifact.getArtifactId() ) );
+
+            artifactResolver.resolve( sourceArtifact, remoteArtifactRepositories, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            // ignore, the jar has not been found
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Cannot resolve source artifact", e );
+            }
+        }
+        
+        return sourceArtifact;
+    }
 }
 

Modified: maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java (original)
+++ maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipsePlugin.java Thu Sep 15 03:14:32 2005
@@ -16,22 +16,16 @@
  * limitations under the License.
  */
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * A Maven2 plugin which integrates the use of Maven2 with Eclipse.
@@ -46,12 +40,6 @@
 public class EclipsePlugin
     extends AbstractMojo
 {
-
-    /**
-     * Separator used for natures, builders, etc. (can't use space since conclasspath entries can contain spaces).
-     */
-    private static final String LIST_SEPARATOR = ","; //$NON-NLS-1$
-
     /**
      * The project whose project files to create.
      * @parameter expression="${project}"
@@ -151,6 +139,13 @@
     private List classpathContainers;
 
     /**
+     * Disables the downloading of source attachments.
+     * 
+     * @parameter expression="${eclipse.downloadSources}"
+     */
+    private boolean downloadSources = true;
+
+    /**
      * Eclipse workspace directory.
      * @parameter expression="${eclipse.workspace}"
      */
@@ -243,9 +238,14 @@
     public void execute()
         throws MojoExecutionException
     {
-
-        assertNotEmpty( project.getGroupId(), "groupId" ); //$NON-NLS-1$
-        assertNotEmpty( project.getArtifactId(), "artifactId" ); //$NON-NLS-1$
+        if ( executedProject == null )
+        {
+            // backwards compat with alpha-2 only
+            executedProject = project;
+        }
+    	
+        assertNotEmpty( executedProject.getGroupId(), "groupId" ); //$NON-NLS-1$
+        assertNotEmpty( executedProject.getArtifactId(), "artifactId" ); //$NON-NLS-1$
 
         // defaults
         // @todo how set List values in @default-value??
@@ -254,23 +254,25 @@
             projectnatures = new ArrayList();
             projectnatures.add( "org.eclipse.jdt.core.javanature" );
         }
+
         if ( buildcommands == null )
         {
             buildcommands = new ArrayList();
             buildcommands.add( "org.eclipse.jdt.core.javabuilder" );
         }
+
         if ( classpathContainers == null )
         {
             classpathContainers = new ArrayList();
         }
         // end defaults
 
-        if ( project.getFile() == null || !project.getFile().exists() )
+        if ( executedProject.getFile() == null || !executedProject.getFile().exists() )
         {
             throw new MojoExecutionException( Messages.getString( "EclipsePlugin.missingpom" ) ); //$NON-NLS-1$
         }
 
-        if ( "pom".equals( project.getPackaging() ) ) //$NON-NLS-1$
+        if ( "pom".equals( executedProject.getPackaging() ) && outputDir == null ) //$NON-NLS-1$
         {
             getLog().info( Messages.getString( "EclipsePlugin.pompackaging" ) ); //$NON-NLS-1$
             return;
@@ -278,16 +280,16 @@
 
         if ( outputDir == null )
         {
-            outputDir = project.getFile().getParentFile();
+            outputDir = executedProject.getFile().getParentFile();
         }
-        else if ( !outputDir.equals( project.getFile().getParentFile() ) )
+        else if ( !outputDir.equals( executedProject.getFile().getParentFile() ) )
         {
             if ( !outputDir.isDirectory() )
             {
                 throw new MojoExecutionException( Messages.getString( "EclipsePlugin.notadir", outputDir ) ); //$NON-NLS-1$
             }
 
-            outputDir = new File( outputDir, project.getArtifactId() );
+            outputDir = new File( outputDir, executedProject.getArtifactId() );
 
             if ( !outputDir.isDirectory() && !outputDir.mkdir() )
             {
@@ -295,12 +297,6 @@
             }
         }
 
-        if ( executedProject == null )
-        {
-            // backwards compat with alpha-2 only
-            executedProject = project;
-        }
-
         // ready to start
         write();
 
@@ -309,25 +305,25 @@
     public void write()
         throws EclipsePluginException
     {
-
-        File projectBaseDir = project.getFile().getParentFile();
+        File projectBaseDir = executedProject.getFile().getParentFile();
 
         // build the list of referenced ARTIFACTS produced by reactor projects
-        List reactorArtifacts = resolveReactorArtifacts();
+        List reactorArtifacts = EclipseUtils.resolveReactorArtifacts( project, reactorProjects );
 
         // build a list of UNIQUE source dirs (both src and resources) to be used in classpath and wtpmodules
-        EclipseSourceDir[] sourceDirs = buildDirectoryList( project, outputDir );
+        EclipseSourceDir[] sourceDirs = EclipseUtils.buildDirectoryList( executedProject, outputDir, getLog() );
 
+        // use project since that one has all artifacts resolved.
         new EclipseClasspathWriter( getLog() ).write( projectBaseDir, outputDir, project, reactorArtifacts, sourceDirs,
                                                       classpathContainers, localRepository, artifactResolver,
-                                                      artifactFactory, remoteArtifactRepositories );
+                                                      artifactFactory, remoteArtifactRepositories, downloadSources );
 
         new EclipseProjectWriter( getLog() ).write( projectBaseDir, outputDir, project, executedProject,
                                                     reactorArtifacts, projectnatures, buildcommands );
 
-        new EclipseSettingsWriter( getLog() ).write( projectBaseDir, outputDir, project, executedProject );
+        new EclipseSettingsWriter( getLog() ).write( projectBaseDir, outputDir, executedProject );
 
-        new EclipseWtpmodulesWriter( getLog() ).write( outputDir, project, reactorArtifacts, sourceDirs,
+        new EclipseWtpmodulesWriter( getLog() ).write( outputDir, executedProject, reactorArtifacts, sourceDirs,
                                                        localRepository );
 
         getLog().info( Messages.getString( "EclipsePlugin.wrote", //$NON-NLS-1$
@@ -342,166 +338,4 @@
             throw new EclipsePluginException( Messages.getString( "EclipsePlugin.missingelement", elementName ) ); //$NON-NLS-1$
         }
     }
-
-    private EclipseSourceDir[] buildDirectoryList( MavenProject project, File basedir )
-    {
-        File projectBaseDir = project.getFile().getParentFile();
-
-        // avoid duplicated entries
-        Set directories = new TreeSet();
-
-        extractSourceDirs( directories, executedProject.getCompileSourceRoots(), basedir, projectBaseDir, false, null );
-
-        extractResourceDirs( directories, project.getBuild().getResources(), project, basedir, projectBaseDir, false,
-                             null );
-
-        extractSourceDirs( directories, executedProject.getTestCompileSourceRoots(), basedir, projectBaseDir, true,
-                           EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, project.getBuild()
-                               .getTestOutputDirectory(), false ) );
-
-        extractResourceDirs( directories, project.getBuild().getTestResources(), project, basedir, projectBaseDir,
-                             true, EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, project.getBuild()
-                                 .getTestOutputDirectory(), false ) );
-
-        return (EclipseSourceDir[]) directories.toArray( new EclipseSourceDir[directories.size()] );
-    }
-
-    private void extractSourceDirs( Set directories, List sourceRoots, File basedir, File projectBaseDir, boolean test,
-                                   String output )
-    {
-        for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
-        {
-            String sourceRoot = (String) it.next();
-
-            if ( new File( sourceRoot ).isDirectory() )
-            {
-                sourceRoot = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, sourceRoot, !projectBaseDir
-                    .equals( basedir ) );
-
-                directories.add( new EclipseSourceDir( sourceRoot, output, test, null, null ) );
-            }
-        }
-    }
-
-    private void extractResourceDirs( Set directories, List resources, MavenProject project, File basedir,
-                                     File projectBaseDir, boolean test, String output )
-    {
-        for ( Iterator it = resources.iterator(); it.hasNext(); )
-        {
-
-            Resource resource = (Resource) it.next();
-            String includePattern = null;
-            String excludePattern = null;
-
-            if ( resource.getIncludes().size() != 0 )
-            {
-                // @todo includePattern = ?
-                getLog().warn( Messages.getString( "EclipsePlugin.includenotsupported" ) ); //$NON-NLS-1$
-            }
-
-            if ( resource.getExcludes().size() != 0 )
-            {
-                // @todo excludePattern = ?
-                getLog().warn( Messages.getString( "EclipsePlugin.excludenotsupported" ) ); //$NON-NLS-1$
-            }
-
-            //          Example of setting include/exclude patterns for future reference.
-            //
-            //          TODO: figure out how to merge if the same dir is specified twice
-            //          with different in/exclude patterns. We can't write them now,
-            //                      since only the the first one would be included.
-            //
-            //          if ( resource.getIncludes().size() != 0 )
-            //          {
-            //              writer.addAttribute(
-            //                      "including", StringUtils.join( resource.getIncludes().iterator(), "|" )
-            //                      );
-            //          }
-            //
-            //          if ( resource.getExcludes().size() != 0 )
-            //          {
-            //              writer.addAttribute(
-            //                      "excluding", StringUtils.join( resource.getExcludes().iterator(), "|" )
-            //              );
-            //          }
-
-            if ( !StringUtils.isEmpty( resource.getTargetPath() ) )
-            {
-                output = resource.getTargetPath();
-            }
-
-            File resourceDirectory = new File( resource.getDirectory() );
-
-            if ( !resourceDirectory.exists() || !resourceDirectory.isDirectory() )
-            {
-                continue;
-            }
-
-            String resourceDir = resource.getDirectory();
-            resourceDir = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, resourceDir, !projectBaseDir
-                .equals( basedir ) );
-
-            if ( output != null )
-            {
-                output = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, output, false );
-            }
-
-            directories.add( new EclipseSourceDir( resourceDir, output, test, includePattern, excludePattern ) );
-        }
-    }
-
-    /**
-     * Returns the list of referenced artifacts produced by reactor projects.
-     * @return List of Artifacts
-     */
-    private List resolveReactorArtifacts()
-    {
-        List referencedProjects = new ArrayList();
-
-        Set artifacts = project.getArtifacts();
-
-        for ( Iterator it = artifacts.iterator(); it.hasNext(); )
-        {
-            Artifact artifact = (Artifact) it.next();
-
-            MavenProject refProject = findReactorProject( reactorProjects, artifact );
-
-            if ( refProject != null )
-            {
-                referencedProjects.add( artifact );
-            }
-        }
-
-        return referencedProjects;
-    }
-
-    /**
-     * Utility method that locates a project producing the given artifact.
-     *
-     * @param reactorProjects a list of projects to search.
-     * @param artifact the artifact a project should produce.
-     * @return null or the first project found producing the artifact.
-     */
-    private static MavenProject findReactorProject( List reactorProjects, Artifact artifact )
-    {
-        if ( reactorProjects == null )
-        {
-            return null; // we're a single project
-        }
-
-        for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
-        {
-            MavenProject project = (MavenProject) it.next();
-
-            if ( project.getGroupId().equals( artifact.getGroupId() )
-                && project.getArtifactId().equals( artifact.getArtifactId() )
-                && project.getVersion().equals( artifact.getVersion() ) )
-            {
-                return project;
-            }
-        }
-
-        return null;
-    }
-
 }

Modified: maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java (original)
+++ maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseSettingsWriter.java Thu Sep 15 03:14:32 2005
@@ -41,7 +41,7 @@
         this.log = log;
     }
 
-    protected void write( File projectBaseDir, File outputDir, MavenProject project, MavenProject executedProject )
+    protected void write( File projectBaseDir, File outputDir, MavenProject project )
         throws EclipsePluginException
     {
 

Modified: maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java?rev=289188&r1=289187&r2=289188&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java (original)
+++ maven/components/trunk/maven-plugins/maven-eclipse-plugin/src/main/java/org/apache/maven/plugin/eclipse/EclipseUtils.java Thu Sep 15 03:14:32 2005
@@ -17,9 +17,16 @@
  */
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Resource;
+import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -87,4 +94,173 @@
 
         return defaultValue;
     }
+    
+    
+
+    public static EclipseSourceDir[] buildDirectoryList( MavenProject project, File basedir, Log log )
+    {
+        File projectBaseDir = project.getFile().getParentFile();
+
+        // avoid duplicated entries
+        Set directories = new TreeSet();
+
+        EclipseUtils.extractSourceDirs( directories, project.getCompileSourceRoots(), basedir, projectBaseDir, false, null );
+
+        EclipseUtils.extractResourceDirs( directories, project.getBuild().getResources(), project, basedir, projectBaseDir, false,
+                             null, log );
+
+        EclipseUtils.extractSourceDirs( directories, project.getTestCompileSourceRoots(), basedir, projectBaseDir, true,
+                           EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, project.getBuild()
+                               .getTestOutputDirectory(), false ) );
+
+        EclipseUtils.extractResourceDirs( directories, project.getBuild().getTestResources(), project, basedir, projectBaseDir,
+                             true, EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, project.getBuild()
+                                 .getTestOutputDirectory(), false ), log );
+
+        return (EclipseSourceDir[]) directories.toArray( new EclipseSourceDir[directories.size()] );
+    }
+
+
+
+    private static void extractSourceDirs( Set directories, List sourceRoots, File basedir, File projectBaseDir, boolean test,
+                                   String output )
+    {
+        for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
+        {
+            String sourceRoot = (String) it.next();
+
+            if ( new File( sourceRoot ).isDirectory() )
+            {
+                sourceRoot = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, sourceRoot, !projectBaseDir
+                    .equals( basedir ) );
+
+                directories.add( new EclipseSourceDir( sourceRoot, output, test, null, null ) );
+            }
+        }
+    }
+
+    private static void extractResourceDirs( Set directories, List resources, MavenProject project, File basedir,
+                                     File projectBaseDir, boolean test, String output, Log log )
+    {
+        for ( Iterator it = resources.iterator(); it.hasNext(); )
+        {
+
+            Resource resource = (Resource) it.next();
+            String includePattern = null;
+            String excludePattern = null;
+
+            if ( resource.getIncludes().size() != 0 )
+            {
+                // @todo includePattern = ?
+                log.warn( Messages.getString( "EclipsePlugin.includenotsupported" ) ); //$NON-NLS-1$
+            }
+
+            if ( resource.getExcludes().size() != 0 )
+            {
+                // @todo excludePattern = ?
+                log.warn( Messages.getString( "EclipsePlugin.excludenotsupported" ) ); //$NON-NLS-1$
+            }
+
+            //          Example of setting include/exclude patterns for future reference.
+            //
+            //          TODO: figure out how to merge if the same dir is specified twice
+            //          with different in/exclude patterns. We can't write them now,
+            //                      since only the the first one would be included.
+            //
+            //          if ( resource.getIncludes().size() != 0 )
+            //          {
+            //              writer.addAttribute(
+            //                      "including", StringUtils.join( resource.getIncludes().iterator(), "|" )
+            //                      );
+            //          }
+            //
+            //          if ( resource.getExcludes().size() != 0 )
+            //          {
+            //              writer.addAttribute(
+            //                      "excluding", StringUtils.join( resource.getExcludes().iterator(), "|" )
+            //              );
+            //          }
+
+            if ( !StringUtils.isEmpty( resource.getTargetPath() ) )
+            {
+                output = resource.getTargetPath();
+            }
+
+            File resourceDirectory = new File( resource.getDirectory() );
+
+            if ( !resourceDirectory.exists() || !resourceDirectory.isDirectory() )
+            {
+                continue;
+            }
+
+            String resourceDir = resource.getDirectory();
+            resourceDir = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, resourceDir, !projectBaseDir
+                .equals( basedir ) );
+
+            if ( output != null )
+            {
+                output = EclipseUtils.toRelativeAndFixSeparator( projectBaseDir, output, false );
+            }
+
+            directories.add( new EclipseSourceDir( resourceDir, output, test, includePattern, excludePattern ) );
+        }
+    }
+
+    
+    /**
+     * Utility method that locates a project producing the given artifact.
+     *
+     * @param reactorProjects a list of projects to search.
+     * @param artifact the artifact a project should produce.
+     * @return null or the first project found producing the artifact.
+     */
+    public static MavenProject findReactorProject( List reactorProjects, Artifact artifact )
+    {
+        if ( reactorProjects == null )
+        {
+            return null; // we're a single project
+        }
+
+        for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
+        {
+            MavenProject project = (MavenProject) it.next();
+
+            if ( project.getGroupId().equals( artifact.getGroupId() )
+                && project.getArtifactId().equals( artifact.getArtifactId() )
+                && project.getVersion().equals( artifact.getVersion() ) )
+            {
+                return project;
+            }
+        }
+
+        return null;
+    }
+    
+
+    
+    /**
+     * Returns the list of referenced artifacts produced by reactor projects.
+     * @return List of Artifacts
+     */
+    public static List resolveReactorArtifacts( MavenProject project, List reactorProjects )
+    {
+        List referencedProjects = new ArrayList();
+
+        Set artifacts = project.getArtifacts();
+
+        for ( Iterator it = artifacts.iterator(); it.hasNext(); )
+        {
+            Artifact artifact = (Artifact) it.next();
+
+            MavenProject refProject = EclipseUtils.findReactorProject( reactorProjects, artifact );
+
+            if ( refProject != null )
+            {
+                referencedProjects.add( artifact );
+            }
+        }
+
+        return referencedProjects;
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org