Author: jdcasey
Date: Thu Feb 14 13:16:19 2008
New Revision: 627874
URL: http://svn.apache.org/viewvc?rev=627874&view=rev
Log:
[MASSEMBLY-282] Check for the case where an artifact to be added to the
assembly points to the same file that the assembler is meant to create. This
happens when appendAssemblyId == false and classifier == null, in cases where
the assembly is meant to re-create the standard output artifact from a build,
but that standard output artifact should be included in the assembly.
Patch submitted by: Paul Gier
NOTE: I modified the patch to copy the conflicting file to a temporary
location, then include it from there, rather than skipping it.
Modified:
maven/plugins/trunk/maven-assembly-plugin/pom.xml
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Thu Feb 14 13:16:19 2008
@@ -298,17 +298,17 @@
<debug>true</debug>
<!-- Useful config for debugging one IT -->
- <!--
<pomIncludes>
-
<pomInclude>**/dependency-sets/including*/pom.xml</pomInclude>
+
<pomInclude>mojo-configuration/no-appendAssemblyId-no-classifier/pom.xml</pomInclude>
</pomIncludes>
- <streamLogs>true</streamLogs>
- -->
<!-- END single-IT debugging block. -->
+ <!--
<pomIncludes>
<pomInclude>**/pom.xml</pomInclude>
</pomIncludes>
+ <streamLogs>true</streamLogs>
+ -->
<pomExcludes>
<pomExclude>repositories/repo-with-snapshot-parents/pom.xml</pomExclude>
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
Thu Feb 14 13:16:19 2008
@@ -93,7 +93,11 @@
resolveDependencies(repository, configSource);
- File repositoryDirectory = new File( tempRoot,
repository.getOutputDirectory() );
+ String outputDirectory =
+ AssemblyFormatUtils.getOutputDirectory(
repository.getOutputDirectory(), configSource.getProject(),
+ null,
configSource.getFinalName() );
+
+ File repositoryDirectory = new File( tempRoot, outputDirectory );
if ( !repositoryDirectory.exists() )
{
@@ -110,10 +114,6 @@
{
throw new ArchiveCreationException( "Failed to assemble
repository: " + e.getMessage(), e );
}
-
- String outputDirectory =
- AssemblyFormatUtils.getOutputDirectory(
repository.getOutputDirectory(), configSource.getProject(),
- null,
configSource.getFinalName() );
AddDirectoryTask task = new AddDirectoryTask( repositoryDirectory
);
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
Thu Feb 14 13:16:19 2008
@@ -29,9 +29,11 @@
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
+import java.io.IOException;
import java.util.List;
/**
@@ -74,6 +76,29 @@
public void execute( Archiver archiver, AssemblerConfigurationSource
configSource )
throws ArchiveCreationException, AssemblyFormattingException
{
+ // MASSEMBLY-282: We should support adding a project's standard output
file as part of an assembly that replaces it.
+ if ( ( ( artifact.getFile() != null ) && ( archiver.getDestFile() !=
null ) )
+ && artifact.getFile().equals( archiver.getDestFile() )
)
+ {
+ File tempRoot = configSource.getTemporaryRootDirectory();
+ File tempArtifactFile = new File( tempRoot,
artifact.getFile().getName() );
+
+ logger.warn( "Artifact: "
+ + artifact.getId()
+ + " references the same file as the assembly
destination file. Moving it to a temporary location for inclusion." );
+ try
+ {
+ FileUtils.copyFile( artifact.getFile(), tempArtifactFile );
+ }
+ catch ( IOException e )
+ {
+ throw new ArchiveCreationException( "Error moving artifact
file: '" + artifact.getFile() + "' to temporary location: " + tempArtifactFile
+ ". Reason: "
+ + e.getMessage(), e );
+ }
+
+ artifact.setFile( tempArtifactFile );
+ }
+
String destDirectory = outputDirectory;
destDirectory = AssemblyFormatUtils.getOutputDirectory( destDirectory,
configSource.getProject(), project, configSource.getFinalName(),
artifactExpressionPrefix );
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
Thu Feb 14 13:16:19 2008
@@ -82,6 +82,7 @@
macTask.expectCSGetRepositories( null, null );
macTask.expectResolveDependencies( Collections.singleton(
artifactMock.getArtifact() ) );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( artifactFile, "out/dep", 10 );
project.setArtifacts( Collections.singleton(
artifactMock.getArtifact() ) );
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
Thu Feb 14 13:16:19 2008
@@ -274,6 +274,7 @@
macTask.expectGetReactorProjects( projects );
macTask.expectGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
Logger.LEVEL_DEBUG, "test" ) );
@@ -355,6 +356,7 @@
File artifactFile = artifactMock.setNewFile();
macTask.expectGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( artifactFile, "out/artifact",
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG,
"test" ) ) );
ModuleBinaries binaries = new ModuleBinaries();
@@ -433,6 +435,7 @@
File artifactFile = artifactMock.setNewFile();
macTask.expectGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( artifactFile, "out/artifact",
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG,
"test" ) ) );
ModuleBinaries binaries = new ModuleBinaries();
@@ -469,6 +472,7 @@
File artifactFile = artifactMock.setNewFile();
macTask.expectCSGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( artifactFile, "out/artifact",
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG,
"test" ) ) );
ModuleBinaries binaries = new ModuleBinaries();
@@ -527,6 +531,7 @@
File moduleArtifactFile = moduleArtifactMock.setNewFile();
macTask.expectCSGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
Logger.LEVEL_DEBUG, "test" ) );
@@ -649,6 +654,7 @@
project.setArtifact( artifactMock.getArtifact() );
macTask.expectGetFinalName( "final-name" );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( artifactFile, "out/artifact",
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG,
"test" ) ) );
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
Thu Feb 14 13:16:19 2008
@@ -73,6 +73,7 @@
ArtifactMock artifactMock = new ArtifactMock( mockManager, "group",
"artifact", "version", "jar", false );
File artifactFile = artifactMock.setNewFile();
+ mac.expectGetDestFile( new File( "junk" ) );
mac.expectAddFile( artifactFile, outputLocation );
mockManager.replayAll();
@@ -97,6 +98,7 @@
File file = mock.setNewFile();
mock.setExtension( ext );
+ mac.expectGetDestFile( new File( "junk" ) );
mac.expectAddFile( file, outputDir + artifactId + "-" + version + "."
+ ext );
mockManager.replayAll();
@@ -136,6 +138,7 @@
String outputLocation = "";
+ mac.expectGetDestFile( new File( "junk" ) );
try
{
mac.archiver.addArchivedFileSet( artifactFile, outputLocation,
AddArtifactTask.DEFAULT_INCLUDES_ARRAY, null );
@@ -170,6 +173,7 @@
ArtifactMock artifactMock = new ArtifactMock( mockManager, "group",
"artifact", "version", "jar", false );
File artifactFile = artifactMock.setNewFile();
+ mac.expectGetDestFile( new File( "junk" ) );
try
{
mac.archiver.addArchivedFileSet( artifactFile, outputLocation,
AddArtifactTask.DEFAULT_INCLUDES_ARRAY, null );
@@ -205,6 +209,7 @@
ArtifactMock artifactMock = new ArtifactMock( mockManager, "group",
"artifact", "version", "jar", false );
File artifactFile = artifactMock.setNewFile();
+ mac.expectGetDestFile( new File( "junk" ) );
mac.expectAddArchivedFileSet( artifactFile, outputLocation, includes,
excludes );
mockManager.replayAll();
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
Thu Feb 14 13:16:19 2008
@@ -97,6 +97,7 @@
macTask.expectCSGetRepositories( null, null );
macTask.expectResolveDependencies( Collections.singleton(
depArtifactMock.getArtifact() ) );
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectAddFile( newFile, outDir + depAid + "-" + depVer + "." +
depExt, 10 );
mockManager.replayAll();
@@ -180,6 +181,7 @@
macTask.expectAddFile( artifactFile, outputLocation + "/artifact",
10 );
}
+ macTask.expectGetDestFile( new File( "junk" ) );
macTask.expectCSGetFinalName( "final-name" );
MavenProject depProject = new MavenProject( new Model() );
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
Thu Feb 14 13:16:19 2008
@@ -78,6 +78,12 @@
configSourceCtl.setReturnValue( finalName, MockControl.ONE_OR_MORE );
}
+ public void expectGetDestFile( File destFile )
+ {
+ archiver.getDestFile();
+ archiverCtl.setReturnValue( destFile, MockControl.ZERO_OR_MORE );
+ }
+
public void expectAddArchivedFileSet( File artifactFile, String
outputLocation, String[] includes, String[] excludes )
{
try
Modified:
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
---
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
(original)
+++
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
Thu Feb 14 13:16:19 2008
@@ -176,6 +176,12 @@
configSourceCtl.setReturnValue( finalName, MockControl.ONE_OR_MORE );
}
+ public void expectGetDestFile( File destFile )
+ {
+ archiver.getDestFile();
+ archiverCtl.setReturnValue( destFile, MockControl.ZERO_OR_MORE );
+ }
+
public void expectCSGetRepositories( ArtifactRepository localRepo, List
remoteRepos )
{
configSource.getLocalRepository();