blob: 61fbdebc87c1f929434a14f40654568af97d6198 [file] [log] [blame]
package org.apache.maven.plugins.dependency.fromDependencies;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.dependency.AbstractDependencyMojoTestCase;
import org.apache.maven.plugins.dependency.utils.DependencyUtil;
import org.apache.maven.plugins.dependency.utils.markers.DefaultFileMarkerHandler;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.StringUtils;
import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
public class TestCopyDependenciesMojo
extends AbstractDependencyMojoTestCase
{
CopyDependenciesMojo mojo;
protected void setUp()
throws Exception
{
// required for mojo lookups to work
super.setUp( "copy-dependencies", true, false );
File testPom = new File( getBasedir(), "target/test-classes/unit/copy-dependencies-test/plugin-config.xml" );
mojo = (CopyDependenciesMojo) lookupMojo( "copy-dependencies", testPom );
mojo.outputDirectory = new File( this.testDir, "outputDirectory" );
// mojo.silent = true;
assertNotNull( mojo );
assertNotNull( mojo.getProject() );
MavenProject project = mojo.getProject();
MavenSession session = newMavenSession( project );
setVariableValueToObject( mojo, "session", session );
DefaultRepositorySystemSession repoSession = (DefaultRepositorySystemSession) session.getRepositorySession();
repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( stubFactory.getWorkingDir() ) );
Set<Artifact> artifacts = this.stubFactory.getScopedArtifacts();
Set<Artifact> directArtifacts = this.stubFactory.getReleaseAndSnapshotArtifacts();
artifacts.addAll( directArtifacts );
project.setArtifacts( artifacts );
project.setDependencyArtifacts( directArtifacts );
mojo.markersDirectory = new File( this.testDir, "markers" );
ArtifactHandlerManager manager = lookup( ArtifactHandlerManager.class );
setVariableValueToObject( mojo, "artifactHandlerManager", manager );
}
public void assertNoMarkerFile( Artifact artifact )
{
DefaultFileMarkerHandler handle = new DefaultFileMarkerHandler( artifact, mojo.markersDirectory );
try
{
assertFalse( handle.isMarkerSet() );
}
catch ( MojoExecutionException e )
{
fail( e.getLongMessage() );
}
}
public void testCopyFile()
throws MojoExecutionException, IOException
{
File src = File.createTempFile( "copy", null );
File dest = new File( mojo.outputDirectory, "toMe.jar" );
assertFalse( dest.exists() );
copyFile( mojo, src, dest );
assertTrue( dest.exists() );
}
/**
* tests the proper discovery and configuration of the mojo
*
* @throws Exception in case of an error.
*/
public void testMojo()
throws Exception
{
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
// there should be no markers for the copy mojo
assertNoMarkerFile( artifact );
}
}
public void testStripVersion()
throws Exception
{
mojo.stripVersion = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, true );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
}
}
public void testStripClassifier()
throws Exception
{
mojo.stripClassifier = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false, false, false, true );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
}
}
public void testUseBaseVersion()
throws Exception
{
mojo.useBaseVersion = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false, false, true );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
}
}
public void testNoTransitive()
throws Exception
{
mojo.excludeTransitive = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getDependencyArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
}
}
public void testExcludeType()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getTypedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeTypes = "jar";
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getType().equalsIgnoreCase( "jar" ), !file.exists() );
}
}
public void testIncludeType()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getTypedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.includeTypes = "jar";
mojo.excludeTypes = "jar";
// shouldn't get anything.
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertFalse( file.exists() );
}
mojo.excludeTypes = "";
mojo.execute();
artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getType().equalsIgnoreCase( "jar" ), file.exists() );
}
}
public void testExcludeArtifactId()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getArtifactArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeArtifactIds = "one";
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getArtifactId().equals( "one" ), !file.exists() );
}
}
public void testIncludeArtifactId()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getArtifactArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.includeArtifactIds = "one";
mojo.excludeArtifactIds = "one";
// shouldn't get anything
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertFalse( file.exists() );
}
mojo.excludeArtifactIds = "";
mojo.execute();
artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getArtifactId().equals( "one" ), file.exists() );
}
}
public void testIncludeGroupId()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getGroupIdArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.includeGroupIds = "one";
mojo.excludeGroupIds = "one";
// shouldn't get anything
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertFalse( file.exists() );
}
mojo.excludeGroupIds = "";
mojo.execute();
artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getGroupId().equals( "one" ), file.exists() );
}
}
public void testExcludeGroupId()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getGroupIdArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeGroupIds = "one";
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getGroupId().equals( "one" ), !file.exists() );
}
}
public void testExcludeMultipleGroupIds()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getGroupIdArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeGroupIds = "one,two";
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getGroupId().equals( "one" ) || artifact.getGroupId().equals( "two" ),
!file.exists() );
}
}
public void testExcludeClassifier()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getClassifiedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeClassifiers = "one";
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getClassifier().equals( "one" ), !file.exists() );
}
}
public void testIncludeClassifier()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getClassifiedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.includeClassifiers = "one";
mojo.excludeClassifiers = "one";
// shouldn't get anything
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertFalse( file.exists() );
}
mojo.excludeClassifiers = "";
mojo.execute();
artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getClassifier().equals( "one" ), file.exists() );
}
}
public void testSubPerType()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getTypedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.useSubDirectoryPerType = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File folder = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, false,
mojo.outputDirectory, artifact );
File file = new File( folder, fileName );
assertTrue( file.exists() );
}
}
public void testCDMClassifier()
throws Exception
{
dotestClassifierType( "jdk14", null );
}
public void testCDMType()
throws Exception
{
dotestClassifierType( null, "sources" );
}
public void testCDMClassifierType()
throws Exception
{
dotestClassifierType( "jdk14", "sources" );
}
public void dotestClassifierType( String testClassifier, String testType )
throws Exception
{
mojo.classifier = testClassifier;
mojo.type = testType;
for ( Artifact artifact : mojo.getProject().getArtifacts() )
{
String type = testType != null ? testType : artifact.getType();
stubFactory.createArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
artifact.getScope(), type, testClassifier );
}
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String useClassifier = artifact.getClassifier();
String useType = artifact.getType();
if ( StringUtils.isNotEmpty( testClassifier ) )
{
useClassifier = "-" + testClassifier;
// type is only used if classifier is used.
if ( StringUtils.isNotEmpty( testType ) )
{
useType = testType;
}
}
String fileName = artifact.getArtifactId() + "-" + artifact.getVersion() + useClassifier + "." + useType;
File file = new File( mojo.outputDirectory, fileName );
if ( !file.exists() )
{
fail( "Can't find:" + file.getAbsolutePath() );
}
// there should be no markers for the copy mojo
assertNoMarkerFile( artifact );
}
}
public void testArtifactNotFound()
throws Exception
{
dotestArtifactExceptions( false, true );
}
public void testArtifactResolutionException()
throws Exception
{
dotestArtifactExceptions( true, false );
}
public void dotestArtifactExceptions( boolean are, boolean anfe )
throws Exception
{
mojo.classifier = "jdk";
mojo.type = "java-sources";
try
{
mojo.execute();
fail( "ExpectedException" );
}
catch ( MojoExecutionException e )
{
}
}
/*
* public void testOverwrite() { stubFactory.setCreateFiles( false ); Artifact artifact =
* stubFactory.createArtifact( "test", "artifact", "1.0" ); File testFile = new File( getBasedir() +
* File.separatorChar + "target/test-classes/unit/copy-dependencies-test/test.zip" ); }
*/
public void testDontOverWriteRelease()
throws MojoExecutionException, InterruptedException, IOException, MojoFailureException
{
Set<Artifact> artifacts = new HashSet<Artifact>();
Artifact release = stubFactory.getReleaseArtifact();
assertTrue( release.getFile().setLastModified( System.currentTimeMillis() - 2000 ) );
artifacts.add( release );
mojo.getProject().setArtifacts( artifacts );
mojo.getProject().setDependencyArtifacts( artifacts );
mojo.overWriteIfNewer = false;
mojo.execute();
File copiedFile = new File( mojo.outputDirectory, DependencyUtil.getFormattedFileName( release, false ) );
Thread.sleep( 100 );
// round up to the next second
long time = System.currentTimeMillis() + 1000;
time = time - ( time % 1000 );
assertTrue( copiedFile.setLastModified( time ) );
Thread.sleep( 100 );
mojo.execute();
assertEquals( time, copiedFile.lastModified() );
}
public void testOverWriteRelease()
throws MojoExecutionException, InterruptedException, IOException, MojoFailureException
{
Set<Artifact> artifacts = new HashSet<Artifact>();
Artifact release = stubFactory.getReleaseArtifact();
assertTrue( release.getFile().setLastModified( System.currentTimeMillis() - 2000 ) );
artifacts.add( release );
mojo.getProject().setArtifacts( artifacts );
mojo.getProject().setDependencyArtifacts( artifacts );
mojo.overWriteReleases = true;
mojo.overWriteIfNewer = false;
mojo.execute();
File copiedFile = new File( mojo.outputDirectory, DependencyUtil.getFormattedFileName( release, false ) );
Thread.sleep( 100 );
// round down to the last second
long time = System.currentTimeMillis();
time = time - ( time % 1000 );
assertTrue( copiedFile.setLastModified( time ) );
// wait at least a second for filesystems that only record to the
// nearest second.
Thread.sleep( 1000 );
mojo.execute();
assertTrue( "time = " + time + " should be < to " + copiedFile.lastModified(),
time < copiedFile.lastModified() );
}
public void testDontOverWriteSnap()
throws MojoExecutionException, InterruptedException, IOException, MojoFailureException
{
Set<Artifact> artifacts = new HashSet<Artifact>();
Artifact snap = stubFactory.getSnapshotArtifact();
assertTrue( snap.getFile().setLastModified( System.currentTimeMillis() - 2000 ) );
artifacts.add( snap );
mojo.getProject().setArtifacts( artifacts );
mojo.getProject().setDependencyArtifacts( artifacts );
mojo.overWriteReleases = false;
mojo.overWriteSnapshots = false;
mojo.overWriteIfNewer = false;
mojo.execute();
File copiedFile = new File( mojo.outputDirectory, DependencyUtil.getFormattedFileName( snap, false ) );
Thread.sleep( 100 );
// round up to the next second
long time = System.currentTimeMillis() + 1000;
time = time - ( time % 1000 );
assertTrue( copiedFile.setLastModified( time ) );
Thread.sleep( 100 );
mojo.execute();
assertEquals( time, copiedFile.lastModified() );
}
public void testOverWriteSnap()
throws MojoExecutionException, InterruptedException, IOException, MojoFailureException
{
Set<Artifact> artifacts = new HashSet<Artifact>();
Artifact snap = stubFactory.getSnapshotArtifact();
assertTrue( snap.getFile().setLastModified( System.currentTimeMillis() - 2000 ) );
artifacts.add( snap );
mojo.getProject().setArtifacts( artifacts );
mojo.getProject().setDependencyArtifacts( artifacts );
mojo.overWriteReleases = false;
mojo.overWriteSnapshots = true;
mojo.overWriteIfNewer = false;
mojo.execute();
File copiedFile = new File( mojo.outputDirectory, DependencyUtil.getFormattedFileName( snap, false ) );
Thread.sleep( 100 );
// round down to the last second
long time = System.currentTimeMillis();
time = time - ( time % 1000 );
assertTrue( copiedFile.setLastModified( time ) );
// wait at least a second for filesystems that only record to the
// nearest second.
Thread.sleep( 1000 );
mojo.execute();
assertTrue( time < copiedFile.lastModified() );
}
public void testGetDependencies()
throws MojoExecutionException
{
assertEquals( mojo.getResolvedDependencies( true ).toString(),
mojo.getDependencySets( true ).getResolvedDependencies().toString() );
}
public void testExcludeProvidedScope()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getScopedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeScope = "provided";
// mojo.silent = false;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getScope().equals( "provided" ), !file.exists() );
file.delete();
assertFalse( file.exists() );
}
}
public void testExcludeSystemScope()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getScopedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeScope = "system";
// mojo.silent = false;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( artifact.getScope().equals( "system" ), !file.exists() );
file.delete();
assertFalse( file.exists() );
}
}
public void testExcludeCompileScope()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getScopedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeScope = "compile";
mojo.execute();
ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.excludeScope );
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( !saf.include( artifact ), file.exists() );
}
}
public void testExcludeTestScope()
throws IOException, MojoFailureException
{
mojo.getProject().setArtifacts( stubFactory.getScopedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeScope = "test";
try
{
mojo.execute();
fail( "expected an exception" );
}
catch ( MojoExecutionException e )
{
}
}
public void testExcludeRuntimeScope()
throws Exception
{
mojo.getProject().setArtifacts( stubFactory.getScopedArtifacts() );
mojo.getProject().setDependencyArtifacts( new HashSet<Artifact>() );
mojo.excludeScope = "runtime";
mojo.execute();
ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.excludeScope );
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName );
assertEquals( !saf.include( artifact ), file.exists() );
}
}
public void testCopyPom()
throws Exception
{
mojo.setCopyPom( true );
Set<Artifact> set = new HashSet<Artifact>();
set.add( stubFactory.createArtifact( "org.apache.maven", "maven-artifact", "2.0.7", Artifact.SCOPE_COMPILE ) );
stubFactory.createArtifact( "org.apache.maven", "maven-artifact", "2.0.7", Artifact.SCOPE_COMPILE, "pom",
null );
mojo.getProject().setArtifacts( set );
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false );
File file = new File( mojo.outputDirectory, fileName.substring( 0, fileName.length() - 4 ) + ".pom" );
assertTrue( file + " doesn't exist", file.exists() );
}
}
public void testPrependGroupId()
throws Exception
{
mojo.prependGroupId = true;
mojo.execute();
Set<Artifact> artifacts = mojo.getProject().getArtifacts();
for ( Artifact artifact : artifacts )
{
String fileName = DependencyUtil.getFormattedFileName( artifact, false, true );
File file = new File( mojo.outputDirectory, fileName );
assertTrue( file.exists() );
}
}
}