[ http://jira.andromda.org/browse/MAVEN-64?page=comments#action_14460 ] 

Pawel Matras commented on MAVEN-64:
-----------------------------------

Here is more robust version of the multi-source plugin (it will not fail on 
empty directories in pom.xml). Test source generation is made optional too.


package org.andromda.maven.plugin.multisource;

import java.util.Iterator;
import java.util.List;

import org.andromda.core.common.ResourceUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;


/**
 * A Mojo who's sole purpose is to allow multiple source roots
 * to be added to the project (since the Maven Compiler Plugin
 * doesn't allow it), this plugin should be removed if they
 * allow it in the future.
 *
 * @author Chad Brandon
 * @goal add-source
 * @phase generate-sources
 */
public class MultiSourceMojo
    extends AbstractMojo
{
    /**
     * The source directories containing the sources to be compiled.
     *
     * @parameter
     * @required
     */
    private List sourceDirectories;

    /**
     * The test source directories containing the sources to be compiled for 
test.
     *
     * @parameter
     */
    private List testSourceDirectories;

    /**
     * The maven project.
     *
     * @parameter expression="${project}"
     * @required
     * @readonly
     * @description "the maven project to use"
     */
    private MavenProject project;

    /**
     * @see org.apache.maven.plugin.Mojo#execute()
     */
    public void execute()
        throws MojoExecutionException, MojoFailureException
    {
        String baseDirectory = 
ResourceUtils.normalizePath(ObjectUtils.toString(project.getBasedir()) + '/');
        addNormalizedPaths( this.sourceDirectories,
            this.project.getCompileSourceRoots(), baseDirectory );
        if (this.testSourceDirectories != null)
        {
            addNormalizedPaths( this.testSourceDirectories,
                this.project.getTestCompileSourceRoots(), baseDirectory );
        }
    }
  
    private void addNormalizedPaths( List fromPaths, List toPaths, String 
baseDirectory )
    {
        for (final Iterator iterator = fromPaths.iterator(); 
iterator.hasNext();)
        {
            String path = ResourceUtils.normalizePath((String)iterator.next());
            if (path != null)
            {
                if (!path.startsWith(baseDirectory))
                {
                    path = ResourceUtils.normalizePath(baseDirectory + path);
                }
                toPaths.add(path);
            }
        }
    }
}

> Support for test-multi-source in maven
> --------------------------------------
>
>          Key: MAVEN-64
>          URL: http://jira.andromda.org/browse/MAVEN-64
>      Project: Maven Plugins
>         Type: New Feature

>  Environment: maven 2.0.4, jdk 1.5
>     Reporter: Pawel Matras
>     Assignee: Chad Brandon

>
> Modified version of 
> andromda-all/maven/2/multi-source/src/main/java/org/andromda/maven/plugin/MultiSourceMojo.java
>  follows (as I can not see an other way of attaching it). It adds to current 
> implementation a possibility for additional test source paths. Usage is 
> similar to existing one. In addition or instead of the <sourceDirectories> 
> tag you use <testSourceDirectories> tag in plugin configuration.
> I have tested it with maven 2.0.4 and jdk 1.5.
> It would be fine if this or similar patch could be applied on the 
> 3.3-SNAPSHOT branch and newer.
> ----------------------------- MultiSourceMojo.java 
> -----------------------------------
> package org.andromda.maven.plugin.multisource;
> import java.util.Iterator;
> import java.util.List;
> import org.andromda.core.common.ResourceUtils;
> import org.apache.commons.lang.ObjectUtils;
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.plugin.MojoExecutionException;
> import org.apache.maven.plugin.MojoFailureException;
> import org.apache.maven.project.MavenProject;
> /**
>  * A Mojo who's sole purpose is to allow multiple source roots
>  * to be added to the project (since the Maven Compiler Plugin
>  * doesn't allow it), this plugin should be removed if they
>  * allow it in the future.
>  *
>  * @author Chad Brandon
>  * @goal add-source
>  * @phase generate-sources
>  */
> public class MultiSourceMojo
>     extends AbstractMojo
> {
>     /**
>      * The source directories containing the sources to be compiled.
>      *
>      * @parameter
>      * @required
>      */
>     private List sourceDirectories;
>     /**
>      * The test source directories containing the sources to be compiled for 
> test.
>      *
>      * @parameter
>      * @required
>      */
>     private List testSourceDirectories;
>     /**
>      * The maven project.
>      *
>      * @parameter expression="${project}"
>      * @required
>      * @readonly
>      * @description "the maven project to use"
>      */
>     private MavenProject project;
>     /**
>      * @see org.apache.maven.plugin.Mojo#execute()
>      */
>     public void execute()
>         throws MojoExecutionException, MojoFailureException
>     {
>         String baseDirectory = 
> ResourceUtils.normalizePath(ObjectUtils.toString(project.getBasedir()) + '/');
>         addNormalizedPaths( this.sourceDirectories,
>             this.project.getCompileSourceRoots(), baseDirectory );
>         addNormalizedPaths( this.testSourceDirectories,
>             this.project.getTestCompileSourceRoots(), baseDirectory );
>     }
>   
>     private void addNormalizedPaths( List fromPaths, List toPaths, String 
> baseDirectory )
>     {
>         for (final Iterator iterator = fromPaths.iterator(); 
> iterator.hasNext();)
>         {
>             String path = 
> ResourceUtils.normalizePath((String)iterator.next());
>             if (!path.startsWith(baseDirectory))
>             {
>                 path = ResourceUtils.normalizePath(baseDirectory + path);
>             }
>             toPaths.add(path);
>         }
>     }
> }

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


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

Reply via email to