Author: jvanzyl
Date: Sat Jan 21 08:36:06 2006
New Revision: 371079
URL: http://svn.apache.org/viewcvs?rev=371079&view=rev
Log:
[MNG-1980] Removing the duplicate ID, the reactor will catch duplicate IDs in a
single build so it doesn't not need
to be checked for in the project builder. I have removed the model
caching for now while I'm refactoring
the project builder. The plan is to break the 1000+ lines down into
its constituent components and use
a pipeline to build up the project.
Modified:
maven/components/trunk/maven-core-it/README.txt
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Modified: maven/components/trunk/maven-core-it/README.txt
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/README.txt?rev=371079&r1=371078&r2=371079&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/README.txt (original)
+++ maven/components/trunk/maven-core-it/README.txt Sat Jan 21 08:36:06 2006
@@ -240,7 +240,7 @@
it0087: Verify that a project-level plugin dependency class can be loaded from
both the plugin classloader
and the context classloader available to the plugin.
-it0088: Test path translation
+it0088: Test path translation.
it0089: Test that Checkstyle PackageNamesLoader.loadModuleFactory(..) method
will complete as-is with
the context classloader available to the plugin.
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=371079&r1=371078&r2=371079&view=diff
==============================================================================
---
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
(original)
+++
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
Sat Jan 21 08:36:06 2006
@@ -120,6 +120,7 @@
if ( goals.isEmpty() && rootProject != null )
{
String goal = rootProject.getDefaultGoal();
+
if ( goal != null )
{
goals = Collections.singletonList( goal );
@@ -170,6 +171,7 @@
try
{
Map handlers = findArtifactTypeHandlers( project,
session.getSettings(), session.getLocalRepository() );
+
artifactHandlerManager.addHandlers( handlers );
}
catch ( PluginNotFoundException e )
@@ -179,8 +181,11 @@
}
}
- private void executeTaskSegments( List taskSegments, ReactorManager rm,
MavenSession session,
- MavenProject rootProject,
EventDispatcher dispatcher )
+ private void executeTaskSegments( List taskSegments,
+ ReactorManager rm,
+ MavenSession session,
+ MavenProject rootProject,
+ EventDispatcher dispatcher )
throws LifecycleExecutionException, BuildFailureException
{
for ( Iterator it = taskSegments.iterator(); it.hasNext(); )
@@ -206,6 +211,7 @@
long buildStartTime = System.currentTimeMillis();
String target = rootProject.getId() + " ( " + segment + "
)";
+
dispatcher.dispatchStart( event, target );
// only call once, with the top-level project (assumed to
be provided as a parameter)...
@@ -213,8 +219,7 @@
{
String task = (String) goalIterator.next();
- executeGoalAndHandleFailures( task, session,
rootProject, dispatcher, event, rm, buildStartTime,
- target );
+ executeGoalAndHandleFailures( task, session,
rootProject, dispatcher, event, rm, buildStartTime,target );
}
rm.registerBuildSuccess( rootProject,
System.currentTimeMillis() - buildStartTime );
@@ -229,8 +234,7 @@
getLogger().info( " " + segment );
- getLogger().info(
- "This project has been banned from further executions
due to previous failures." );
+ getLogger().info("This project has been banned from
further executions due to previous failures." );
line();
}
@@ -283,8 +287,7 @@
getLogger().info( " " + segment );
- getLogger().info(
- "This project has been banned from further
executions due to previous failures." );
+ getLogger().info( "This project has been banned from
further executions due to previous failures." );
line();
}
@@ -293,9 +296,14 @@
}
}
- private void executeGoalAndHandleFailures( String task, MavenSession
session, MavenProject project,
- EventDispatcher dispatcher,
String event, ReactorManager rm,
- long buildStartTime, String
target )
+ private void executeGoalAndHandleFailures( String task,
+ MavenSession session,
+ MavenProject project,
+ EventDispatcher dispatcher,
+ String event,
+ ReactorManager rm,
+ long buildStartTime,
+ String target )
throws BuildFailureException, LifecycleExecutionException
{
try
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=371079&r1=371078&r2=371079&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Sat Jan 21 08:36:06 2006
@@ -93,6 +93,40 @@
import java.util.Map;
import java.util.Set;
+/*:apt
+
+ -----
+ POM lifecycle
+ -----
+
+POM Lifecycle
+
+ Order of operations when building a POM
+
+ * inheritance
+ * path translation
+ * interpolation
+ * defaults injection
+
+ Current processing is:
+
+ * inheritance
+ * interpolation
+ * defaults injection
+ * path translation
+
+ I'm not sure how this is working at all ... i think i have a case where this
is failing but i need to
+ encapsulate as a test so i can fix it. Also need to think of the in working
build directory versus looking
+ things up from the repository i.e buildFromSource vs buildFromRepository.
+
+Notes
+
+ * when the model is read it may not have a groupId, as it must be inherited
+
+ * the inheritance assembler must use models that are unadulterated!
+
+*/
+
/**
* @version $Id: DefaultMavenProjectBuilder.java,v 1.37 2005/03/08 01:55:22
* trygvis Exp $
@@ -118,6 +152,8 @@
private ModelValidator validator;
+ private Map projectCache = new HashMap();
+
// TODO: make it a component
private MavenXpp3Reader modelReader;
@@ -137,12 +173,8 @@
private WagonManager wagonManager;
- private final Map modelCache = new HashMap();
-
public static final String MAVEN_MODEL_VERSION = "4.0.0";
- private Map projectCache = new HashMap();
-
public void initialize()
{
modelReader = new MavenXpp3Reader();
@@ -152,18 +184,118 @@
// MavenProjectBuilder Implementation
// ----------------------------------------------------------------------
- public MavenProject buildWithDependencies( File projectDescriptor,
ArtifactRepository localRepository,
+ public MavenProject build( File projectDescriptor, ArtifactRepository
localRepository, ProfileManager profileManager )
+ throws ProjectBuildingException
+ {
+ return buildFromSourceFileInternal( projectDescriptor,
localRepository, profileManager, true );
+ }
+
+ public MavenProject build( File projectDescriptor,
+ ArtifactRepository localRepository,
+ ProfileManager profileManager,
+ boolean checkDistributionManagementStatus )
+ throws ProjectBuildingException
+ {
+ return buildFromSourceFileInternal( projectDescriptor,
localRepository, profileManager, checkDistributionManagementStatus );
+ }
+
+ // jvz:note
+ // When asked for something from the repository are we getting it from the
reactor? Yes, when using this call
+ // we are assuming that the reactor has been run and we have collected the
projects required to satisfy it0042
+ // which means the projects in the reactor are required for finding
classes in <project>/target/classes. Not
+ // sure this is ideal. I remove all caching from the builder and all
reactor related ITs which assume
+ // access to simbling project resources failed.
+ public MavenProject buildFromRepository( Artifact artifact,
+ List remoteArtifactRepositories,
+ ArtifactRepository
localRepository,
+ boolean allowStubModel )
+ throws ProjectBuildingException
+ {
+ String cacheKey = createCacheKey( artifact.getGroupId(),
artifact.getArtifactId(), artifact.getVersion() );
+
+ MavenProject project = (MavenProject) projectCache.get( cacheKey );
+
+ if ( project != null )
+ {
+ return project;
+ }
+
+ Model model = findModelFromRepository( artifact,
remoteArtifactRepositories, localRepository, allowStubModel );
+
+ return buildInternal( "Artifact [" + artifact + "]", model,
localRepository, remoteArtifactRepositories, null, null, false );
+ }
+
+ public MavenProject buildFromRepository( Artifact artifact,
+ List remoteArtifactRepositories,
+ ArtifactRepository
localRepository )
+ throws ProjectBuildingException
+ {
+ return buildFromRepository( artifact, remoteArtifactRepositories,
localRepository, true );
+ }
+
+ // what is using this externally? jvz.
+ public MavenProject buildStandaloneSuperProject( ArtifactRepository
localRepository )
+ throws ProjectBuildingException
+ {
+ Model superModel = getSuperModel();
+
+ superModel.setGroupId( STANDALONE_SUPERPOM_GROUPID );
+
+ superModel.setArtifactId( STANDALONE_SUPERPOM_ARTIFACTID );
+
+ superModel.setVersion( STANDALONE_SUPERPOM_VERSION );
+
+ ProfileManager profileManager = new DefaultProfileManager( container );
+
+ List activeProfiles;
+
+ profileManager.addProfiles( superModel.getProfiles() );
+
+ String projectId = safeVersionlessKey( STANDALONE_SUPERPOM_GROUPID,
STANDALONE_SUPERPOM_ARTIFACTID );
+
+ activeProfiles = injectActiveProfiles( profileManager, superModel );
+
+ MavenProject project = new MavenProject( superModel );
+
+ project.setActiveProfiles( activeProfiles );
+
+ project.setOriginalModel( superModel );
+
+ try
+ {
+ project = processProjectLogic( "<Super-POM>", project, null, null,
true );
+
+ project.setExecutionRoot( true );
+
+ return project;
+ }
+ catch ( ModelInterpolationException e )
+ {
+ throw new ProjectBuildingException( projectId, e.getMessage(), e );
+ }
+ catch ( InvalidRepositoryException e )
+ {
+ throw new ProjectBuildingException( projectId, e.getMessage(), e );
+ }
+ }
+
+ public MavenProject buildWithDependencies( File projectDescriptor,
+ ArtifactRepository
localRepository,
ProfileManager profileManager )
throws ProjectBuildingException, ArtifactResolutionException,
ArtifactNotFoundException
{
return buildWithDependencies( projectDescriptor, localRepository,
profileManager, null );
}
+ // note:jvz This was added for the embedder.
+
/**
* @todo move to metadatasource itself?
*/
- public MavenProject buildWithDependencies( File projectDescriptor,
ArtifactRepository localRepository,
- ProfileManager profileManager,
TransferListener transferListener )
+ public MavenProject buildWithDependencies( File projectDescriptor,
+ ArtifactRepository
localRepository,
+ ProfileManager profileManager,
+ TransferListener
transferListener )
throws ProjectBuildingException, ArtifactResolutionException,
ArtifactNotFoundException
{
MavenProject project = build( projectDescriptor, localRepository,
profileManager );
@@ -216,6 +348,10 @@
return project;
}
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
private void ensureMetadataSourceIsInitialized()
throws ProjectBuildingException
{
@@ -267,47 +403,25 @@
return map;
}
- public MavenProject build( File projectDescriptor, ArtifactRepository
localRepository,
- ProfileManager profileManager )
- throws ProjectBuildingException
- {
- return buildFromSourceFile( projectDescriptor, localRepository,
profileManager, true );
- }
-
- public MavenProject build( File projectDescriptor, ArtifactRepository
localRepository,
- ProfileManager profileManager, boolean
checkDistributionManagementStatus )
- throws ProjectBuildingException
- {
- return buildFromSourceFile( projectDescriptor, localRepository,
profileManager,
- checkDistributionManagementStatus );
- }
-
- private MavenProject buildFromSourceFile( File projectDescriptor,
ArtifactRepository localRepository,
- ProfileManager profileManager,
boolean checkDistributionManagementStatus )
+ private MavenProject buildFromSourceFileInternal( File projectDescriptor,
+ ArtifactRepository
localRepository,
+ ProfileManager
profileManager,
+ boolean
checkDistributionManagementStatus )
throws ProjectBuildingException
{
Model model = readModel( "unknown", projectDescriptor, true );
- // Always cache files in the source tree over those in the repository
- CachedModel cachedModel = new CachedModel( projectDescriptor, model );
-
- String modelKey = createCacheKey( model.getGroupId(),
model.getArtifactId(), model.getVersion() );
- if ( modelCache.containsKey( modelKey ) )
- {
- throw new ProjectBuildingException( model.getGroupId() + ":" +
model.getArtifactId(),
- "Duplicate project ID found in
" +
-
projectDescriptor.getAbsolutePath() );
- }
- modelCache.put( modelKey, cachedModel );
-
- MavenProject project = build( projectDescriptor.getAbsolutePath(),
model, localRepository,
- buildArtifactRepositories(
getSuperModel() ),
-
projectDescriptor.getAbsoluteFile().getParentFile(), profileManager, true );
+ MavenProject project = buildInternal(
projectDescriptor.getAbsolutePath(),
+ model,
+ localRepository,
+ buildArtifactRepositories(
getSuperModel() ),
+ projectDescriptor,
+ profileManager,
+ true );
if ( checkDistributionManagementStatus )
{
- if ( project.getDistributionManagement() != null &&
- project.getDistributionManagement().getStatus() != null )
+ if ( project.getDistributionManagement() != null &&
project.getDistributionManagement().getStatus() != null )
{
String projectId = safeVersionlessKey( project.getGroupId(),
project.getArtifactId() );
@@ -316,46 +430,13 @@
}
}
- // Only translate the base directory for files in the source tree
- pathTranslator.alignToBaseDirectory( project.getModel(),
projectDescriptor.getParentFile() );
-
- Build build = project.getBuild();
- project.addCompileSourceRoot( build.getSourceDirectory() );
- project.addScriptSourceRoot( build.getScriptSourceDirectory() );
- project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
-
- // Only track the file of a POM in the source tree
- project.setFile( projectDescriptor );
-
return project;
}
- public MavenProject buildFromRepository( Artifact artifact, List
remoteArtifactRepositories,
- ArtifactRepository
localRepository )
- throws ProjectBuildingException
- {
- return buildFromRepository( artifact, remoteArtifactRepositories,
localRepository, true );
- }
-
- public MavenProject buildFromRepository( Artifact artifact, List
remoteArtifactRepositories,
- ArtifactRepository
localRepository, boolean allowStubModel )
- throws ProjectBuildingException
- {
- String cacheKey = createCacheKey( artifact.getGroupId(),
artifact.getArtifactId(), artifact.getVersion() );
- MavenProject project = (MavenProject) projectCache.get( cacheKey );
- if ( project != null )
- {
- return project;
- }
-
- Model model = findModelFromRepository( artifact,
remoteArtifactRepositories, localRepository, allowStubModel );
-
- return build( "Artifact [" + artifact + "]", model, localRepository,
remoteArtifactRepositories, null, null,
- false );
- }
-
- private Model findModelFromRepository( Artifact artifact, List
remoteArtifactRepositories,
- ArtifactRepository localRepository,
boolean allowStubModel )
+ private Model findModelFromRepository( Artifact artifact,
+ List remoteArtifactRepositories,
+ ArtifactRepository localRepository,
+ boolean allowStubModel )
throws ProjectBuildingException
{
Artifact projectArtifact;
@@ -367,80 +448,77 @@
}
else
{
- getLogger().warn( "Attempting to build MavenProject instance for
Artifact of type: " + artifact.getType() +
- "; constructing POM artifact instead." );
+ getLogger().warn( "Attempting to build MavenProject instance for
Artifact of type: " + artifact.getType() + "; constructing POM artifact
instead." );
- projectArtifact = artifactFactory.createProjectArtifact(
artifact.getGroupId(), artifact.getArtifactId(),
-
artifact.getVersion(), artifact.getScope() );
+ projectArtifact = artifactFactory.createProjectArtifact(
artifact.getGroupId(),
+
artifact.getArtifactId(),
+
artifact.getVersion(),
+
artifact.getScope() );
}
- CachedModel cachedModel = getCachedProject(
projectArtifact.getGroupId(), projectArtifact.getArtifactId(),
-
projectArtifact.getVersion() );
Model model;
- if ( cachedModel == null )
+
+ String projectId = ArtifactUtils.versionlessKey( projectArtifact );
+
+ try
{
- String projectId = ArtifactUtils.versionlessKey( projectArtifact );
+ artifactResolver.resolve( projectArtifact,
remoteArtifactRepositories, localRepository );
- try
- {
- artifactResolver.resolve( projectArtifact,
remoteArtifactRepositories, localRepository );
+ File file = projectArtifact.getFile();
- File file = projectArtifact.getFile();
- model = readModel( projectId, file, false );
+ model = readModel( projectId, file, false );
- String downloadUrl = null;
- ArtifactStatus status = ArtifactStatus.NONE;
+ String downloadUrl = null;
- DistributionManagement distributionManagement =
model.getDistributionManagement();
- if ( distributionManagement != null )
- {
- downloadUrl = distributionManagement.getDownloadUrl();
+ ArtifactStatus status = ArtifactStatus.NONE;
- status = ArtifactStatus.valueOf(
distributionManagement.getStatus() );
- }
+ DistributionManagement distributionManagement =
model.getDistributionManagement();
- checkStatusAndUpdate( projectArtifact, status, file,
remoteArtifactRepositories, localRepository );
+ if ( distributionManagement != null )
+ {
+ downloadUrl = distributionManagement.getDownloadUrl();
- // TODO: this is gross. Would like to give it the whole model,
but maven-artifact shouldn't depend on that
- // Can a maven-core implementation of the Artifact interface
store it, and be used in the exceptions?
- if ( downloadUrl != null )
- {
- projectArtifact.setDownloadUrl( downloadUrl );
- }
- else
- {
- projectArtifact.setDownloadUrl( model.getUrl() );
- }
+ status = ArtifactStatus.valueOf(
distributionManagement.getStatus() );
}
- catch ( ArtifactResolutionException e )
+
+ checkStatusAndUpdate( projectArtifact, status, file,
remoteArtifactRepositories, localRepository );
+
+ // TODO: this is gross. Would like to give it the whole model, but
maven-artifact shouldn't depend on that
+ // Can a maven-core implementation of the Artifact interface store
it, and be used in the exceptions?
+ if ( downloadUrl != null )
{
- throw new ProjectBuildingException( projectId, "Error getting
POM for '" + projectId +
- "' from the repository: " + e.getMessage(), e );
+ projectArtifact.setDownloadUrl( downloadUrl );
}
- catch ( ArtifactNotFoundException e )
+ else
{
- if ( allowStubModel )
- {
- getLogger().debug( "Artifact not found - using stub model:
" + e.getMessage() );
- model = createStubModel( projectArtifact );
- }
- else
- {
- throw new ProjectBuildingException( projectId, "POM '" +
projectId + "' not found in repository: " +
- e.getMessage(), e );
- }
+ projectArtifact.setDownloadUrl( model.getUrl() );
}
}
- else
+ catch ( ArtifactResolutionException e )
{
- model = cachedModel.getModel();
+ throw new ProjectBuildingException( projectId, "Error getting POM
for '" + projectId + "' from the repository: " + e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ if ( allowStubModel )
+ {
+ getLogger().debug( "Artifact not found - using stub model: " +
e.getMessage() );
+
+ model = createStubModel( projectArtifact );
+ }
+ else
+ {
+ throw new ProjectBuildingException( projectId, "POM '" +
projectId + "' not found in repository: " + e.getMessage(), e );
+ }
}
return model;
}
- private void checkStatusAndUpdate( Artifact projectArtifact,
ArtifactStatus status, File file,
- List remoteArtifactRepositories,
ArtifactRepository localRepository )
+ private void checkStatusAndUpdate( Artifact projectArtifact,
+ ArtifactStatus status, File file,
+ List remoteArtifactRepositories,
+ ArtifactRepository localRepository )
throws ArtifactNotFoundException
{
// TODO: configurable actions dependant on status
@@ -476,50 +554,52 @@
}
}
+ // jvz:note
+ // This is used when requested artifacts do not have an associated POM.
This is for the case where we are
+ // using an m1 repo where the only thing required to be present are the
JAR files.
private Model createStubModel( Artifact projectArtifact )
{
getLogger().debug( "Using defaults for missing POM " + projectArtifact
);
Model model = new Model();
+
model.setModelVersion( "4.0.0" );
+
model.setArtifactId( projectArtifact.getArtifactId() );
+
model.setGroupId( projectArtifact.getGroupId() );
+
model.setVersion( projectArtifact.getVersion() );
+
// TODO: not correct in some instances
model.setPackaging( projectArtifact.getType() );
model.setDistributionManagement( new DistributionManagement() );
- model.getDistributionManagement().setStatus(
ArtifactStatus.GENERATED.toString() );
-
-/* TODO: we should only do this if we can verify the existence of the JAR
itself
- File file = artifact.getFile();
- file.getParentFile().mkdirs();
- FileWriter writer = null;
- try
- {
- writer = new FileWriter( file );
+ model.getDistributionManagement().setStatus(
ArtifactStatus.GENERATED.toString() );
- MavenXpp3Writer w = new MavenXpp3Writer();
- w.write( writer, model );
- }
- catch ( IOException ioe )
- {
- getLogger().warn( "Attempted to write out a temporary generated
POM, but failed", ioe );
- }
- finally
- {
- IOUtil.close( writer );
- }
-*/
return model;
}
- private MavenProject build( String pomLocation, Model model,
ArtifactRepository localRepository,
- List parentSearchRepositories, File
projectDir, ProfileManager externalProfileManager,
- boolean strict )
+ // jvz:note
+ // We've got a mixture of things going in the USD and from the repository,
sometimes the descriptor
+ // is a real file and sometimes null which makes things confusing.
+ private MavenProject buildInternal( String pomLocation,
+ Model model,
+ ArtifactRepository localRepository,
+ List parentSearchRepositories,
+ File projectDescriptor,
+ ProfileManager externalProfileManager,
+ boolean strict )
throws ProjectBuildingException
{
+ File projectDir = null;
+
+ if ( projectDescriptor != null )
+ {
+ projectDir = projectDescriptor.getAbsoluteFile().getParentFile();
+ }
+
Model superModel = getSuperModel();
ProfileManager superProjectProfileManager = new DefaultProfileManager(
container );
@@ -573,8 +653,7 @@
ArtifactRepository artifactRepo = null;
try
{
- artifactRepo =
- ProjectUtils.buildArtifactRepository( mavenRepo,
artifactRepositoryFactory, container );
+ artifactRepo = ProjectUtils.buildArtifactRepository(
mavenRepo, artifactRepositoryFactory, container );
}
catch ( InvalidRepositoryException e )
{
@@ -590,8 +669,14 @@
MavenProject project = null;
try
{
- project = assembleLineage( model, lineage, localRepository,
projectDir, parentSearchRepositories,
- aggregatedRemoteWagonRepositories,
externalProfileManager, strict );
+ project = assembleLineage( model,
+ lineage,
+ localRepository,
+ projectDir,
+ parentSearchRepositories,
+ aggregatedRemoteWagonRepositories,
+ externalProfileManager,
+ strict );
}
catch ( InvalidRepositoryException e )
{
@@ -616,10 +701,13 @@
// only add the super repository if it wasn't overridden by a profile
or project
List repositories = new ArrayList( aggregatedRemoteWagonRepositories );
+
List superRepositories = buildArtifactRepositories( superModel );
+
for ( Iterator i = superRepositories.iterator(); i.hasNext(); )
{
ArtifactRepository repository = (ArtifactRepository) i.next();
+
if ( !repositories.contains( repository ) )
{
repositories.add( repository );
@@ -628,8 +716,7 @@
try
{
- project =
- processProjectLogic( pomLocation, project, repositories,
externalProfileManager, projectDir, strict );
+ project = processProjectLogic( pomLocation, project,
externalProfileManager, projectDir, strict );
}
catch ( ModelInterpolationException e )
{
@@ -639,8 +726,28 @@
{
throw new InvalidProjectModelException( projectId, pomLocation,
e.getMessage(), e );
}
- projectCache.put( createCacheKey( project.getGroupId(),
project.getArtifactId(), project.getVersion() ),
- project );
+
+ projectCache.put( createCacheKey( project.getGroupId(),
project.getArtifactId(), project.getVersion() ), project );
+
+ // jvz:note
+ // this only happens if we are building from a source file
+ if ( projectDescriptor != null )
+ {
+ // Only translate the base directory for files in the source tree
+ pathTranslator.alignToBaseDirectory( project.getModel(),
projectDescriptor.getParentFile() );
+
+ Build build = project.getBuild();
+
+ project.addCompileSourceRoot( build.getSourceDirectory() );
+
+ project.addScriptSourceRoot( build.getScriptSourceDirectory() );
+
+ project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
+
+ // Only track the file of a POM in the source tree
+ project.setFile( projectDescriptor );
+ }
+
return project;
}
@@ -668,8 +775,7 @@
{
try
{
- return ProjectUtils.buildArtifactRepositories(
model.getRepositories(), artifactRepositoryFactory,
- container );
+ return ProjectUtils.buildArtifactRepositories(
model.getRepositories(), artifactRepositoryFactory, container );
}
catch ( InvalidRepositoryException e )
{
@@ -686,18 +792,14 @@
* the resolved source roots, etc for the parent - that occurs for the
parent when it is constructed independently
* and projects are not cached or reused
*/
- private MavenProject processProjectLogic( String pomLocation, MavenProject
project, List remoteRepositories,
- ProfileManager profileMgr, File
projectDir, boolean strict )
+ private MavenProject processProjectLogic( String pomLocation,
+ MavenProject project,
+ ProfileManager profileMgr,
+ File projectDir,
+ boolean strict )
throws ProjectBuildingException, ModelInterpolationException,
InvalidRepositoryException
{
Model model = project.getModel();
- String key = createCacheKey( model.getGroupId(),
model.getArtifactId(), model.getVersion() );
- if ( !modelCache.containsKey( key ) )
- {
- // clone the model because the profile injection below will modify
this instance
- CachedModel cachedModel = new CachedModel( project.getFile(),
ModelUtils.cloneModel( model ) );
- modelCache.put( key, cachedModel );
- }
List activeProfiles = project.getActiveProfiles();
@@ -787,7 +889,9 @@
// TODO: these aren't taking active project artifacts into
consideration in the reactor
project.setPluginArtifacts( createPluginArtifacts( projectId,
project.getBuildPlugins() ) );
+
project.setReportArtifacts( createReportArtifacts( projectId,
project.getReportPlugins() ) );
+
project.setExtensionArtifacts( createExtensionArtifacts( projectId,
project.getBuildExtensions() ) );
return project;
@@ -796,9 +900,13 @@
/**
* @noinspection CollectionDeclaredAsConcreteClass
*/
- private MavenProject assembleLineage( Model model, LinkedList lineage,
ArtifactRepository localRepository,
- File projectDir, List
parentSearchRepositories,
- Set
aggregatedRemoteWagonRepositories, ProfileManager externalProfileManager,
+ private MavenProject assembleLineage( Model model,
+ LinkedList lineage,
+ ArtifactRepository localRepository,
+ File projectDir,
+ List parentSearchRepositories,
+ Set
aggregatedRemoteWagonRepositories,
+ ProfileManager
externalProfileManager,
boolean strict )
throws ProjectBuildingException, InvalidRepositoryException
{
@@ -822,6 +930,7 @@
if ( externalProfileManager != null )
{
profileManager.explicitlyActivate(
externalProfileManager.getExplicitlyActivatedIds() );
+
profileManager.explicitlyDeactivate(
externalProfileManager.getExplicitlyDeactivatedIds() );
}
@@ -839,8 +948,7 @@
{
String projectId = safeVersionlessKey( model.getGroupId(),
model.getArtifactId() );
- throw new ProjectBuildingException( projectId, "Failed to activate
local (project-level) build profiles: " +
- e.getMessage(), e );
+ throw new ProjectBuildingException( projectId, "Failed to activate
local (project-level) build profiles: " + e.getMessage(), e );
}
MavenProject project = new MavenProject( model );
@@ -866,8 +974,7 @@
else if ( parentModel.getGroupId().equals( model.getGroupId() ) &&
parentModel.getArtifactId().equals( model.getArtifactId() ) )
{
- throw new ProjectBuildingException( projectId,
- "Parent element is a
duplicate of " + "the current project " );
+ throw new ProjectBuildingException( projectId, "Parent element
is a duplicate of " + "the current project " );
}
else if ( StringUtils.isEmpty( parentModel.getVersion() ) )
{
@@ -877,17 +984,7 @@
// the only way this will have a value is if we find the parent on
disk...
File parentDescriptor = null;
- CachedModel cachedModel =
- getCachedProject( parentModel.getGroupId(),
parentModel.getArtifactId(), parentModel.getVersion() );
- if ( cachedModel != null )
- {
- model = cachedModel.getModel();
- parentDescriptor = cachedModel.getDescriptor();
- }
- else
- {
- model = null;
- }
+ model = null;
String parentRelativePath = parentModel.getRelativePath();
@@ -1156,11 +1253,6 @@
}
}
- private CachedModel getCachedProject( String groupId, String artifactId,
String version )
- {
- return (CachedModel) modelCache.get( createCacheKey( groupId,
artifactId, version ) );
- }
-
private static String createCacheKey( String groupId, String artifactId,
String version )
{
return groupId + ":" + artifactId + ":" + version;
@@ -1298,53 +1390,6 @@
return extensionArtifacts;
}
- public MavenProject buildStandaloneSuperProject( ArtifactRepository
localRepository )
- throws ProjectBuildingException
- {
- Model superModel = getSuperModel();
-
- superModel.setGroupId( STANDALONE_SUPERPOM_GROUPID );
-
- superModel.setArtifactId( STANDALONE_SUPERPOM_ARTIFACTID );
-
- superModel.setVersion( STANDALONE_SUPERPOM_VERSION );
-
- ProfileManager profileManager = new DefaultProfileManager( container );
-
- List activeProfiles;
-
- profileManager.addProfiles( superModel.getProfiles() );
-
- String projectId = safeVersionlessKey( STANDALONE_SUPERPOM_GROUPID,
STANDALONE_SUPERPOM_ARTIFACTID );
-
- activeProfiles = injectActiveProfiles( profileManager, superModel );
-
- MavenProject project = new MavenProject( superModel );
-
- project.setActiveProfiles( activeProfiles );
-
- project.setOriginalModel( superModel );
-
- try
- {
- List remoteRepositories = buildArtifactRepositories( superModel );
-
- project = processProjectLogic( "<Super-POM>", project,
remoteRepositories, null, null, true );
-
- project.setExecutionRoot( true );
-
- return project;
- }
- catch ( ModelInterpolationException e )
- {
- throw new ProjectBuildingException( projectId, e.getMessage(), e );
- }
- catch ( InvalidRepositoryException e )
- {
- throw new ProjectBuildingException( projectId, e.getMessage(), e );
- }
- }
-
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
@@ -1363,28 +1408,5 @@
throws ContextException
{
this.container = (PlexusContainer) context.get(
PlexusConstants.PLEXUS_KEY );
- }
-
- private static class CachedModel
- {
- private File descriptor;
-
- private Model model;
-
- public CachedModel( File descriptor, Model model )
- {
- this.descriptor = descriptor;
- this.model = model;
- }
-
- public File getDescriptor()
- {
- return descriptor;
- }
-
- public Model getModel()
- {
- return model;
- }
}
}