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 <a href="mailto:markhobson@gmail.com">Mark Hobson</a> * @version $Id$ */ 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 <code>String</code> paths to the specified artifacts * @throws DependencyResolutionRequiredException * if an artifact cannot be found */ public static List<String> getClasspathElements( MavenProject project, List<Artifact> artifacts ) throws DependencyResolutionRequiredException { // based on MavenProject.getCompileClasspathElements List<String> list = new ArrayList<String>( 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<Resource> 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<String> 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; } }