All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.mojo.apt.MavenProjectUtils Maven / Gradle / Ivy

There is a newer version: 1.0-alpha-5
Show newest version
package org.codehaus.mojo.apt;

/*
 * The MIT License
 *
 * Copyright 2006-2008 The Codehaus.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is furnished to do
 * so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;

/**
 * Provides utilities for working with Maven projects.
 * 
 * @author Mark Hobson
 * @version $Id: MavenProjectUtils.java 12564 2010-09-15 16:09:11Z mark $
 */
public final class MavenProjectUtils
{
    // constructors -----------------------------------------------------------

    private MavenProjectUtils()
    {
        throw new AssertionError();
    }

    // public methods ---------------------------------------------------------

    /**
     * Gets a list of paths for the specified artifacts.
     * 
     * @param project
     *            the project
     * @param artifacts
     *            the artifacts to obtain paths for
     * @return a list of String paths to the specified artifacts
     * @throws DependencyResolutionRequiredException
     *             if an artifact cannot be found
     */
    public static List getClasspathElements( MavenProject project, List artifacts )
        throws DependencyResolutionRequiredException
    {
        // based on MavenProject.getCompileClasspathElements

        List list = new ArrayList( artifacts.size() );

        for ( Artifact artifact : artifacts )
        {
            if ( artifact.getArtifactHandler().isAddedToClasspath() )
            {
                // TODO: let the scope handler deal with this
                if ( Artifact.SCOPE_COMPILE.equals( artifact.getScope() )
                    || Artifact.SCOPE_RUNTIME.equals( artifact.getScope() ) )
                {
                    addArtifactPath( project, artifact, list );
                }
            }
        }

        return list;
    }

    /**
     * Gets whether the specified list of resources contains a resource with the specified directory.
     * 
     * @param resources the list of resources to examine
     * @param directory the resource directory to look for
     * @return {@code true} if the list of resources contains a resource with the specified directory
     */
    public static boolean containsDirectory( List resources, String directory )
    {
        for ( Resource resource : resources )
        {
            if ( directory.equals( resource.getDirectory() ) )
            {
                return true;
            }
        }

        return false;
    }

    // private methods --------------------------------------------------------

    // copied from MavenProject.addArtifactPath
    private static void addArtifactPath( MavenProject project, Artifact artifact, List list )
        throws DependencyResolutionRequiredException
    {
        String refId = getProjectReferenceId( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
        MavenProject refProject = (MavenProject) project.getProjectReferences().get( refId );

        boolean projectDirFound = false;
        if ( refProject != null )
        {
            if ( artifact.getType().equals( "test-jar" ) )
            {
                File testOutputDir = new File( refProject.getBuild().getTestOutputDirectory() );
                if ( testOutputDir.exists() )
                {
                    list.add( testOutputDir.getAbsolutePath() );
                    projectDirFound = true;
                }
            }
            else
            {
                list.add( refProject.getBuild().getOutputDirectory() );
                projectDirFound = true;
            }
        }
        if ( !projectDirFound )
        {
            File file = artifact.getFile();
            if ( file == null )
            {
                throw new DependencyResolutionRequiredException( artifact );
            }
            list.add( file.getPath() );
        }
    }

    // copied from MavenProject.getProjectReferenceId
    private static String getProjectReferenceId( String groupId, String artifactId, String version )
    {
        return groupId + ":" + artifactId + ":" + version;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy