diff options
author | Anton Tanasenko | 2014-06-07 14:57:52 +0000 |
---|---|---|
committer | Anton Tanasenko | 2014-10-01 08:31:31 +0000 |
commit | b6c1317a60bb70b5abc2cfcedd011bfa8f578d45 (patch) | |
tree | 27ab37cd916d6b5cecfeba45bc19ef4fe00b9d0f /org.eclipse.m2e.core | |
parent | d6a903b7e4886d0ae8d24b4240d0fb93d78d51bb (diff) | |
download | m2e-core-b6c1317a60bb70b5abc2cfcedd011bfa8f578d45.tar.gz m2e-core-b6c1317a60bb70b5abc2cfcedd011bfa8f578d45.tar.xz m2e-core-b6c1317a60bb70b5abc2cfcedd011bfa8f578d45.zip |
436929 - Changes in imported dependencyManagement poms do not cause
refresh in dependent projects
Change-Id: I5b5f1d0b848bdad1a9d072e104df0c7b32ceada3
Signed-off-by: Anton Tanasenko <atg.sleepless@gmail.com>
Diffstat (limited to 'org.eclipse.m2e.core')
4 files changed, 56 insertions, 6 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/DefaultMavenDependencyResolver.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/DefaultMavenDependencyResolver.java index 6728d013..847d7864 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/DefaultMavenDependencyResolver.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/DefaultMavenDependencyResolver.java @@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.apache.maven.artifact.Artifact; import org.apache.maven.execution.MavenExecutionResult; +import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Plugin; import org.apache.maven.project.DependencyResolutionResult; import org.apache.maven.project.MavenProject; @@ -104,10 +105,28 @@ public class DefaultMavenDependencyResolver extends AbstractMavenDependencyResol log.debug("Resolved dependencies for {} in {} ms", facade.toString(), System.currentTimeMillis() - start); //$NON-NLS-1$ } - public static void addParentRequirements(Set<RequiredCapability> requirements, MavenProject mavenProject) { + public static void addProjectStructureRequirements(Set<RequiredCapability> requirements, MavenProject mavenProject) { + // parent requirement Artifact parentArtifact = mavenProject.getParentArtifact(); if(parentArtifact != null) { requirements.add(MavenRequiredCapability.createResolvedMavenParent(new ArtifactKey(parentArtifact))); } + + // imported dependency management requirements + while(mavenProject != null) { + DependencyManagement dependencyManagement = mavenProject.getOriginalModel().getDependencyManagement(); + if(dependencyManagement != null) { + for(org.apache.maven.model.Dependency managedDep : dependencyManagement.getDependencies()) { + if("pom".equals(managedDep.getType()) && "import".equals(managedDep.getScope())) { //$NON-NLS-1$ $NON-NLS-2$ + ArtifactKey dependencyKey = new ArtifactKey(managedDep.getGroupId(), managedDep.getArtifactId(), + managedDep.getVersion(), null); + requirements.add(MavenRequiredCapability.createMavenArtifactImport(dependencyKey)); + } + } + } + + // add imports from all ancestors + mavenProject = mavenProject.getParent(); + } } } diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenCapability.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenCapability.java index 20943f9c..782f1783 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenCapability.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenCapability.java @@ -29,6 +29,11 @@ public class MavenCapability extends Capability { public static final String NS_MAVEN_ARTIFACT = "maven-artifact"; //$NON-NLS-1$ /** + * Import-scoped Maven dependency as defined in <dependencyManagement/> pom.xml element. + */ + public static final String NS_MAVEN_ARTIFACT_IMPORT = "maven-artifact-import"; //$NON-NLS-1$ + + /** * Maven parent dependency as defined in <parent/> pom.xml element. */ public static final String NS_MAVEN_PARENT = "maven-parent"; //$NON-NLS-1$ @@ -69,6 +74,10 @@ public class MavenCapability extends Capability { return new MavenCapability(NS_MAVEN_ARTIFACT, getId(key), key.getVersion()); } + public static MavenCapability createMavenArtifactImport(ArtifactKey key) { + return new MavenCapability(NS_MAVEN_ARTIFACT_IMPORT, getId(key), key.getVersion()); + } + public static MavenCapability createMavenParent(ArtifactKey key) { return new MavenCapability(NS_MAVEN_PARENT, getId(key), key.getVersion()); } diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenRequiredCapability.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenRequiredCapability.java index bb8b976d..6f5cc3fa 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenRequiredCapability.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/MavenRequiredCapability.java @@ -54,6 +54,11 @@ public class MavenRequiredCapability extends RequiredCapability { scope, optional, false); } + public static MavenRequiredCapability createMavenArtifactImport(ArtifactKey key) { + return new MavenRequiredCapability(MavenCapability.NS_MAVEN_ARTIFACT_IMPORT, MavenCapability.getId(key), + key.getVersion(), "import", false, false); //$NON-NLS-1$ + } + public static MavenRequiredCapability createMavenParent(ArtifactKey key) { return new MavenRequiredCapability(MavenCapability.NS_MAVEN_PARENT, MavenCapability.getId(key), key.getVersion(), null, false, false); diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java index 874e85ce..0c3d0518 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/registry/ProjectRegistryManager.java @@ -330,10 +330,13 @@ public class ProjectRegistryManager { if(installedArtifacts.add(artifact)) { refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(artifact), true)); refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(artifact), true)); + refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(artifact), true)); } if(installedArtifacts.add(baseArtifact)) { refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenParent(baseArtifact), true)); refresh.addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifact(baseArtifact), true)); + refresh + .addAll(newState.getVersionedDependents(MavenCapability.createMavenArtifactImport(baseArtifact), true)); } if(!refresh.isEmpty()) { log.debug("Automatic refresh. artifact={}/{}. projects={}", new Object[] {baseArtifact, artifact, refresh}); @@ -384,6 +387,11 @@ public class ProjectRegistryManager { // refresh old child modules MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true)); + + // refresh projects that import dependencyManagement from this one + MavenCapability mavenArtifactImportCapability = MavenCapability.createMavenArtifactImport(oldFacade + .getArtifactKey()); + context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); } newFacade = readMavenProjectFacade(pom, context, newState, monitor); @@ -392,6 +400,10 @@ public class ProjectRegistryManager { if(oldFacade != null) { MavenCapability mavenParentCapability = MavenCapability.createMavenParent(oldFacade.getArtifactKey()); context.forcePomFiles(newState.getDependents(mavenParentCapability, true)); + + MavenCapability mavenArtifactImportCapability = MavenCapability.createMavenArtifactImport(oldFacade + .getArtifactKey()); + context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); } } @@ -402,6 +414,11 @@ public class ProjectRegistryManager { MavenCapability mavenParentCapability = MavenCapability.createMavenParent(newFacade.getArtifactKey()); context.forcePomFiles(newState.getVersionedDependents(mavenParentCapability, true)); + // refresh projects that import dependencyManagement from this one + MavenCapability mavenArtifactImportCapability = MavenCapability.createMavenArtifactImport(newFacade + .getArtifactKey()); + context.forcePomFiles(newState.getVersionedDependents(mavenArtifactImportCapability, true)); + Set<Capability> capabilities = new LinkedHashSet<Capability>(); capabilities.add(mavenParentCapability); capabilities.add(MavenCapability.createMavenArtifact(newFacade.getArtifactKey())); @@ -410,12 +427,14 @@ public class ProjectRegistryManager { originalCapabilities.put(pom, oldCapabilities); } + MavenProject mavenProject = getMavenProject(newFacade); Set<RequiredCapability> requirements = new LinkedHashSet<RequiredCapability>(); - DefaultMavenDependencyResolver.addParentRequirements(requirements, getMavenProject(newFacade)); + DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, mavenProject); Set<RequiredCapability> oldRequirements = newState.setRequirements(pom, requirements); if(!originalRequirements.containsKey(pom)) { originalRequirements.put(pom, oldRequirements); } + } // at this point project facade and project capabilities/requirements are inconsistent in the state @@ -502,13 +521,12 @@ public class ProjectRegistryManager { capabilities.add(mavenParentCapability); // TODO consider packaging // maven projects always have these requirements - DefaultMavenDependencyResolver.addParentRequirements(requirements, getMavenProject(newFacade)); + DefaultMavenDependencyResolver.addProjectStructureRequirements(requirements, getMavenProject(newFacade)); AbstractMavenDependencyResolver resolver = getMavenDependencyResolver(newFacade, monitor); resolver.setContextProjectRegistry(newState); try { - resolver.resolveProjectDependencies(newFacade, maven.getExecutionContext().getExecutionRequest(), capabilities, - requirements, monitor); + resolver.resolveProjectDependencies(newFacade, capabilities, requirements, monitor); } finally { resolver.setContextProjectRegistry(null); } @@ -568,7 +586,6 @@ public class ProjectRegistryManager { context.forcePomFiles(newState.getVersionedDependents(capability, true)); } } - } private void setupLifecycleMapping(MutableProjectRegistry newState, IProgressMonitor monitor, |