mirror of https://github.com/apache/maven.git
All tests pass on my localhost...committing to see how it works on hudson.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@672782 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4c5f43abf9
commit
5c32bc6b28
|
@ -46,7 +46,6 @@ import org.codehaus.plexus.logging.Logger;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
|
||||||
|
@ -156,16 +155,16 @@ public privileged aspect Maven20xCompatAspect
|
||||||
|
|
||||||
// Intercept retrieval of artifact dependencies of an extension, inject plexus-utils if it's not there.
|
// Intercept retrieval of artifact dependencies of an extension, inject plexus-utils if it's not there.
|
||||||
private pointcut extDepArtifactsResolved( DefaultExtensionManager mgr ):
|
private pointcut extDepArtifactsResolved( DefaultExtensionManager mgr ):
|
||||||
call( public Set ResolutionGroup+.getArtifacts() )
|
call( public Set<Artifact> ResolutionGroup+.getArtifacts() )
|
||||||
&& within( DefaultExtensionManager+ )
|
&& within( DefaultExtensionManager+ )
|
||||||
&& this( mgr )
|
&& this( mgr )
|
||||||
&& notHere();
|
&& notHere();
|
||||||
|
|
||||||
// We use the same hack here to make sure that plexus 1.1 is available for extensions that do
|
// We use the same hack here to make sure that plexus 1.1 is available for extensions that do
|
||||||
// not declare plexus-utils but need it. MNG-2900
|
// not declare plexus-utils but need it. MNG-2900
|
||||||
Set around( DefaultExtensionManager mgr ): extDepArtifactsResolved( mgr )
|
Set<Artifact> around( DefaultExtensionManager mgr ): extDepArtifactsResolved( mgr )
|
||||||
{
|
{
|
||||||
Set result = proceed( mgr );
|
Set<Artifact> result = proceed( mgr );
|
||||||
|
|
||||||
result = checkPlexusUtils( result, mgr.artifactFactory );
|
result = checkPlexusUtils( result, mgr.artifactFactory );
|
||||||
|
|
||||||
|
@ -174,14 +173,14 @@ public privileged aspect Maven20xCompatAspect
|
||||||
|
|
||||||
// Intercept retrieval of artifact dependencies of a plugin, inject plexus-utils if it's not there.
|
// Intercept retrieval of artifact dependencies of a plugin, inject plexus-utils if it's not there.
|
||||||
private pointcut pluginDepArtifactsResolved( DefaultPluginManager mgr ):
|
private pointcut pluginDepArtifactsResolved( DefaultPluginManager mgr ):
|
||||||
call( public Set ResolutionGroup+.getArtifacts() )
|
call( public Set<Artifact> ResolutionGroup+.getArtifacts() )
|
||||||
&& cflow( execution( Set DefaultPluginManager+.getPluginArtifacts(..) ) )
|
&& cflow( execution( List<Artifact> DefaultPluginManager+.getPluginArtifacts(..) ) )
|
||||||
&& this( mgr )
|
&& this( mgr )
|
||||||
&& notHere();
|
&& notHere();
|
||||||
|
|
||||||
Set around( DefaultPluginManager mgr ): pluginDepArtifactsResolved( mgr )
|
Set<Artifact> around( DefaultPluginManager mgr ): pluginDepArtifactsResolved( mgr )
|
||||||
{
|
{
|
||||||
Set result = proceed( mgr );
|
Set<Artifact> result = proceed( mgr );
|
||||||
|
|
||||||
result = checkPlexusUtils( result, mgr.artifactFactory );
|
result = checkPlexusUtils( result, mgr.artifactFactory );
|
||||||
|
|
||||||
|
@ -306,7 +305,7 @@ public privileged aspect Maven20xCompatAspect
|
||||||
// UTILITIES
|
// UTILITIES
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
private Set checkPlexusUtils( Set dependencyArtifacts, ArtifactFactory artifactFactory )
|
private Set<Artifact> checkPlexusUtils( Set<Artifact> dependencyArtifacts, ArtifactFactory artifactFactory )
|
||||||
{
|
{
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// If the plugin already declares a dependency on plexus-utils then we're all
|
// If the plugin already declares a dependency on plexus-utils then we're all
|
||||||
|
@ -354,7 +353,7 @@ public privileged aspect Maven20xCompatAspect
|
||||||
"jar" );
|
"jar" );
|
||||||
}
|
}
|
||||||
|
|
||||||
Set result = new LinkedHashSet( dependencyArtifacts );
|
Set<Artifact> result = new LinkedHashSet<Artifact>( dependencyArtifacts );
|
||||||
result.add( plexusUtilsArtifact );
|
result.add( plexusUtilsArtifact );
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.apache.maven.errors;
|
package org.apache.maven.errors;
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
|
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
||||||
|
@ -22,6 +23,7 @@ import org.apache.maven.model.Plugin;
|
||||||
import org.apache.maven.extension.ExtensionScanningException;
|
import org.apache.maven.extension.ExtensionScanningException;
|
||||||
import org.apache.maven.extension.DefaultBuildExtensionScanner;
|
import org.apache.maven.extension.DefaultBuildExtensionScanner;
|
||||||
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
|
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
|
||||||
|
import org.apache.maven.project.ProjectBuilderConfiguration;
|
||||||
import org.apache.maven.project.interpolation.ModelInterpolator;
|
import org.apache.maven.project.interpolation.ModelInterpolator;
|
||||||
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
||||||
import org.apache.maven.extension.ExtensionManagerException;
|
import org.apache.maven.extension.ExtensionManagerException;
|
||||||
|
@ -32,18 +34,17 @@ import org.apache.maven.plugin.version.DefaultPluginVersionManager;
|
||||||
import org.apache.maven.realm.RealmManagementException;
|
import org.apache.maven.realm.RealmManagementException;
|
||||||
import org.apache.maven.execution.RuntimeInformation;
|
import org.apache.maven.execution.RuntimeInformation;
|
||||||
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
|
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
|
||||||
import org.apache.maven.artifact.versioning.VersionRange;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public privileged aspect ExtensionErrorReporterAspect
|
public privileged aspect ExtensionErrorReporterAspect
|
||||||
extends AbstractCoreReporterAspect
|
extends AbstractCoreReporterAspect
|
||||||
{
|
{
|
||||||
|
|
||||||
before( ProjectBuildingException cause ):
|
before( ProjectBuildingException cause ):
|
||||||
withincode( List DefaultBuildExtensionScanner.getInitialRemoteRepositories() )
|
withincode( List<ArtifactRepository> DefaultBuildExtensionScanner.getInitialRemoteRepositories( ProjectBuilderConfiguration ) )
|
||||||
&& call( ExtensionScanningException.new( String, ProjectBuildingException ) )
|
&& call( ExtensionScanningException.new( String, ProjectBuildingException ) )
|
||||||
&& args( *, cause )
|
&& args( *, cause )
|
||||||
{
|
{
|
||||||
|
@ -54,14 +55,14 @@ public privileged aspect ExtensionErrorReporterAspect
|
||||||
execution( void DefaultBuildExtensionScanner.scanInternal( File, MavenExecutionRequest, .. ) )
|
execution( void DefaultBuildExtensionScanner.scanInternal( File, MavenExecutionRequest, .. ) )
|
||||||
&& args( pomFile, request, .. );
|
&& args( pomFile, request, .. );
|
||||||
|
|
||||||
after( File pomFile, MavenExecutionRequest request, Model model, Map inheritedValues )
|
after( File pomFile, MavenExecutionRequest request, Model model, ProjectBuilderConfiguration config )
|
||||||
throwing( ModelInterpolationException cause ):
|
throwing( ModelInterpolationException cause ):
|
||||||
cflow( dbes_scanInternal( pomFile, request ) )
|
cflow( dbes_scanInternal( pomFile, request ) )
|
||||||
&& within( DefaultBuildExtensionScanner )
|
&& within( DefaultBuildExtensionScanner )
|
||||||
&& call( Model ModelInterpolator+.interpolate( Model, Map, .. ) )
|
&& call( Model ModelInterpolator+.interpolate( Model, File, ProjectBuilderConfiguration, .. ) )
|
||||||
&& args( model, inheritedValues, .. )
|
&& args( model, *, config, .. )
|
||||||
{
|
{
|
||||||
getReporter().reportErrorInterpolatingModel( model, inheritedValues, pomFile, request, cause );
|
getReporter().reportErrorInterpolatingModel( model, new HashMap( config.getExecutionProperties() ), pomFile, request, cause );
|
||||||
}
|
}
|
||||||
|
|
||||||
private pointcut dem_addExtension( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, MavenExecutionRequest request ):
|
private pointcut dem_addExtension( Artifact extensionArtifact, Artifact projectArtifact, List remoteRepos, MavenExecutionRequest request ):
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.maven.extension;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.apache.maven.artifact.ArtifactUtils;
|
import org.apache.maven.artifact.ArtifactUtils;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.execution.MavenExecutionRequest;
|
import org.apache.maven.execution.MavenExecutionRequest;
|
||||||
import org.apache.maven.model.Build;
|
import org.apache.maven.model.Build;
|
||||||
import org.apache.maven.model.Extension;
|
import org.apache.maven.model.Extension;
|
||||||
|
@ -157,12 +158,25 @@ public class DefaultBuildExtensionScanner
|
||||||
|
|
||||||
String key = createKey( model );
|
String key = createKey( model );
|
||||||
|
|
||||||
if ( inheritedInterpolationValues == null )
|
ProjectBuilderConfiguration config = request.getProjectBuildingConfiguration();
|
||||||
|
Properties execProps = new Properties();
|
||||||
|
if ( config.getExecutionProperties() != null )
|
||||||
|
{
|
||||||
|
execProps.putAll( config.getExecutionProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( inheritedInterpolationValues != null )
|
||||||
|
{
|
||||||
|
execProps.putAll( inheritedInterpolationValues );
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
inheritedInterpolationValues = new HashMap();
|
inheritedInterpolationValues = new HashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
model = modelInterpolator.interpolate( model, modelPom.getParentFile(), request.getProjectBuildingConfiguration(), getLogger().isDebugEnabled() );
|
config.setExecutionProperties( execProps );
|
||||||
|
|
||||||
|
model = modelInterpolator.interpolate( model, modelPom.getParentFile(), config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
grabManagedPluginsWithExtensionsFlagTurnedOn( model, managedPluginsWithExtensionsFlag );
|
grabManagedPluginsWithExtensionsFlagTurnedOn( model, managedPluginsWithExtensionsFlag );
|
||||||
|
|
||||||
|
@ -437,7 +451,7 @@ public class DefaultBuildExtensionScanner
|
||||||
return lineage;
|
return lineage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List getInitialRemoteRepositories( ProjectBuilderConfiguration config )
|
private List<ArtifactRepository> getInitialRemoteRepositories( ProjectBuilderConfiguration config )
|
||||||
throws ExtensionScanningException
|
throws ExtensionScanningException
|
||||||
{
|
{
|
||||||
if ( basicSuperProject == null )
|
if ( basicSuperProject == null )
|
||||||
|
|
|
@ -34,9 +34,6 @@ import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
||||||
import org.apache.maven.artifact.resolver.ArtifactResolver;
|
import org.apache.maven.artifact.resolver.ArtifactResolver;
|
||||||
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
|
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
|
||||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
|
||||||
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
|
||||||
import org.apache.maven.artifact.versioning.VersionRange;
|
|
||||||
import org.apache.maven.execution.MavenExecutionRequest;
|
import org.apache.maven.execution.MavenExecutionRequest;
|
||||||
import org.apache.maven.execution.MavenSession;
|
import org.apache.maven.execution.MavenSession;
|
||||||
import org.apache.maven.model.Extension;
|
import org.apache.maven.model.Extension;
|
||||||
|
@ -294,7 +291,7 @@ public class DefaultExtensionManager
|
||||||
|
|
||||||
private void addExtension( Artifact extensionArtifact,
|
private void addExtension( Artifact extensionArtifact,
|
||||||
Artifact projectArtifact,
|
Artifact projectArtifact,
|
||||||
List remoteRepositories,
|
List<ArtifactRepository> remoteRepositories,
|
||||||
MavenExecutionRequest request,
|
MavenExecutionRequest request,
|
||||||
ActiveArtifactResolver activeArtifactResolver,
|
ActiveArtifactResolver activeArtifactResolver,
|
||||||
String projectGroupId,
|
String projectGroupId,
|
||||||
|
@ -331,7 +328,7 @@ public class DefaultExtensionManager
|
||||||
extensionArtifact.getId() + "': " + e.getMessage(), extensionArtifact, projectGroupId, projectArtifactId, projectVersion, e );
|
extensionArtifact.getId() + "': " + e.getMessage(), extensionArtifact, projectGroupId, projectArtifactId, projectVersion, e );
|
||||||
}
|
}
|
||||||
|
|
||||||
Set dependencies = new LinkedHashSet();
|
Set<Artifact> dependencies = new LinkedHashSet<Artifact>();
|
||||||
|
|
||||||
dependencies.add( extensionArtifact );
|
dependencies.add( extensionArtifact );
|
||||||
dependencies.addAll( resolutionGroup.getArtifacts() );
|
dependencies.addAll( resolutionGroup.getArtifacts() );
|
||||||
|
@ -438,54 +435,4 @@ public class DefaultExtensionManager
|
||||||
return projectDependencyConflictId.equals( depConflictId ) || passThroughFilter.include( artifact );
|
return projectDependencyConflictId.equals( depConflictId ) || passThroughFilter.include( artifact );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkPlexusUtils( ResolutionGroup resolutionGroup, ArtifactFactory artifactFactory )
|
|
||||||
{
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// If the plugin already declares a dependency on plexus-utils then we're all
|
|
||||||
// set as the plugin author is aware of its use. If we don't have a dependency
|
|
||||||
// on plexus-utils then we must protect users from stupid plugin authors who
|
|
||||||
// did not declare a direct dependency on plexus-utils because the version
|
|
||||||
// Maven uses is hidden from downstream use. We will also bump up any
|
|
||||||
// anything below 1.1 to 1.1 as this mimics the behaviour in 2.0.5 where
|
|
||||||
// plexus-utils 1.1 was being forced into use.
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
VersionRange vr = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
vr = VersionRange.createFromVersionSpec( "[1.1,)" );
|
|
||||||
}
|
|
||||||
catch ( InvalidVersionSpecificationException e )
|
|
||||||
{
|
|
||||||
// Won't happen
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean plexusUtilsPresent = false;
|
|
||||||
|
|
||||||
for ( Iterator i = resolutionGroup.getArtifacts().iterator(); i.hasNext(); )
|
|
||||||
{
|
|
||||||
Artifact a = (Artifact) i.next();
|
|
||||||
|
|
||||||
if ( a.getArtifactId().equals( "plexus-utils" ) &&
|
|
||||||
vr.containsVersion( new DefaultArtifactVersion( a.getVersion() ) ) )
|
|
||||||
{
|
|
||||||
plexusUtilsPresent = true;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !plexusUtilsPresent )
|
|
||||||
{
|
|
||||||
// We will add plexus-utils as every plugin was getting this anyway from Maven itself. We will set the
|
|
||||||
// version to the latest version we know that works as of the 2.0.6 release. We set the scope to runtime
|
|
||||||
// as this is what's implicitly happening in 2.0.6.
|
|
||||||
|
|
||||||
resolutionGroup.getArtifacts().add( artifactFactory.createArtifact( "org.codehaus.plexus",
|
|
||||||
"plexus-utils", "1.1",
|
|
||||||
Artifact.SCOPE_RUNTIME, "jar" ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ import org.apache.maven.project.MavenProjectBuilder;
|
||||||
import org.apache.maven.project.ProjectBuildingException;
|
import org.apache.maven.project.ProjectBuildingException;
|
||||||
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
|
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
|
||||||
import org.apache.maven.project.artifact.MavenMetadataSource;
|
import org.apache.maven.project.artifact.MavenMetadataSource;
|
||||||
|
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
||||||
import org.apache.maven.project.path.PathTranslator;
|
import org.apache.maven.project.path.PathTranslator;
|
||||||
import org.apache.maven.realm.MavenRealmManager;
|
import org.apache.maven.realm.MavenRealmManager;
|
||||||
import org.apache.maven.realm.RealmManagementException;
|
import org.apache.maven.realm.RealmManagementException;
|
||||||
|
@ -276,8 +277,10 @@ public class DefaultPluginManager
|
||||||
projectPlugin.setVersion( plugin.getVersion() );
|
projectPlugin.setVersion( plugin.getVersion() );
|
||||||
}
|
}
|
||||||
|
|
||||||
List artifacts = getPluginArtifacts( pluginArtifact, projectPlugin, project,
|
Set<Artifact> artifactSet = getPluginArtifacts( pluginArtifact, projectPlugin, project, session.getLocalRepository() );
|
||||||
session.getLocalRepository() );
|
|
||||||
|
List<Artifact> artifacts = ( artifactSet == null || artifactSet.isEmpty() )
|
||||||
|
? new ArrayList<Artifact>() : new ArrayList<Artifact>( artifactSet );
|
||||||
|
|
||||||
getLogger().debug( "Got plugin artifacts:\n\n" + artifacts );
|
getLogger().debug( "Got plugin artifacts:\n\n" + artifacts );
|
||||||
|
|
||||||
|
@ -347,7 +350,7 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List managedPluginArtifacts = realmManager.getPluginArtifacts( projectPlugin );
|
List<Artifact> managedPluginArtifacts = realmManager.getPluginArtifacts( projectPlugin );
|
||||||
|
|
||||||
if ( ( managedPluginArtifacts == null ) || ( managedPluginArtifacts.isEmpty() && !artifacts.isEmpty() ) )
|
if ( ( managedPluginArtifacts == null ) || ( managedPluginArtifacts.isEmpty() && !artifacts.isEmpty() ) )
|
||||||
{
|
{
|
||||||
|
@ -356,14 +359,14 @@ public class DefaultPluginManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List getPluginArtifacts( Artifact pluginArtifact,
|
private Set<Artifact> getPluginArtifacts( Artifact pluginArtifact,
|
||||||
Plugin plugin,
|
Plugin plugin,
|
||||||
MavenProject project,
|
MavenProject project,
|
||||||
ArtifactRepository localRepository )
|
ArtifactRepository localRepository )
|
||||||
throws InvalidPluginException, ArtifactNotFoundException, ArtifactResolutionException
|
throws InvalidPluginException, ArtifactNotFoundException, ArtifactResolutionException
|
||||||
{
|
{
|
||||||
|
|
||||||
Set projectPluginDependencies;
|
Set<Artifact> projectPluginDependencies;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -417,7 +420,7 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
// checkPlexusUtils( resolutionGroup, artifactFactory );
|
// checkPlexusUtils( resolutionGroup, artifactFactory );
|
||||||
|
|
||||||
Set dependencies = new LinkedHashSet();
|
Set<Artifact> dependencies = new LinkedHashSet<Artifact>();
|
||||||
|
|
||||||
// resolve the plugin dependencies specified in <plugin><dependencies> first:
|
// resolve the plugin dependencies specified in <plugin><dependencies> first:
|
||||||
dependencies.addAll( projectPluginDependencies );
|
dependencies.addAll( projectPluginDependencies );
|
||||||
|
@ -445,16 +448,18 @@ public class DefaultPluginManager
|
||||||
artifactMetadataSource,
|
artifactMetadataSource,
|
||||||
filter );
|
filter );
|
||||||
|
|
||||||
List resolved = new ArrayList( result.getArtifacts() );
|
Set<Artifact> resolved = new HashSet<Artifact>();
|
||||||
|
|
||||||
for ( Iterator it = resolved.iterator(); it.hasNext(); )
|
for ( Iterator<Artifact> it = result.getArtifacts().iterator(); it.hasNext(); )
|
||||||
{
|
{
|
||||||
Artifact artifact = (Artifact) it.next();
|
Artifact artifact = it.next();
|
||||||
|
|
||||||
if ( !artifact.equals( pluginArtifact ) )
|
if ( !artifact.equals( pluginArtifact ) )
|
||||||
{
|
{
|
||||||
artifact = project.replaceWithActiveArtifact( artifact );
|
artifact = project.replaceWithActiveArtifact( artifact );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolved.add( artifact );
|
||||||
}
|
}
|
||||||
|
|
||||||
getLogger().debug(
|
getLogger().debug(
|
||||||
|
@ -502,6 +507,18 @@ public class DefaultPluginManager
|
||||||
getLogger().warn( "Mojo: " + mojoDescriptor.getGoal() + " is deprecated.\n" + mojoDescriptor.getDeprecated() );
|
getLogger().warn( "Mojo: " + mojoDescriptor.getGoal() + " is deprecated.\n" + mojoDescriptor.getDeprecated() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !project.isConcrete() )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mavenProjectBuilder.calculateConcreteState( project, session.getProjectBuilderConfiguration() );
|
||||||
|
}
|
||||||
|
catch ( ModelInterpolationException e )
|
||||||
|
{
|
||||||
|
throw new PluginManagerException( mojoDescriptor, project, "Failed to calculate concrete state for project.", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( mojoDescriptor.isDependencyResolutionRequired() != null )
|
if ( mojoDescriptor.isDependencyResolutionRequired() != null )
|
||||||
{
|
{
|
||||||
Collection projects;
|
Collection projects;
|
||||||
|
@ -674,6 +691,15 @@ public class DefaultPluginManager
|
||||||
|
|
||||||
Thread.currentThread().setContextClassLoader( oldClassLoader );
|
Thread.currentThread().setContextClassLoader( oldClassLoader );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mavenProjectBuilder.restoreDynamicState( project, session.getProjectBuilderConfiguration() );
|
||||||
|
}
|
||||||
|
catch ( ModelInterpolationException e )
|
||||||
|
{
|
||||||
|
throw new PluginManagerException( mojoDescriptor, project, "Failed to restore dynamic state for project.", e );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Plugin createDummyPlugin( PluginDescriptor pluginDescriptor )
|
private Plugin createDummyPlugin( PluginDescriptor pluginDescriptor )
|
||||||
|
|
|
@ -32,6 +32,8 @@ import org.codehaus.plexus.util.interpolation.PropertiesBasedValueSource;
|
||||||
import org.codehaus.plexus.util.interpolation.RegexBasedInterpolator;
|
import org.codehaus.plexus.util.interpolation.RegexBasedInterpolator;
|
||||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||||
|
|
||||||
|
import hidden.org.codehaus.plexus.interpolation.InterpolationException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
@ -119,9 +121,19 @@ public class DefaultMavenSettingsBuilder
|
||||||
|
|
||||||
interpolator.addValueSource( new EnvarBasedValueSource() );
|
interpolator.addValueSource( new EnvarBasedValueSource() );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
serializedSettings = interpolator.interpolate(
|
serializedSettings = interpolator.interpolate(
|
||||||
serializedSettings,
|
serializedSettings,
|
||||||
"settings" );
|
"settings" );
|
||||||
|
}
|
||||||
|
catch ( InterpolationException e )
|
||||||
|
{
|
||||||
|
IOException error = new IOException( "Failed to interpolate settings." );
|
||||||
|
error.initCause( e );
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
Settings result = new SettingsXpp3Reader().read( new StringReader( serializedSettings ) );
|
Settings result = new SettingsXpp3Reader().read( new StringReader( serializedSettings ) );
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,7 @@ under the License.
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-assembly-plugin</artifactId>
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
<version>2.2-beta-1</version>
|
<version>2.2-beta-2</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>create-distro</id>
|
<id>create-distro</id>
|
||||||
|
@ -216,7 +216,7 @@ under the License.
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<descriptor>src/main/assembly/bin.xml</descriptor>
|
<descriptor>src/main/assembly/bin.xml</descriptor>
|
||||||
<finalName>apache-maven-${pom.version}</finalName>
|
<finalName>apache-maven-${project.version}</finalName>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -30,6 +30,8 @@ import org.codehaus.plexus.util.interpolation.EnvarBasedValueSource;
|
||||||
import org.codehaus.plexus.util.interpolation.MapBasedValueSource;
|
import org.codehaus.plexus.util.interpolation.MapBasedValueSource;
|
||||||
import org.codehaus.plexus.util.interpolation.RegexBasedInterpolator;
|
import org.codehaus.plexus.util.interpolation.RegexBasedInterpolator;
|
||||||
|
|
||||||
|
import hidden.org.codehaus.plexus.interpolation.InterpolationException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class FileProfileActivator
|
public class FileProfileActivator
|
||||||
|
@ -66,8 +68,22 @@ public class FileProfileActivator
|
||||||
interpolator.addValueSource( new MapBasedValueSource( System.getProperties() ) );
|
interpolator.addValueSource( new MapBasedValueSource( System.getProperties() ) );
|
||||||
|
|
||||||
if ( StringUtils.isNotEmpty( fileString ) )
|
if ( StringUtils.isNotEmpty( fileString ) )
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
|
fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
|
||||||
|
}
|
||||||
|
catch ( InterpolationException e )
|
||||||
|
{
|
||||||
|
if ( logger.isDebugEnabled() )
|
||||||
|
{
|
||||||
|
logger.debug( "Failed to interpolate exists file location for profile activator: " + fileString, e );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.warn( "Failed to interpolate exists file location for profile activator: " + fileString + ". Run in debug mode (-X) for more information." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean result = FileUtils.fileExists( fileString );
|
boolean result = FileUtils.fileExists( fileString );
|
||||||
|
|
||||||
|
@ -83,8 +99,22 @@ public class FileProfileActivator
|
||||||
fileString = actFile.getMissing();
|
fileString = actFile.getMissing();
|
||||||
|
|
||||||
if ( StringUtils.isNotEmpty( fileString ) )
|
if ( StringUtils.isNotEmpty( fileString ) )
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
|
fileString = StringUtils.replace( interpolator.interpolate( fileString, "" ), "\\", "/" );
|
||||||
|
}
|
||||||
|
catch ( InterpolationException e )
|
||||||
|
{
|
||||||
|
if ( logger.isDebugEnabled() )
|
||||||
|
{
|
||||||
|
logger.debug( "Failed to interpolate missing file location for profile activator: " + fileString, e );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger.warn( "Failed to interpolate missing file location for profile activator: " + fileString + ". Run in debug mode (-X) for more information." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean result = !FileUtils.fileExists( fileString );
|
boolean result = !FileUtils.fileExists( fileString );
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,10 @@ import org.apache.maven.model.Exclusion;
|
||||||
import org.apache.maven.model.Extension;
|
import org.apache.maven.model.Extension;
|
||||||
import org.apache.maven.model.Model;
|
import org.apache.maven.model.Model;
|
||||||
import org.apache.maven.model.Plugin;
|
import org.apache.maven.model.Plugin;
|
||||||
|
import org.apache.maven.model.PluginManagement;
|
||||||
import org.apache.maven.model.ReportPlugin;
|
import org.apache.maven.model.ReportPlugin;
|
||||||
import org.apache.maven.model.Repository;
|
import org.apache.maven.model.Repository;
|
||||||
|
import org.apache.maven.model.Resource;
|
||||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||||
import org.apache.maven.profiles.MavenProfilesBuilder;
|
import org.apache.maven.profiles.MavenProfilesBuilder;
|
||||||
import org.apache.maven.profiles.ProfileManager;
|
import org.apache.maven.profiles.ProfileManager;
|
||||||
|
@ -829,9 +831,6 @@ public class DefaultMavenProjectBuilder
|
||||||
// the plugin tools compose basedir and scriptSourceRoot into a single file.
|
// the plugin tools compose basedir and scriptSourceRoot into a single file.
|
||||||
project.addScriptSourceRoot( build.getScriptSourceDirectory() );
|
project.addScriptSourceRoot( build.getScriptSourceDirectory() );
|
||||||
|
|
||||||
getLogger().debug( "Aligning project: " + project.getId() + " to base directory: " + projectDescriptor.getParentFile() );
|
|
||||||
pathTranslator.alignToBaseDirectory( project.getModel(), projectDescriptor.getParentFile() );
|
|
||||||
|
|
||||||
project.addCompileSourceRoot( build.getSourceDirectory() );
|
project.addCompileSourceRoot( build.getSourceDirectory() );
|
||||||
|
|
||||||
project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
|
project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
|
||||||
|
@ -906,8 +905,8 @@ public class DefaultMavenProjectBuilder
|
||||||
catch ( InvalidRepositoryException e )
|
catch ( InvalidRepositoryException e )
|
||||||
{
|
{
|
||||||
throw new ProjectBuildingException( safeVersionlessKey( model.getGroupId(), model.getArtifactId() ),
|
throw new ProjectBuildingException( safeVersionlessKey( model.getGroupId(), model.getArtifactId() ),
|
||||||
"Failed to construct ArtifactRepository instances for repositories declared in: "
|
"Failed to construct ArtifactRepository instances for repositories declared in: " +
|
||||||
+ model.getId(), e );
|
model.getId(), e );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -973,8 +972,14 @@ public class DefaultMavenProjectBuilder
|
||||||
projectDir = pomFile.getAbsoluteFile().getParentFile();
|
projectDir = pomFile.getAbsoluteFile().getParentFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Build dynamicBuild = model.getBuild();
|
||||||
|
model.setBuild( ModelUtils.cloneBuild( dynamicBuild ) );
|
||||||
|
|
||||||
model = modelInterpolator.interpolate( model, projectDir, config, getLogger().isDebugEnabled() );
|
model = modelInterpolator.interpolate( model, projectDir, config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
mergeDeterministicBuildElements( model.getBuild(), dynamicBuild );
|
||||||
|
model.setBuild( dynamicBuild );
|
||||||
|
|
||||||
// We must inject any imported dependencyManagement information ahead of the defaults injection.
|
// We must inject any imported dependencyManagement information ahead of the defaults injection.
|
||||||
if ( !isSuperPom )
|
if ( !isSuperPom )
|
||||||
{
|
{
|
||||||
|
@ -1063,6 +1068,510 @@ public class DefaultMavenProjectBuilder
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this!
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void mergeDeterministicBuildElements( Build interpolatedBuild,
|
||||||
|
Build dynamicBuild )
|
||||||
|
{
|
||||||
|
List<Plugin> dPlugins = dynamicBuild.getPlugins();
|
||||||
|
|
||||||
|
if ( dPlugins != null )
|
||||||
|
{
|
||||||
|
List<Plugin> iPlugins = interpolatedBuild.getPlugins();
|
||||||
|
|
||||||
|
for ( int i = 0; i < dPlugins.size(); i++ )
|
||||||
|
{
|
||||||
|
Plugin dPlugin = dPlugins.get( i );
|
||||||
|
Plugin iPlugin = iPlugins.get( i );
|
||||||
|
|
||||||
|
dPlugin.setGroupId( iPlugin.getGroupId() );
|
||||||
|
dPlugin.setArtifactId( iPlugin.getArtifactId() );
|
||||||
|
dPlugin.setVersion( iPlugin.getVersion() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PluginManagement dPluginMgmt = dynamicBuild.getPluginManagement();
|
||||||
|
|
||||||
|
if ( dPluginMgmt != null )
|
||||||
|
{
|
||||||
|
PluginManagement iPluginMgmt = interpolatedBuild.getPluginManagement();
|
||||||
|
dPlugins = dPluginMgmt.getPlugins();
|
||||||
|
if ( dPlugins != null )
|
||||||
|
{
|
||||||
|
List<Plugin> iPlugins = iPluginMgmt.getPlugins();
|
||||||
|
|
||||||
|
for ( int i = 0; i < dPlugins.size(); i++ )
|
||||||
|
{
|
||||||
|
Plugin dPlugin = dPlugins.get( i );
|
||||||
|
Plugin iPlugin = iPlugins.get( i );
|
||||||
|
|
||||||
|
dPlugin.setGroupId( iPlugin.getGroupId() );
|
||||||
|
dPlugin.setArtifactId( iPlugin.getArtifactId() );
|
||||||
|
dPlugin.setVersion( iPlugin.getVersion() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( dynamicBuild.getExtensions() != null )
|
||||||
|
{
|
||||||
|
dynamicBuild.setExtensions( interpolatedBuild.getExtensions() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void calculateConcreteState( MavenProject project, ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( project.isConcrete() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Model model = ModelUtils.cloneModel( project.getModel() );
|
||||||
|
|
||||||
|
File basedir = project.getBasedir();
|
||||||
|
|
||||||
|
model = modelInterpolator.interpolate( model, basedir, config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
List originalInterpolatedCompileSourceRoots = interpolateListOfStrings( project.getCompileSourceRoots(),
|
||||||
|
model,
|
||||||
|
project.getBasedir(),
|
||||||
|
config );
|
||||||
|
|
||||||
|
project.preserveCompileSourceRoots( originalInterpolatedCompileSourceRoots );
|
||||||
|
|
||||||
|
project.setCompileSourceRoots( originalInterpolatedCompileSourceRoots == null ? null
|
||||||
|
: translateListOfPaths( originalInterpolatedCompileSourceRoots, basedir ) );
|
||||||
|
|
||||||
|
List originalInterpolatedTestCompileSourceRoots = interpolateListOfStrings( project.getTestCompileSourceRoots(),
|
||||||
|
model,
|
||||||
|
project.getBasedir(),
|
||||||
|
config );
|
||||||
|
|
||||||
|
project.preserveTestCompileSourceRoots( originalInterpolatedTestCompileSourceRoots );
|
||||||
|
project.setTestCompileSourceRoots( originalInterpolatedTestCompileSourceRoots == null ? null
|
||||||
|
: translateListOfPaths( originalInterpolatedTestCompileSourceRoots, basedir ) );
|
||||||
|
|
||||||
|
List originalInterpolatedScriptSourceRoots = interpolateListOfStrings( project.getScriptSourceRoots(),
|
||||||
|
model,
|
||||||
|
project.getBasedir(),
|
||||||
|
config );
|
||||||
|
|
||||||
|
project.preserveScriptSourceRoots( originalInterpolatedScriptSourceRoots );
|
||||||
|
project.setScriptSourceRoots( originalInterpolatedScriptSourceRoots == null ? null
|
||||||
|
: translateListOfPaths( originalInterpolatedScriptSourceRoots, basedir ) );
|
||||||
|
|
||||||
|
Model model2 = ModelUtils.cloneModel( model );
|
||||||
|
|
||||||
|
pathTranslator.alignToBaseDirectory( model, basedir );
|
||||||
|
|
||||||
|
project.preserveBuild( model2.getBuild() );
|
||||||
|
project.setBuild( model.getBuild() );
|
||||||
|
|
||||||
|
calculateConcreteProjectReferences( project, config );
|
||||||
|
|
||||||
|
MavenProject executionProject = project.getExecutionProject();
|
||||||
|
if ( executionProject != null && executionProject != project )
|
||||||
|
{
|
||||||
|
calculateConcreteState( executionProject, config );
|
||||||
|
}
|
||||||
|
|
||||||
|
project.setConcrete( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void calculateConcreteProjectReferences( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
Map projectRefs = project.getProjectReferences();
|
||||||
|
|
||||||
|
if ( projectRefs != null )
|
||||||
|
{
|
||||||
|
for ( Iterator it = projectRefs.values().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
MavenProject reference = (MavenProject) it.next();
|
||||||
|
calculateConcreteState( reference, config );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List translateListOfPaths( List paths, File basedir )
|
||||||
|
{
|
||||||
|
if ( paths == null )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if ( basedir == null )
|
||||||
|
{
|
||||||
|
return paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
List result = new ArrayList( paths.size() );
|
||||||
|
for ( Iterator it = paths.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
String path = (String) it.next();
|
||||||
|
|
||||||
|
String aligned = pathTranslator.alignToBaseDirectory( path, basedir );
|
||||||
|
|
||||||
|
result.add( aligned );
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void restoreDynamicState( MavenProject project, ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( !project.isConcrete() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
restoreBuildRoots( project, config );
|
||||||
|
restoreModelBuildSection( project, config );
|
||||||
|
|
||||||
|
restoreDynamicProjectReferences( project, config );
|
||||||
|
|
||||||
|
MavenProject executionProject = project.getExecutionProject();
|
||||||
|
if ( executionProject != null && executionProject != project )
|
||||||
|
{
|
||||||
|
restoreDynamicState( executionProject, config );
|
||||||
|
}
|
||||||
|
|
||||||
|
project.setConcrete( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreDynamicProjectReferences( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
Map projectRefs = project.getProjectReferences();
|
||||||
|
if ( projectRefs != null )
|
||||||
|
{
|
||||||
|
for ( Iterator it = projectRefs.values().iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
MavenProject projectRef = (MavenProject) it.next();
|
||||||
|
restoreDynamicState( projectRef, config );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreBuildRoots( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
project.setCompileSourceRoots( restoreListOfStrings( project.getDynamicCompileSourceRoots(),
|
||||||
|
project.getOriginalInterpolatedCompileSourceRoots(),
|
||||||
|
project.getCompileSourceRoots(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
project.setTestCompileSourceRoots( restoreListOfStrings( project.getDynamicTestCompileSourceRoots(),
|
||||||
|
project.getOriginalInterpolatedTestCompileSourceRoots(),
|
||||||
|
project.getTestCompileSourceRoots(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
project.setScriptSourceRoots( restoreListOfStrings( project.getDynamicScriptSourceRoots(),
|
||||||
|
project.getOriginalInterpolatedScriptSourceRoots(),
|
||||||
|
project.getScriptSourceRoots(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
project.clearRestorableRoots();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void restoreModelBuildSection( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
Build changedBuild = project.getBuild();
|
||||||
|
Build dynamicBuild = project.getDynamicBuild();
|
||||||
|
Build originalInterpolatedBuild = project.getOriginalInterpolatedBuild();
|
||||||
|
|
||||||
|
dynamicBuild.setResources( restoreResources( dynamicBuild.getResources(),
|
||||||
|
originalInterpolatedBuild.getResources(),
|
||||||
|
changedBuild.getResources(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setTestResources( restoreResources( dynamicBuild.getTestResources(),
|
||||||
|
originalInterpolatedBuild.getTestResources(),
|
||||||
|
changedBuild.getTestResources(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setFilters( restoreListOfStrings( dynamicBuild.getFilters(),
|
||||||
|
originalInterpolatedBuild.getFilters(),
|
||||||
|
changedBuild.getFilters(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setFinalName( restoreString( dynamicBuild.getFinalName(),
|
||||||
|
originalInterpolatedBuild.getFinalName(),
|
||||||
|
changedBuild.getFinalName(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setDefaultGoal( restoreString( dynamicBuild.getDefaultGoal(),
|
||||||
|
originalInterpolatedBuild.getDefaultGoal(),
|
||||||
|
changedBuild.getDefaultGoal(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setSourceDirectory( restoreString( dynamicBuild.getSourceDirectory(),
|
||||||
|
originalInterpolatedBuild.getSourceDirectory(),
|
||||||
|
changedBuild.getSourceDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setTestSourceDirectory( restoreString( dynamicBuild.getTestSourceDirectory(),
|
||||||
|
originalInterpolatedBuild.getTestSourceDirectory(),
|
||||||
|
changedBuild.getTestSourceDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setScriptSourceDirectory( restoreString( dynamicBuild.getScriptSourceDirectory(),
|
||||||
|
originalInterpolatedBuild.getScriptSourceDirectory(),
|
||||||
|
changedBuild.getScriptSourceDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setOutputDirectory( restoreString( dynamicBuild.getOutputDirectory(),
|
||||||
|
originalInterpolatedBuild.getOutputDirectory(),
|
||||||
|
changedBuild.getOutputDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setTestOutputDirectory( restoreString( dynamicBuild.getTestOutputDirectory(),
|
||||||
|
originalInterpolatedBuild.getTestOutputDirectory(),
|
||||||
|
changedBuild.getTestOutputDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
dynamicBuild.setDirectory( restoreString( dynamicBuild.getDirectory(),
|
||||||
|
originalInterpolatedBuild.getDirectory(),
|
||||||
|
changedBuild.getDirectory(),
|
||||||
|
project,
|
||||||
|
config ) );
|
||||||
|
|
||||||
|
project.setBuild( dynamicBuild );
|
||||||
|
|
||||||
|
project.clearRestorableBuild();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List interpolateListOfStrings( List originalStrings,
|
||||||
|
Model model,
|
||||||
|
File projectDir,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( originalStrings == null )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
List result = new ArrayList();
|
||||||
|
|
||||||
|
for ( Iterator it = originalStrings.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
String original = (String) it.next();
|
||||||
|
String interpolated = modelInterpolator.interpolate( original, model, projectDir, config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
result.add( interpolated );
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String restoreString( String originalString,
|
||||||
|
String originalInterpolatedString,
|
||||||
|
String changedString,
|
||||||
|
MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( originalString == null )
|
||||||
|
{
|
||||||
|
return changedString;
|
||||||
|
}
|
||||||
|
else if ( changedString == null )
|
||||||
|
{
|
||||||
|
return originalString;
|
||||||
|
}
|
||||||
|
|
||||||
|
Model model = project.getModel();
|
||||||
|
|
||||||
|
String relativeChangedString;
|
||||||
|
if ( project.getBasedir() != null )
|
||||||
|
{
|
||||||
|
relativeChangedString = pathTranslator.unalignFromBaseDirectory( changedString, project.getBasedir() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relativeChangedString = changedString;
|
||||||
|
}
|
||||||
|
|
||||||
|
String interpolatedOriginal = modelInterpolator.interpolate( originalString, model, project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
String interpolatedOriginal2 = modelInterpolator.interpolate( originalInterpolatedString,
|
||||||
|
model,
|
||||||
|
project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
String interpolatedChanged = modelInterpolator.interpolate( changedString, model, project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
String relativeInterpolatedChanged = modelInterpolator.interpolate( relativeChangedString, model, project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
if ( interpolatedOriginal.equals( interpolatedChanged )
|
||||||
|
|| interpolatedOriginal2.equals( interpolatedChanged ) )
|
||||||
|
{
|
||||||
|
return originalString;
|
||||||
|
}
|
||||||
|
else if ( interpolatedOriginal.equals( relativeInterpolatedChanged )
|
||||||
|
|| interpolatedOriginal2.equals( relativeInterpolatedChanged ) )
|
||||||
|
{
|
||||||
|
return originalString;
|
||||||
|
}
|
||||||
|
|
||||||
|
return relativeChangedString;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List restoreListOfStrings( List originalStrings,
|
||||||
|
List originalInterpolatedStrings,
|
||||||
|
List changedStrings,
|
||||||
|
MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( originalStrings == null )
|
||||||
|
{
|
||||||
|
return changedStrings;
|
||||||
|
}
|
||||||
|
else if ( changedStrings == null )
|
||||||
|
{
|
||||||
|
return originalStrings;
|
||||||
|
}
|
||||||
|
|
||||||
|
List result = new ArrayList();
|
||||||
|
|
||||||
|
Map orig = new HashMap();
|
||||||
|
for ( int idx = 0; idx < originalStrings.size(); idx++ )
|
||||||
|
{
|
||||||
|
String[] permutations = new String[2];
|
||||||
|
|
||||||
|
permutations[0] = (String) originalInterpolatedStrings.get( idx );
|
||||||
|
permutations[1] = (String) originalStrings.get( idx );
|
||||||
|
|
||||||
|
orig.put( permutations[0], permutations );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( Iterator it = changedStrings.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
String changedString = (String) it.next();
|
||||||
|
String relativeChangedString;
|
||||||
|
if ( project.getBasedir() != null )
|
||||||
|
{
|
||||||
|
relativeChangedString = pathTranslator.unalignFromBaseDirectory( changedString, project.getBasedir() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relativeChangedString = changedString;
|
||||||
|
}
|
||||||
|
|
||||||
|
String interpolated = modelInterpolator.interpolate( changedString,
|
||||||
|
project.getModel(),
|
||||||
|
project.getBasedir(),
|
||||||
|
config,
|
||||||
|
getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
String relativeInterpolated = modelInterpolator.interpolate( relativeChangedString,
|
||||||
|
project.getModel(),
|
||||||
|
project.getBasedir(),
|
||||||
|
config,
|
||||||
|
getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
String[] original = (String[]) orig.get( interpolated );
|
||||||
|
if ( original == null )
|
||||||
|
{
|
||||||
|
original = (String[]) orig.get( relativeInterpolated );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( original == null )
|
||||||
|
{
|
||||||
|
result.add( relativeChangedString );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.add( original[1] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List restoreResources( List originalResources,
|
||||||
|
List originalInterpolatedResources,
|
||||||
|
List changedResources,
|
||||||
|
MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException
|
||||||
|
{
|
||||||
|
if ( originalResources == null || changedResources == null )
|
||||||
|
{
|
||||||
|
return originalResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
List result = new ArrayList();
|
||||||
|
|
||||||
|
Map orig = new HashMap();
|
||||||
|
for ( int idx = 0; idx < originalResources.size(); idx++ )
|
||||||
|
{
|
||||||
|
Resource[] permutations = new Resource[2];
|
||||||
|
|
||||||
|
permutations[0] = (Resource) originalInterpolatedResources.get( idx );
|
||||||
|
permutations[1] = (Resource) originalResources.get( idx );
|
||||||
|
|
||||||
|
orig.put( permutations[0].getDirectory(), permutations );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( Iterator it = changedResources.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
Resource resource = (Resource) it.next();
|
||||||
|
String rDir = modelInterpolator.interpolate( resource.getDirectory(), project.getModel(), project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
String relativeDir;
|
||||||
|
if ( project.getBasedir() != null )
|
||||||
|
{
|
||||||
|
relativeDir = pathTranslator.unalignFromBaseDirectory( resource.getDirectory(),
|
||||||
|
project.getBasedir() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relativeDir = resource.getDirectory();
|
||||||
|
}
|
||||||
|
|
||||||
|
String relativeRDir = modelInterpolator.interpolate( relativeDir, project.getModel(), project.getBasedir(), config, getLogger().isDebugEnabled() );
|
||||||
|
|
||||||
|
Resource[] original = (Resource[]) orig.get( rDir );
|
||||||
|
if ( original == null )
|
||||||
|
{
|
||||||
|
original = (Resource[]) orig.get( relativeRDir );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( original == null )
|
||||||
|
{
|
||||||
|
result.add( resource );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO: Synchronize all non-directory fields, such as targetPath, includes, and excludes.
|
||||||
|
// String target = interpolator.interpolate( resource.getTargetPath(), model, context );
|
||||||
|
// String oTarget = interpolator.interpolate( originalResource.getTargetPath(), model, context );
|
||||||
|
|
||||||
|
result.add( original[1] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private void validateModel( Model model,
|
private void validateModel( Model model,
|
||||||
File pomFile )
|
File pomFile )
|
||||||
throws InvalidProjectModelException
|
throws InvalidProjectModelException
|
||||||
|
|
|
@ -98,9 +98,9 @@ public class MavenProject
|
||||||
|
|
||||||
private Artifact parentArtifact;
|
private Artifact parentArtifact;
|
||||||
|
|
||||||
private Set pluginArtifacts;
|
private Set<Artifact> pluginArtifacts;
|
||||||
|
|
||||||
private List remoteArtifactRepositories;
|
private List<ArtifactRepository> remoteArtifactRepositories;
|
||||||
|
|
||||||
private List collectedProjects = Collections.EMPTY_LIST;
|
private List collectedProjects = Collections.EMPTY_LIST;
|
||||||
|
|
||||||
|
@ -172,6 +172,7 @@ public class MavenProject
|
||||||
/**
|
/**
|
||||||
* @deprecated use {@link #clone()} so subclasses can provide a copy of the same class
|
* @deprecated use {@link #clone()} so subclasses can provide a copy of the same class
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public MavenProject( MavenProject project )
|
public MavenProject( MavenProject project )
|
||||||
{
|
{
|
||||||
deepCopy( project );
|
deepCopy( project );
|
||||||
|
@ -282,6 +283,38 @@ public class MavenProject
|
||||||
{
|
{
|
||||||
setSnapshotArtifactRepository( project.getSnapshotArtifactRepository() );
|
setSnapshotArtifactRepository( project.getSnapshotArtifactRepository() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( project.isConcrete() )
|
||||||
|
{
|
||||||
|
setDynamicBuild( ModelUtils.cloneBuild( project.getDynamicBuild() ) );
|
||||||
|
setOriginalInterpolatedBuild( ModelUtils.cloneBuild( project.getOriginalInterpolatedBuild() ) );
|
||||||
|
|
||||||
|
List dynamicRoots = project.getDynamicCompileSourceRoots();
|
||||||
|
if ( dynamicRoots != null )
|
||||||
|
{
|
||||||
|
setDynamicCompileSourceRoots( new ArrayList( dynamicRoots ) );
|
||||||
|
setOriginalInterpolatedCompileSourceRoots( new ArrayList(
|
||||||
|
project.getOriginalInterpolatedCompileSourceRoots() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamicRoots = project.getDynamicTestCompileSourceRoots();
|
||||||
|
if ( dynamicRoots != null )
|
||||||
|
{
|
||||||
|
setDynamicTestCompileSourceRoots( new ArrayList( dynamicRoots ) );
|
||||||
|
setOriginalInterpolatedTestCompileSourceRoots( new ArrayList(
|
||||||
|
project.getOriginalInterpolatedTestCompileSourceRoots() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamicRoots = project.getDynamicScriptSourceRoots();
|
||||||
|
if ( dynamicRoots != null )
|
||||||
|
{
|
||||||
|
setDynamicScriptSourceRoots( new ArrayList( dynamicRoots ) );
|
||||||
|
setOriginalInterpolatedScriptSourceRoots( new ArrayList(
|
||||||
|
project.getOriginalInterpolatedScriptSourceRoots() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setConcrete( project.isConcrete() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Find a way to use <relativePath/> here...it's tricky, because the moduleProject
|
// TODO: Find a way to use <relativePath/> here...it's tricky, because the moduleProject
|
||||||
|
@ -376,7 +409,7 @@ public class MavenProject
|
||||||
this.remoteArtifactRepositories = remoteArtifactRepositories;
|
this.remoteArtifactRepositories = remoteArtifactRepositories;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List getRemoteArtifactRepositories()
|
public List<ArtifactRepository> getRemoteArtifactRepositories()
|
||||||
{
|
{
|
||||||
return remoteArtifactRepositories;
|
return remoteArtifactRepositories;
|
||||||
}
|
}
|
||||||
|
@ -1537,6 +1570,7 @@ public class MavenProject
|
||||||
return managedVersionMap;
|
return managedVersionMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean equals( Object other )
|
public boolean equals( Object other )
|
||||||
{
|
{
|
||||||
if ( other == this )
|
if ( other == this )
|
||||||
|
@ -1555,6 +1589,7 @@ public class MavenProject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
return getId().hashCode();
|
return getId().hashCode();
|
||||||
|
@ -1598,6 +1633,7 @@ public class MavenProject
|
||||||
/**
|
/**
|
||||||
* @deprecated Use MavenProjectHelper.attachArtifact(..) instead.
|
* @deprecated Use MavenProjectHelper.attachArtifact(..) instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public void attachArtifact( String type, String classifier, File file )
|
public void attachArtifact( String type, String classifier, File file )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -1807,6 +1843,7 @@ public class MavenProject
|
||||||
/**
|
/**
|
||||||
* Default toString
|
* Default toString
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
StringBuffer sb = new StringBuffer(30);
|
StringBuffer sb = new StringBuffer(30);
|
||||||
|
@ -1834,6 +1871,7 @@ public class MavenProject
|
||||||
* @throws CloneNotSupportedException
|
* @throws CloneNotSupportedException
|
||||||
* @since 2.0.9
|
* @since 2.0.9
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Object clone()
|
public Object clone()
|
||||||
throws CloneNotSupportedException
|
throws CloneNotSupportedException
|
||||||
{
|
{
|
||||||
|
@ -1842,4 +1880,159 @@ public class MavenProject
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// CODE BELOW IS USED TO PRESERVE DYNAMISM IN THE BUILD SECTION OF THE POM.
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
private Build dynamicBuild;
|
||||||
|
|
||||||
|
private Build originalInterpolatedBuild;
|
||||||
|
|
||||||
|
private List dynamicCompileSourceRoots;
|
||||||
|
|
||||||
|
private List originalInterpolatedCompileSourceRoots;
|
||||||
|
|
||||||
|
private List dynamicTestCompileSourceRoots;
|
||||||
|
|
||||||
|
private List originalInterpolatedTestCompileSourceRoots;
|
||||||
|
|
||||||
|
private List dynamicScriptSourceRoots;
|
||||||
|
|
||||||
|
private List originalInterpolatedScriptSourceRoots;
|
||||||
|
|
||||||
|
private boolean isConcrete = false;
|
||||||
|
|
||||||
|
public boolean isConcrete()
|
||||||
|
{
|
||||||
|
return isConcrete;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConcrete( boolean concrete )
|
||||||
|
{
|
||||||
|
isConcrete = concrete;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Build getDynamicBuild()
|
||||||
|
{
|
||||||
|
return dynamicBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Build getOriginalInterpolatedBuild()
|
||||||
|
{
|
||||||
|
return originalInterpolatedBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getDynamicCompileSourceRoots()
|
||||||
|
{
|
||||||
|
return dynamicCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getOriginalInterpolatedCompileSourceRoots()
|
||||||
|
{
|
||||||
|
return originalInterpolatedCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getDynamicTestCompileSourceRoots()
|
||||||
|
{
|
||||||
|
return dynamicTestCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getOriginalInterpolatedTestCompileSourceRoots()
|
||||||
|
{
|
||||||
|
return originalInterpolatedTestCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getDynamicScriptSourceRoots()
|
||||||
|
{
|
||||||
|
return dynamicScriptSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getOriginalInterpolatedScriptSourceRoots()
|
||||||
|
{
|
||||||
|
return originalInterpolatedScriptSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearRestorableRoots()
|
||||||
|
{
|
||||||
|
dynamicCompileSourceRoots = null;
|
||||||
|
dynamicTestCompileSourceRoots = null;
|
||||||
|
dynamicScriptSourceRoots = null;
|
||||||
|
originalInterpolatedCompileSourceRoots = null;
|
||||||
|
originalInterpolatedScriptSourceRoots = null;
|
||||||
|
originalInterpolatedTestCompileSourceRoots = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearRestorableBuild()
|
||||||
|
{
|
||||||
|
dynamicBuild = null;
|
||||||
|
originalInterpolatedBuild = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preserveCompileSourceRoots( List originalInterpolatedCompileSourceRoots )
|
||||||
|
{
|
||||||
|
dynamicCompileSourceRoots = getCompileSourceRoots();
|
||||||
|
this.originalInterpolatedCompileSourceRoots = originalInterpolatedCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preserveTestCompileSourceRoots( List originalInterpolatedTestCompileSourceRoots )
|
||||||
|
{
|
||||||
|
dynamicTestCompileSourceRoots = getTestCompileSourceRoots();
|
||||||
|
this.originalInterpolatedTestCompileSourceRoots = originalInterpolatedTestCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preserveScriptSourceRoots( List originalInterpolatedScriptSourceRoots )
|
||||||
|
{
|
||||||
|
dynamicScriptSourceRoots = getScriptSourceRoots();
|
||||||
|
this.originalInterpolatedScriptSourceRoots = originalInterpolatedScriptSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void preserveBuild( Build originalInterpolatedBuild )
|
||||||
|
{
|
||||||
|
dynamicBuild = getBuild();
|
||||||
|
this.originalInterpolatedBuild = originalInterpolatedBuild;
|
||||||
|
|
||||||
|
this.originalInterpolatedBuild.setPluginManagement( null );
|
||||||
|
this.originalInterpolatedBuild.setPlugins( null );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDynamicBuild( Build dynamicBuild )
|
||||||
|
{
|
||||||
|
this.dynamicBuild = dynamicBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOriginalInterpolatedBuild( Build originalInterpolatedBuild )
|
||||||
|
{
|
||||||
|
this.originalInterpolatedBuild = originalInterpolatedBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDynamicCompileSourceRoots( List dynamicCompileSourceRoots )
|
||||||
|
{
|
||||||
|
this.dynamicCompileSourceRoots = dynamicCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOriginalInterpolatedCompileSourceRoots( List originalInterpolatedCompileSourceRoots )
|
||||||
|
{
|
||||||
|
this.originalInterpolatedCompileSourceRoots = originalInterpolatedCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDynamicTestCompileSourceRoots( List dynamicTestCompileSourceRoots )
|
||||||
|
{
|
||||||
|
this.dynamicTestCompileSourceRoots = dynamicTestCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOriginalInterpolatedTestCompileSourceRoots( List originalInterpolatedTestCompileSourceRoots )
|
||||||
|
{
|
||||||
|
this.originalInterpolatedTestCompileSourceRoots = originalInterpolatedTestCompileSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDynamicScriptSourceRoots( List dynamicScriptSourceRoots )
|
||||||
|
{
|
||||||
|
this.dynamicScriptSourceRoots = dynamicScriptSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setOriginalInterpolatedScriptSourceRoots( List originalInterpolatedScriptSourceRoots )
|
||||||
|
{
|
||||||
|
this.originalInterpolatedScriptSourceRoots = originalInterpolatedScriptSourceRoots;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.apache.maven.project;
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.profiles.ProfileManager;
|
import org.apache.maven.profiles.ProfileManager;
|
||||||
|
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -41,6 +42,7 @@ public interface MavenProjectBuilder
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link MavenProjectBuilder#build(File, ProjectBuilderConfiguration)} instead.
|
* @deprecated Use {@link MavenProjectBuilder#build(File, ProjectBuilderConfiguration)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
MavenProject build( File project,
|
MavenProject build( File project,
|
||||||
ArtifactRepository localRepository,
|
ArtifactRepository localRepository,
|
||||||
ProfileManager globalProfileManager )
|
ProfileManager globalProfileManager )
|
||||||
|
@ -62,6 +64,7 @@ public interface MavenProjectBuilder
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link MavenProjectBuilder#buildProjectWithDependencies(File, ProjectBuilderConfiguration)} instead.
|
* @deprecated Use {@link MavenProjectBuilder#buildProjectWithDependencies(File, ProjectBuilderConfiguration)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
MavenProjectBuildingResult buildProjectWithDependencies( File project,
|
MavenProjectBuildingResult buildProjectWithDependencies( File project,
|
||||||
ArtifactRepository localRepository,
|
ArtifactRepository localRepository,
|
||||||
ProfileManager globalProfileManager )
|
ProfileManager globalProfileManager )
|
||||||
|
@ -74,6 +77,7 @@ public interface MavenProjectBuilder
|
||||||
throws ProjectBuildingException;
|
throws ProjectBuildingException;
|
||||||
|
|
||||||
/** @deprecated We do not want to allow projects to not have POMs. Maven 1.x repositories be damned. */
|
/** @deprecated We do not want to allow projects to not have POMs. Maven 1.x repositories be damned. */
|
||||||
|
@Deprecated
|
||||||
MavenProject buildFromRepository( Artifact artifact,
|
MavenProject buildFromRepository( Artifact artifact,
|
||||||
List remoteArtifactRepositories,
|
List remoteArtifactRepositories,
|
||||||
ArtifactRepository localRepository,
|
ArtifactRepository localRepository,
|
||||||
|
@ -83,15 +87,29 @@ public interface MavenProjectBuilder
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
|
* @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
MavenProject buildStandaloneSuperProject()
|
MavenProject buildStandaloneSuperProject()
|
||||||
throws ProjectBuildingException;
|
throws ProjectBuildingException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
|
* @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
MavenProject buildStandaloneSuperProject( ProfileManager profileManager )
|
MavenProject buildStandaloneSuperProject( ProfileManager profileManager )
|
||||||
throws ProjectBuildingException;
|
throws ProjectBuildingException;
|
||||||
|
|
||||||
MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration config )
|
MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration config )
|
||||||
throws ProjectBuildingException;
|
throws ProjectBuildingException;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// API BELOW IS USED TO PRESERVE DYNAMISM IN THE BUILD SECTION OF THE POM.
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void calculateConcreteState( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException;
|
||||||
|
|
||||||
|
void restoreDynamicState( MavenProject project,
|
||||||
|
ProjectBuilderConfiguration config )
|
||||||
|
throws ModelInterpolationException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -581,6 +581,17 @@ public final class ModelUtils
|
||||||
return newModel;
|
return newModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Build cloneBuild( Build build )
|
||||||
|
{
|
||||||
|
ModelInheritanceAssembler assembler = new DefaultModelInheritanceAssembler();
|
||||||
|
|
||||||
|
Build clone = new Build();
|
||||||
|
|
||||||
|
assembler.assembleBuildInheritance( clone, build );
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
private static List cloneProfiles( List profiles )
|
private static List cloneProfiles( List profiles )
|
||||||
{
|
{
|
||||||
if ( profiles == null )
|
if ( profiles == null )
|
||||||
|
|
|
@ -363,15 +363,15 @@ public class MavenMetadataSource
|
||||||
* @todo desperately needs refactoring. It's just here because it's implementation is maven-project specific
|
* @todo desperately needs refactoring. It's just here because it's implementation is maven-project specific
|
||||||
* @return {@link Set} < {@link Artifact} >
|
* @return {@link Set} < {@link Artifact} >
|
||||||
*/
|
*/
|
||||||
public static Set createArtifacts( ArtifactFactory artifactFactory, List dependencies, String inheritedScope,
|
public static Set<Artifact> createArtifacts( ArtifactFactory artifactFactory, List<Dependency> dependencies, String inheritedScope,
|
||||||
ArtifactFilter dependencyFilter, MavenProject project )
|
ArtifactFilter dependencyFilter, MavenProject project )
|
||||||
throws InvalidDependencyVersionException
|
throws InvalidDependencyVersionException
|
||||||
{
|
{
|
||||||
Set projectArtifacts = new LinkedHashSet( dependencies.size() );
|
Set<Artifact> projectArtifacts = new LinkedHashSet<Artifact>( dependencies.size() );
|
||||||
|
|
||||||
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
|
for ( Iterator<Dependency> i = dependencies.iterator(); i.hasNext(); )
|
||||||
{
|
{
|
||||||
Dependency d = (Dependency) i.next();
|
Dependency d = i.next();
|
||||||
|
|
||||||
String scope = d.getScope();
|
String scope = d.getScope();
|
||||||
|
|
||||||
|
@ -406,10 +406,10 @@ public class MavenMetadataSource
|
||||||
{
|
{
|
||||||
if ( ( d.getExclusions() != null ) && !d.getExclusions().isEmpty() )
|
if ( ( d.getExclusions() != null ) && !d.getExclusions().isEmpty() )
|
||||||
{
|
{
|
||||||
List exclusions = new ArrayList();
|
List<String> exclusions = new ArrayList<String>();
|
||||||
for ( Iterator j = d.getExclusions().iterator(); j.hasNext(); )
|
for ( Iterator<Exclusion> j = d.getExclusions().iterator(); j.hasNext(); )
|
||||||
{
|
{
|
||||||
Exclusion e = (Exclusion) j.next();
|
Exclusion e = j.next();
|
||||||
exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
|
exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.apache.maven.model.DistributionManagement;
|
||||||
import org.apache.maven.model.Model;
|
import org.apache.maven.model.Model;
|
||||||
import org.apache.maven.model.PluginManagement;
|
import org.apache.maven.model.PluginManagement;
|
||||||
import org.apache.maven.model.Reporting;
|
import org.apache.maven.model.Reporting;
|
||||||
|
import org.apache.maven.model.Resource;
|
||||||
import org.apache.maven.model.Scm;
|
import org.apache.maven.model.Scm;
|
||||||
import org.apache.maven.model.Site;
|
import org.apache.maven.model.Site;
|
||||||
import org.apache.maven.project.ModelUtils;
|
import org.apache.maven.project.ModelUtils;
|
||||||
|
@ -184,6 +185,8 @@ public class DefaultModelInheritanceAssembler
|
||||||
child.setProperties( props );
|
child.setProperties( props );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this!
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
private void assembleDependencyManagementInheritance( Model child, Model parent )
|
private void assembleDependencyManagementInheritance( Model child, Model parent )
|
||||||
{
|
{
|
||||||
DependencyManagement parentDepMgmt = parent.getDependencyManagement();
|
DependencyManagement parentDepMgmt = parent.getDependencyManagement();
|
||||||
|
@ -198,18 +201,18 @@ public class DefaultModelInheritanceAssembler
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List childDeps = childDepMgmt.getDependencies();
|
List<Dependency> childDeps = childDepMgmt.getDependencies();
|
||||||
|
|
||||||
Map mappedChildDeps = new TreeMap();
|
Map<String, Dependency> mappedChildDeps = new TreeMap<String, Dependency>();
|
||||||
for ( Iterator it = childDeps.iterator(); it.hasNext(); )
|
for ( Iterator<Dependency> it = childDeps.iterator(); it.hasNext(); )
|
||||||
{
|
{
|
||||||
Dependency dep = (Dependency) it.next();
|
Dependency dep = it.next();
|
||||||
mappedChildDeps.put( dep.getManagementKey(), dep );
|
mappedChildDeps.put( dep.getManagementKey(), dep );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Iterator it = parentDepMgmt.getDependencies().iterator(); it.hasNext(); )
|
for ( Iterator<Dependency> it = parentDepMgmt.getDependencies().iterator(); it.hasNext(); )
|
||||||
{
|
{
|
||||||
Dependency dep = (Dependency) it.next();
|
Dependency dep = it.next();
|
||||||
if ( !mappedChildDeps.containsKey( dep.getManagementKey() ) )
|
if ( !mappedChildDeps.containsKey( dep.getManagementKey() ) )
|
||||||
{
|
{
|
||||||
childDepMgmt.addDependency( dep );
|
childDepMgmt.addDependency( dep );
|
||||||
|
@ -244,17 +247,19 @@ public class DefaultModelInheritanceAssembler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this!
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
private void assembleDependencyInheritance( Model child, Model parent )
|
private void assembleDependencyInheritance( Model child, Model parent )
|
||||||
{
|
{
|
||||||
Map depsMap = new LinkedHashMap();
|
Map<String, Dependency> depsMap = new LinkedHashMap<String, Dependency>();
|
||||||
|
|
||||||
List deps = parent.getDependencies();
|
List<Dependency> deps = parent.getDependencies();
|
||||||
|
|
||||||
if ( deps != null )
|
if ( deps != null )
|
||||||
{
|
{
|
||||||
for ( Iterator it = deps.iterator(); it.hasNext(); )
|
for ( Iterator<Dependency> it = deps.iterator(); it.hasNext(); )
|
||||||
{
|
{
|
||||||
Dependency dependency = (Dependency) it.next();
|
Dependency dependency = it.next();
|
||||||
depsMap.put( dependency.getManagementKey(), dependency );
|
depsMap.put( dependency.getManagementKey(), dependency );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -263,14 +268,14 @@ public class DefaultModelInheritanceAssembler
|
||||||
|
|
||||||
if ( deps != null )
|
if ( deps != null )
|
||||||
{
|
{
|
||||||
for ( Iterator it = deps.iterator(); it.hasNext(); )
|
for ( Iterator<Dependency> it = deps.iterator(); it.hasNext(); )
|
||||||
{
|
{
|
||||||
Dependency dependency = (Dependency) it.next();
|
Dependency dependency = it.next();
|
||||||
depsMap.put( dependency.getManagementKey(), dependency );
|
depsMap.put( dependency.getManagementKey(), dependency );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
child.setDependencies( new ArrayList( depsMap.values() ) );
|
child.setDependencies( new ArrayList<Dependency>( depsMap.values() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assembleBuildInheritance( Model child, Model parent )
|
private void assembleBuildInheritance( Model child, Model parent )
|
||||||
|
@ -286,6 +291,15 @@ public class DefaultModelInheritanceAssembler
|
||||||
child.setBuild( childBuild );
|
child.setBuild( childBuild );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assembleBuildInheritance( childBuild, parentBuild );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this!
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void assembleBuildInheritance( Build childBuild,
|
||||||
|
Build parentBuild )
|
||||||
|
{
|
||||||
// The build has been set but we want to step in here and fill in
|
// The build has been set but we want to step in here and fill in
|
||||||
// values that have not been set by the child.
|
// values that have not been set by the child.
|
||||||
|
|
||||||
|
@ -334,7 +348,7 @@ public class DefaultModelInheritanceAssembler
|
||||||
|
|
||||||
ModelUtils.mergeFilterLists( childBuild.getFilters(), parentBuild.getFilters() );
|
ModelUtils.mergeFilterLists( childBuild.getFilters(), parentBuild.getFilters() );
|
||||||
|
|
||||||
List resources = childBuild.getResources();
|
List<Resource> resources = childBuild.getResources();
|
||||||
if ( ( resources == null ) || resources.isEmpty() )
|
if ( ( resources == null ) || resources.isEmpty() )
|
||||||
{
|
{
|
||||||
childBuild.setResources( parentBuild.getResources() );
|
childBuild.setResources( parentBuild.getResources() );
|
||||||
|
@ -364,7 +378,6 @@ public class DefaultModelInheritanceAssembler
|
||||||
false );
|
false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void assembleScmInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
|
private void assembleScmInheritance( Model child, Model parent, String childPathAdjustment, boolean appendPaths )
|
||||||
{
|
{
|
||||||
|
@ -525,7 +538,7 @@ public class DefaultModelInheritanceAssembler
|
||||||
// TODO: Move this to plexus-utils' PathTool.
|
// TODO: Move this to plexus-utils' PathTool.
|
||||||
private static String resolvePath( String uncleanPath )
|
private static String resolvePath( String uncleanPath )
|
||||||
{
|
{
|
||||||
LinkedList pathElements = new LinkedList();
|
LinkedList<String> pathElements = new LinkedList<String>();
|
||||||
|
|
||||||
StringTokenizer tokenizer = new StringTokenizer( uncleanPath, "/" );
|
StringTokenizer tokenizer = new StringTokenizer( uncleanPath, "/" );
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.maven.project.inheritance;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.maven.model.Build;
|
||||||
import org.apache.maven.model.Model;
|
import org.apache.maven.model.Model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,5 +34,8 @@ public interface ModelInheritanceAssembler
|
||||||
|
|
||||||
void assembleModelInheritance( Model child, Model parent );
|
void assembleModelInheritance( Model child, Model parent );
|
||||||
|
|
||||||
|
void assembleBuildInheritance( Build childBuild,
|
||||||
|
Build parentBuild );
|
||||||
|
|
||||||
void copyModel( Model dest, Model source );
|
void copyModel( Model dest, Model source );
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,12 @@ import java.util.List;
|
||||||
public class DefaultPathTranslator
|
public class DefaultPathTranslator
|
||||||
implements PathTranslator
|
implements PathTranslator
|
||||||
{
|
{
|
||||||
|
private static final String[] BASEDIR_EXPRESSIONS = {
|
||||||
|
"${basedir}",
|
||||||
|
"${pom.basedir}",
|
||||||
|
"${project.basedir}"
|
||||||
|
};
|
||||||
|
|
||||||
private String FILE_SEPARATOR = "/";
|
private String FILE_SEPARATOR = "/";
|
||||||
|
|
||||||
public void alignToBaseDirectory( Model model, File basedir )
|
public void alignToBaseDirectory( Model model, File basedir )
|
||||||
|
@ -91,18 +97,28 @@ public class DefaultPathTranslator
|
||||||
|
|
||||||
private String stripBasedirToken( String s )
|
private String stripBasedirToken( String s )
|
||||||
{
|
{
|
||||||
String basedirExpr = "${basedir}";
|
|
||||||
|
|
||||||
if ( s != null )
|
if ( s != null )
|
||||||
{
|
{
|
||||||
s = s.trim();
|
String basedirExpr = null;
|
||||||
|
for ( int i = 0; i < BASEDIR_EXPRESSIONS.length; i++ )
|
||||||
|
{
|
||||||
|
basedirExpr = BASEDIR_EXPRESSIONS[i];
|
||||||
if ( s.startsWith( basedirExpr ) )
|
if ( s.startsWith( basedirExpr ) )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
basedirExpr = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( basedirExpr != null )
|
||||||
{
|
{
|
||||||
if ( s.length() > basedirExpr.length() )
|
if ( s.length() > basedirExpr.length() )
|
||||||
{
|
{
|
||||||
// Take out ${basedir} and the leading slash
|
// Take out basedir expression and the leading slash
|
||||||
s = s.substring( basedirExpr.length() + 1 );
|
s = chopLeadingFileSeparator( s.substring( basedirExpr.length() ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -114,6 +130,25 @@ public class DefaultPathTranslator
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the leading directory separator from the specified filesystem path (if any). For platform-independent
|
||||||
|
* behavior, this method accepts both the forward slash and the backward slash as separator.
|
||||||
|
*
|
||||||
|
* @param path The filesystem path, may be <code>null</code>.
|
||||||
|
* @return The altered filesystem path or <code>null</code> if the input path was <code>null</code>.
|
||||||
|
*/
|
||||||
|
private String chopLeadingFileSeparator( String path )
|
||||||
|
{
|
||||||
|
if ( path != null )
|
||||||
|
{
|
||||||
|
if ( path.startsWith( "/" ) || path.startsWith( "\\" ) )
|
||||||
|
{
|
||||||
|
path = path.substring( 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean requiresBaseDirectoryAlignment( String s )
|
private boolean requiresBaseDirectoryAlignment( String s )
|
||||||
{
|
{
|
||||||
if ( s != null )
|
if ( s != null )
|
||||||
|
|
|
@ -42,6 +42,7 @@ public class DefaultMavenProjectBuilderTest
|
||||||
|
|
||||||
private DefaultMavenProjectBuilder projectBuilder;
|
private DefaultMavenProjectBuilder projectBuilder;
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setUp()
|
public void setUp()
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
@ -55,6 +56,7 @@ public class DefaultMavenProjectBuilderTest
|
||||||
filesToDelete.add( localRepoDir );
|
filesToDelete.add( localRepoDir );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void tearDown()
|
public void tearDown()
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
@ -114,6 +116,8 @@ public class DefaultMavenProjectBuilderTest
|
||||||
|
|
||||||
MavenProject project = getProject( pom );
|
MavenProject project = getProject( pom );
|
||||||
|
|
||||||
|
projectBuilder.calculateConcreteState( project, new DefaultProjectBuilderConfiguration() );
|
||||||
|
|
||||||
Build build = project.getBuild();
|
Build build = project.getBuild();
|
||||||
assertNotNull( "Project should have a build section containing the test resource.", build );
|
assertNotNull( "Project should have a build section containing the test resource.", build );
|
||||||
|
|
||||||
|
@ -132,6 +136,7 @@ public class DefaultMavenProjectBuilderTest
|
||||||
System.out.println( "Interpolated, translated resource directory is: " + res.getDirectory() );
|
System.out.println( "Interpolated, translated resource directory is: " + res.getDirectory() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected ArtifactRepository getLocalRepository()
|
protected ArtifactRepository getLocalRepository()
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,570 @@
|
||||||
|
package org.apache.maven.project;
|
||||||
|
|
||||||
|
import org.apache.maven.model.Build;
|
||||||
|
import org.apache.maven.model.Plugin;
|
||||||
|
import org.apache.maven.model.Resource;
|
||||||
|
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
||||||
|
import org.codehaus.plexus.PlexusTestCase;
|
||||||
|
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||||
|
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MavenProjectDynamismTest
|
||||||
|
extends PlexusTestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
private MavenProjectBuilder projectBuilder;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUp()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testBuildSectionGroupIdInterpolation()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom-interp.xml" );
|
||||||
|
|
||||||
|
projectBuilder.calculateConcreteState( project, new DefaultProjectBuilderConfiguration() );
|
||||||
|
|
||||||
|
String basepath = "/" + project.getGroupId();
|
||||||
|
|
||||||
|
Build build = project.getBuild();
|
||||||
|
|
||||||
|
assertTrue( build.getSourceDirectory().startsWith( basepath ) );
|
||||||
|
assertTrue( build.getTestSourceDirectory().startsWith( basepath ) );
|
||||||
|
assertTrue( build.getScriptSourceDirectory().startsWith( basepath ) );
|
||||||
|
|
||||||
|
List plugins = build.getPlugins();
|
||||||
|
assertNotNull( plugins );
|
||||||
|
assertEquals( 1, plugins.size() );
|
||||||
|
|
||||||
|
Plugin plugin = (Plugin) plugins.get( 0 );
|
||||||
|
assertEquals( "my-plugin", plugin.getArtifactId() );
|
||||||
|
|
||||||
|
Xpp3Dom conf = (Xpp3Dom) plugin.getConfiguration();
|
||||||
|
assertNotNull( conf );
|
||||||
|
|
||||||
|
Xpp3Dom[] children = conf.getChildren();
|
||||||
|
assertEquals( 3, children.length );
|
||||||
|
|
||||||
|
for ( int i = 0; i < children.length; i++ )
|
||||||
|
{
|
||||||
|
assertEquals( "Configuration parameter: "
|
||||||
|
+ children[i].getName()
|
||||||
|
+ " should have a an interpolated POM groupId as its value.",
|
||||||
|
children[i].getValue(),
|
||||||
|
project.getGroupId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, new DefaultProjectBuilderConfiguration() );
|
||||||
|
|
||||||
|
String projectGidExpr = "${project.groupId}";
|
||||||
|
String pomGidExpr = "${pom.groupId}";
|
||||||
|
String nakedGidExpr = "${groupId}";
|
||||||
|
|
||||||
|
build = project.getBuild();
|
||||||
|
|
||||||
|
assertTrue( build.getSourceDirectory().startsWith( "/" + projectGidExpr ) );
|
||||||
|
assertTrue( build.getTestSourceDirectory().startsWith( "/" + pomGidExpr ) );
|
||||||
|
assertTrue( build.getScriptSourceDirectory().startsWith( "/" + nakedGidExpr ) );
|
||||||
|
|
||||||
|
plugins = build.getPlugins();
|
||||||
|
assertNotNull( plugins );
|
||||||
|
assertEquals( 1, plugins.size() );
|
||||||
|
|
||||||
|
plugin = (Plugin) plugins.get( 0 );
|
||||||
|
assertEquals( "my-plugin", plugin.getArtifactId() );
|
||||||
|
|
||||||
|
conf = (Xpp3Dom) plugin.getConfiguration();
|
||||||
|
assertNotNull( conf );
|
||||||
|
|
||||||
|
children = conf.getChildren();
|
||||||
|
assertEquals( 3, children.length );
|
||||||
|
|
||||||
|
assertEquals( "Configuration parameter: " + children[0].getName() + " should have "
|
||||||
|
+ projectGidExpr + " as its value.", children[0].getValue(), projectGidExpr );
|
||||||
|
|
||||||
|
assertEquals( "Configuration parameter: " + children[1].getName() + " should have "
|
||||||
|
+ pomGidExpr + " as its value.", children[1].getValue(), pomGidExpr );
|
||||||
|
|
||||||
|
assertEquals( "Configuration parameter: " + children[2].getName() + " should have "
|
||||||
|
+ nakedGidExpr + " as its value.", children[2].getValue(), nakedGidExpr );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testRoundTrip()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException,
|
||||||
|
ModelInterpolationException, ProjectBuildingException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom.xml" );
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
File baseDir = project.getBasedir();
|
||||||
|
File buildDir = new File( baseDir, "target" );
|
||||||
|
|
||||||
|
String basedirExpr = "${pom.basedir}";
|
||||||
|
String buildDirExpr = "${pom.build.directory}";
|
||||||
|
|
||||||
|
assertTrue( project.isConcrete() );
|
||||||
|
|
||||||
|
Build build = project.getBuild();
|
||||||
|
|
||||||
|
assertEquals( "Concrete source directory should be absolute.",
|
||||||
|
new File( baseDir, "/src/main/java" ).getAbsolutePath(),
|
||||||
|
build.getSourceDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete test-source directory should be absolute.",
|
||||||
|
new File( baseDir, "/src/test/java" ).getAbsolutePath(),
|
||||||
|
build.getTestSourceDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete script-source directory should be absolute.",
|
||||||
|
new File( baseDir, "/src/main/scripts" ).getAbsolutePath(),
|
||||||
|
build.getScriptSourceDirectory() );
|
||||||
|
|
||||||
|
List compileSourceRoots = project.getCompileSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Concrete compile-source roots should not be null.", compileSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Concrete compile-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
compileSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete compile-source roots should contain interpolated source-directory value.",
|
||||||
|
new File( baseDir, "/src/main/java" ).getAbsolutePath(),
|
||||||
|
compileSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
List testCompileSourceRoots = project.getTestCompileSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Concrete test-compile-source roots should not be null.",
|
||||||
|
testCompileSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Concrete test-compile-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
testCompileSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete test-compile-source roots should contain interpolated test-source-directory value.",
|
||||||
|
new File( baseDir, "/src/test/java" ).getAbsolutePath(),
|
||||||
|
testCompileSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
List scriptSourceRoots = project.getScriptSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Concrete script-source roots should not be null.", scriptSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Concrete script-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
scriptSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete script-source roots should contain interpolated script-source-directory value.",
|
||||||
|
new File( baseDir, "/src/main/scripts" ).getAbsolutePath(),
|
||||||
|
scriptSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
List resources = build.getResources();
|
||||||
|
|
||||||
|
assertNotNull( "Concrete resources should not be null.", resources );
|
||||||
|
|
||||||
|
assertEquals( "Concrete resources should contain one entry.", 1, resources.size() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete resource should contain absolute path.",
|
||||||
|
new File( buildDir, "generated-resources/plexus" ).getAbsolutePath(),
|
||||||
|
( (Resource) resources.get( 0 ) ).getDirectory() );
|
||||||
|
|
||||||
|
List filters = build.getFilters();
|
||||||
|
|
||||||
|
assertNotNull( "Concrete filters should not be null.", filters );
|
||||||
|
|
||||||
|
assertEquals( "Concrete filters should contain one entry.", 1, filters.size() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete filter entry should contain absolute path.",
|
||||||
|
new File( buildDir, "/generated-filters.properties" ).getAbsolutePath(),
|
||||||
|
filters.get( 0 ) );
|
||||||
|
|
||||||
|
assertEquals( "Concrete output-directory should be absolute.",
|
||||||
|
new File( buildDir, "/classes" ).getAbsolutePath(),
|
||||||
|
build.getOutputDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete test-output-directory should be absolute.",
|
||||||
|
new File( buildDir, "/test-classes" ).getAbsolutePath(),
|
||||||
|
build.getTestOutputDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Concrete build directory should be absolute.",
|
||||||
|
new File( baseDir, "target" ).getAbsolutePath(),
|
||||||
|
build.getDirectory() );
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------
|
||||||
|
// NOW, RESTORE THE DYNAMIC STATE FOR THE BUILD SECTION AND
|
||||||
|
// ASSOCIATED DIRECTORIES ATTACHED TO THE PROJECT INSTANCE.
|
||||||
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
|
||||||
|
assertFalse( project.isConcrete() );
|
||||||
|
|
||||||
|
build = project.getBuild();
|
||||||
|
|
||||||
|
assertEquals( "Restored source directory should be expressed in terms of the basedir.",
|
||||||
|
basedirExpr + "/src/main/java",
|
||||||
|
build.getSourceDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Restored test-source directory should be expressed in terms of the basedir.",
|
||||||
|
basedirExpr + "/src/test/java",
|
||||||
|
build.getTestSourceDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Restored script-source directory should be expressed in terms of the basedir.",
|
||||||
|
basedirExpr + "/src/main/scripts",
|
||||||
|
build.getScriptSourceDirectory() );
|
||||||
|
|
||||||
|
compileSourceRoots = project.getCompileSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Restored compile-source roots should not be null.", compileSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Restored compile-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
compileSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Restored compile-source roots should contain uninterpolated source-directory value.",
|
||||||
|
"${pom.basedir}/src/main/java",
|
||||||
|
compileSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
testCompileSourceRoots = project.getTestCompileSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Restored test-compile-source roots should not be null.",
|
||||||
|
testCompileSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Restored test-compile-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
testCompileSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Restored test-compile-source roots should contain uninterpolated test-source-directory value.",
|
||||||
|
"${pom.basedir}/src/test/java",
|
||||||
|
testCompileSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
scriptSourceRoots = project.getScriptSourceRoots();
|
||||||
|
|
||||||
|
assertNotNull( "Restored script-source roots should not be null.", scriptSourceRoots );
|
||||||
|
|
||||||
|
assertEquals( "Restored script-source roots should contain one entry.",
|
||||||
|
1,
|
||||||
|
scriptSourceRoots.size() );
|
||||||
|
|
||||||
|
assertEquals( "Restored script-source roots should contain uninterpolated script-source-directory value.",
|
||||||
|
"${pom.basedir}/src/main/scripts",
|
||||||
|
scriptSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
resources = build.getResources();
|
||||||
|
|
||||||
|
assertNotNull( "Restored resources should not be null.", resources );
|
||||||
|
|
||||||
|
assertEquals( "Restored resources should contain one entry.", 1, resources.size() );
|
||||||
|
|
||||||
|
assertEquals( "Restored resource should contain uninterpolated reference to build directory.",
|
||||||
|
buildDirExpr + "/generated-resources/plexus",
|
||||||
|
( (Resource) resources.get( 0 ) ).getDirectory() );
|
||||||
|
|
||||||
|
filters = build.getFilters();
|
||||||
|
|
||||||
|
assertNotNull( "Restored filters should not be null.", filters );
|
||||||
|
|
||||||
|
assertEquals( "Restored filters should contain one entry.", 1, filters.size() );
|
||||||
|
|
||||||
|
assertEquals( "Restored filter entry should contain uninterpolated reference to build directory.",
|
||||||
|
buildDirExpr + "/generated-filters.properties",
|
||||||
|
filters.get( 0 ) );
|
||||||
|
|
||||||
|
assertEquals( "Restored output-directory should be expressed in terms of the build-directory.",
|
||||||
|
buildDirExpr + "/classes",
|
||||||
|
build.getOutputDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Restored test-output-directory should be expressed in terms of the build-directory.",
|
||||||
|
buildDirExpr + "/test-classes",
|
||||||
|
build.getTestOutputDirectory() );
|
||||||
|
|
||||||
|
assertEquals( "Restored build directory should be relative.",
|
||||||
|
"target",
|
||||||
|
build.getDirectory() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testShouldPreserveAddedResourceInRestoredState()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom.xml" );
|
||||||
|
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
Build build = project.getBuild();
|
||||||
|
|
||||||
|
Resource r = new Resource();
|
||||||
|
r.setDirectory( "myDir" );
|
||||||
|
|
||||||
|
build.addResource( r );
|
||||||
|
|
||||||
|
List resources = build.getResources();
|
||||||
|
assertNotNull( "Concrete resources should not be null.", resources );
|
||||||
|
assertEquals( "Concrete resources should contain two entries.", 2, resources.size() );
|
||||||
|
assertResourcePresent( "concrete resources",
|
||||||
|
new File( build.getDirectory(), "generated-resources/plexus" ).getAbsolutePath(),
|
||||||
|
resources );
|
||||||
|
assertResourcePresent( "concrete resources", "myDir", resources );
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
|
||||||
|
build = project.getBuild();
|
||||||
|
|
||||||
|
resources = build.getResources();
|
||||||
|
assertNotNull( "Restored resources should not be null.", resources );
|
||||||
|
assertEquals( "Restored resources should contain two entries.", 2, resources.size() );
|
||||||
|
assertResourcePresent( "restored resources",
|
||||||
|
"${pom.build.directory}/generated-resources/plexus",
|
||||||
|
resources );
|
||||||
|
assertResourcePresent( "restored resources", "myDir", resources );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testShouldPreserveAddedFilterInRestoredState()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom.xml" );
|
||||||
|
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
Build build = project.getBuild();
|
||||||
|
|
||||||
|
build.addFilter( "myDir/filters.properties" );
|
||||||
|
|
||||||
|
List filters = build.getFilters();
|
||||||
|
assertNotNull( "Concrete filters should not be null.", filters );
|
||||||
|
assertEquals( "Concrete filters should contain two entries.", 2, filters.size() );
|
||||||
|
assertFilterPresent( "concrete filters",
|
||||||
|
new File( build.getDirectory(), "generated-filters.properties" ).getAbsolutePath(),
|
||||||
|
filters );
|
||||||
|
|
||||||
|
assertFilterPresent( "concrete filters", "myDir/filters.properties", filters );
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
|
||||||
|
build = project.getBuild();
|
||||||
|
|
||||||
|
filters = build.getFilters();
|
||||||
|
assertNotNull( "Restored filters should not be null.", filters );
|
||||||
|
assertEquals( "Restored filters should contain two entries.", 2, filters.size() );
|
||||||
|
assertFilterPresent( "restored filters",
|
||||||
|
"${pom.build.directory}/generated-filters.properties",
|
||||||
|
filters );
|
||||||
|
assertFilterPresent( "restored filters", "myDir/filters.properties", filters );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testShouldIncorporateChangedBuildDirectoryViaExpressionsOnNextConcreteCalculation()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom.xml" );
|
||||||
|
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
Build build = project.getBuild();
|
||||||
|
|
||||||
|
assertEquals( "First concrete build directory should be absolute and point to target dir.",
|
||||||
|
new File( project.getBasedir(), "target" ).getAbsolutePath(),
|
||||||
|
build.getDirectory() );
|
||||||
|
assertEquals( "First concrete build output-directory should be absolute and point to target/classes dir.",
|
||||||
|
new File( project.getBasedir(), "target/classes" ).getAbsolutePath(),
|
||||||
|
build.getOutputDirectory() );
|
||||||
|
|
||||||
|
build.setDirectory( "target2" );
|
||||||
|
|
||||||
|
assertEquals( "AFTER CHANGING BUILD DIRECTORY, build directory should be relative and point to target2 dir.",
|
||||||
|
"target2",
|
||||||
|
build.getDirectory() );
|
||||||
|
assertEquals( "AFTER CHANGING BUILD DIRECTORY, build output-directory should be absolute and still point to target/classes dir.",
|
||||||
|
new File( project.getBasedir(), "target/classes" ).getAbsolutePath(),
|
||||||
|
build.getOutputDirectory() );
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
build = project.getBuild();
|
||||||
|
|
||||||
|
assertEquals( "Second concrete build directory should be absolute and point to target2 dir.",
|
||||||
|
new File( project.getBasedir(), "target2" ).getAbsolutePath(),
|
||||||
|
build.getDirectory() );
|
||||||
|
assertEquals( "Second concrete build output-directory should be absolute and point to target2/classes dir.",
|
||||||
|
new File( project.getBasedir(), "target2/classes" ).getAbsolutePath(),
|
||||||
|
build.getOutputDirectory() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testShouldPreserveInitialValuesForPropertiesReferencingBuildPaths()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom.xml" );
|
||||||
|
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
project.getBuild().setDirectory( "target2" );
|
||||||
|
|
||||||
|
String originalValue = project.getProperties().getProperty( "myProperty" );
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
assertEquals( "After resetting build-directory and going through a recalculation phase for the project, "
|
||||||
|
+ "property value for 'myProperty' should STILL be the absolute initial build directory.",
|
||||||
|
originalValue,
|
||||||
|
project.getProperties().getProperty( "myProperty" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testShouldAlignCompileSourceRootsInConcreteState()
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException,
|
||||||
|
ModelInterpolationException
|
||||||
|
{
|
||||||
|
MavenProject project = buildProject( "pom-relative.xml" );
|
||||||
|
|
||||||
|
ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration();
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
List compileSourceRoots = project.getCompileSourceRoots();
|
||||||
|
assertNotNull( "First concrete state compile-source roots should not be null.",
|
||||||
|
compileSourceRoots );
|
||||||
|
assertEquals( "First concrete state should contain one compile-source root.",
|
||||||
|
1,
|
||||||
|
compileSourceRoots.size() );
|
||||||
|
assertEquals( "First concrete state should have an absolute path for compile-source root.",
|
||||||
|
new File( project.getBasedir(), "src/main/java" ).getAbsolutePath(),
|
||||||
|
compileSourceRoots.get( 0 ) );
|
||||||
|
|
||||||
|
String newSourceRoot = new File( project.getBuild().getDirectory(),
|
||||||
|
"generated-sources/modello" ).getAbsolutePath();
|
||||||
|
|
||||||
|
project.addCompileSourceRoot( newSourceRoot );
|
||||||
|
|
||||||
|
projectBuilder.restoreDynamicState( project, config );
|
||||||
|
|
||||||
|
compileSourceRoots = project.getCompileSourceRoots();
|
||||||
|
assertNotNull( "Restored dynamic state compile-source roots should not be null.",
|
||||||
|
compileSourceRoots );
|
||||||
|
assertEquals( "Restored dynamic state should contain two compile-source roots.",
|
||||||
|
2,
|
||||||
|
compileSourceRoots.size() );
|
||||||
|
assertEquals( "Restored dynamic state should have a relative path for original compile-source root.",
|
||||||
|
"src/main/java",
|
||||||
|
compileSourceRoots.get( 0 ) );
|
||||||
|
assertEquals( "Restored dynamic state should have a relative path for new compile-source root.",
|
||||||
|
"target/generated-sources/modello",
|
||||||
|
compileSourceRoots.get( 1 ) );
|
||||||
|
|
||||||
|
projectBuilder.calculateConcreteState( project, config );
|
||||||
|
|
||||||
|
compileSourceRoots = project.getCompileSourceRoots();
|
||||||
|
assertNotNull( "Second concrete state compile-source roots should not be null.",
|
||||||
|
compileSourceRoots );
|
||||||
|
assertEquals( "Second concrete state should contain two compile-source roots.",
|
||||||
|
2,
|
||||||
|
compileSourceRoots.size() );
|
||||||
|
assertEquals( "Second concrete state should have an absolute path for original compile-source root.",
|
||||||
|
new File( project.getBasedir(), "src/main/java" ).getAbsolutePath(),
|
||||||
|
compileSourceRoots.get( 0 ) );
|
||||||
|
assertEquals( "Second concrete state should have an absolute path for new compile-source root.",
|
||||||
|
newSourceRoot,
|
||||||
|
compileSourceRoots.get( 1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Useful for diagnostics.
|
||||||
|
// private void displayPOM( Model model )
|
||||||
|
// throws IOException
|
||||||
|
// {
|
||||||
|
// StringWriter writer = new StringWriter();
|
||||||
|
// new MavenXpp3Writer().write( writer, model );
|
||||||
|
//
|
||||||
|
// System.out.println( writer.toString() );
|
||||||
|
// }
|
||||||
|
|
||||||
|
private void assertResourcePresent( String testLabel,
|
||||||
|
String directory,
|
||||||
|
List resources )
|
||||||
|
{
|
||||||
|
boolean found = false;
|
||||||
|
|
||||||
|
if ( resources != null )
|
||||||
|
{
|
||||||
|
for ( Iterator it = resources.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
Resource resource = (Resource) it.next();
|
||||||
|
if ( directory.equals( resource.getDirectory() ) )
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !found )
|
||||||
|
{
|
||||||
|
fail( "Missing resource with directory: " + directory + " in " + testLabel );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertFilterPresent( String testLabel,
|
||||||
|
String path,
|
||||||
|
List filters )
|
||||||
|
{
|
||||||
|
boolean found = false;
|
||||||
|
|
||||||
|
if ( filters != null )
|
||||||
|
{
|
||||||
|
for ( Iterator it = filters.iterator(); it.hasNext(); )
|
||||||
|
{
|
||||||
|
String filterPath = (String) it.next();
|
||||||
|
if ( path.equals( filterPath ) )
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !found )
|
||||||
|
{
|
||||||
|
fail( "Missing filter with path: " + path + " in " + testLabel );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MavenProject buildProject( String path )
|
||||||
|
throws IOException, XmlPullParserException, URISyntaxException, ProjectBuildingException
|
||||||
|
{
|
||||||
|
ClassLoader cloader = Thread.currentThread().getContextClassLoader();
|
||||||
|
URL resource = cloader.getResource( "project-dynamism/" + path );
|
||||||
|
|
||||||
|
if ( resource == null )
|
||||||
|
{
|
||||||
|
fail( "Cannot find classpath resource for POM: " + path );
|
||||||
|
}
|
||||||
|
|
||||||
|
File pomFile = new File( resource.getPath() );
|
||||||
|
pomFile = pomFile.getAbsoluteFile();
|
||||||
|
|
||||||
|
MavenProject project = projectBuilder.build( pomFile,
|
||||||
|
new DefaultProjectBuilderConfiguration() );
|
||||||
|
|
||||||
|
assertEquals( pomFile, project.getFile() );
|
||||||
|
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -35,6 +35,7 @@ public class ProjectBaseDirectoryAlignmentTest
|
||||||
File f = getTestFile( dir + "project-which-needs-directory-alignment.xml" );
|
File f = getTestFile( dir + "project-which-needs-directory-alignment.xml" );
|
||||||
|
|
||||||
MavenProject project = getProject( f );
|
MavenProject project = getProject( f );
|
||||||
|
projectBuilder.calculateConcreteState( project, new DefaultProjectBuilderConfiguration() );
|
||||||
|
|
||||||
assertNotNull( "Test project can't be null!", project );
|
assertNotNull( "Test project can't be null!", project );
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.test</groupId>
|
||||||
|
<artifactId>test-build-dynamism</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<sourceDirectory>/${project.groupId}/src/main/java</sourceDirectory>
|
||||||
|
<testSourceDirectory>/${pom.groupId}/src/test/java</testSourceDirectory>
|
||||||
|
<scriptSourceDirectory>/${groupId}/src/main/scripts</scriptSourceDirectory>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>my-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<testOne>${project.groupId}</testOne>
|
||||||
|
<testTwo>${pom.groupId}</testTwo>
|
||||||
|
<testThree>${groupId}</testThree>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.test</groupId>
|
||||||
|
<artifactId>test-build-dynamism</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<myProperty>${pom.build.directory}</myProperty>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>${pom.build.directory}/generated-resources/plexus</directory>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<filters>
|
||||||
|
<filter>${pom.build.directory}/generated-filters.properties</filter>
|
||||||
|
</filters>
|
||||||
|
|
||||||
|
<directory>target</directory>
|
||||||
|
|
||||||
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
|
<testSourceDirectory>src/test/java</testSourceDirectory>
|
||||||
|
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
|
||||||
|
|
||||||
|
<outputDirectory>${pom.build.directory}/classes</outputDirectory>
|
||||||
|
<testOutputDirectory>${pom.build.directory}/test-classes</testOutputDirectory>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.test</groupId>
|
||||||
|
<artifactId>test-build-dynamism</artifactId>
|
||||||
|
<version>1</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<myProperty>${pom.build.directory}</myProperty>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>${pom.build.directory}/generated-resources/plexus</directory>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<filters>
|
||||||
|
<filter>${pom.build.directory}/generated-filters.properties</filter>
|
||||||
|
</filters>
|
||||||
|
|
||||||
|
<directory>target</directory>
|
||||||
|
|
||||||
|
<sourceDirectory>${pom.basedir}/src/main/java</sourceDirectory>
|
||||||
|
<testSourceDirectory>${pom.basedir}/src/test/java</testSourceDirectory>
|
||||||
|
<scriptSourceDirectory>${pom.basedir}/src/main/scripts</scriptSourceDirectory>
|
||||||
|
|
||||||
|
<outputDirectory>${pom.build.directory}/classes</outputDirectory>
|
||||||
|
<testOutputDirectory>${pom.build.directory}/test-classes</testOutputDirectory>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
30
pom.xml
30
pom.xml
|
@ -46,9 +46,25 @@ under the License.
|
||||||
|
|
||||||
<!-- TODO: TAKE THIS OUT BEFORE WE RELEASE! -->
|
<!-- TODO: TAKE THIS OUT BEFORE WE RELEASE! -->
|
||||||
<repositories>
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>apache.snapshots</id>
|
||||||
|
<url>http://people.apache.org/repo/m2-snapshot-repository/</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
<releases>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</releases>
|
||||||
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>codehaus.snapshots</id>
|
<id>codehaus.snapshots</id>
|
||||||
<url>http://snapshots.repository.codehaus.org/</url>
|
<url>http://snapshots.repository.codehaus.org/</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
<releases>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</releases>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
|
@ -221,6 +237,7 @@ under the License.
|
||||||
<properties>
|
<properties>
|
||||||
<plexusVersion>1.0-alpha-48</plexusVersion>
|
<plexusVersion>1.0-alpha-48</plexusVersion>
|
||||||
<wagonVersion>1.0-beta-3</wagonVersion>
|
<wagonVersion>1.0-beta-3</wagonVersion>
|
||||||
|
<artifactVersion>3.0-20080627-013430-64</artifactVersion>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<!--start-->
|
<!--start-->
|
||||||
|
@ -285,6 +302,11 @@ under the License.
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-core</artifactId>
|
<artifactId>maven-core</artifactId>
|
||||||
<version>2.1-SNAPSHOT</version>
|
<version>2.1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-utils</artifactId>
|
||||||
|
<version>1.5.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
@ -296,11 +318,6 @@ under the License.
|
||||||
<artifactId>plexus-classworlds</artifactId>
|
<artifactId>plexus-classworlds</artifactId>
|
||||||
<version>1.2-alpha-12</version>
|
<version>1.2-alpha-12</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
|
||||||
<artifactId>plexus-utils</artifactId>
|
|
||||||
<version>1.5.1</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.plexus</groupId>
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
<artifactId>plexus-interpolation</artifactId>
|
<artifactId>plexus-interpolation</artifactId>
|
||||||
|
@ -334,6 +351,9 @@ under the License.
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven.artifact</groupId>
|
<groupId>org.apache.maven.artifact</groupId>
|
||||||
<artifactId>maven-artifact</artifactId>
|
<artifactId>maven-artifact</artifactId>
|
||||||
|
<!--
|
||||||
|
<version>${artifactVersion}</version>
|
||||||
|
-->
|
||||||
<version>3.0-SNAPSHOT</version>
|
<version>3.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
Loading…
Reference in New Issue