From 92b3cec007fd62e3906080ce89c0100a9c7cd62c Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 1 Aug 2016 12:21:37 +0300 Subject: [PATCH] IDEA-157804 Missing version in pom removes all dependencies from module --- .../maven/server/Maven3ServerEmbedder.java | 73 +++++++++++++++++++ .../server/Maven30ServerEmbedderImpl.java | 40 +--------- .../server/Maven32ServerEmbedderImpl.java | 45 +----------- 3 files changed, 78 insertions(+), 80 deletions(-) diff --git a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedder.java b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedder.java index 64e89eb5df75..6153a3ba7ff9 100644 --- a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedder.java +++ b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ServerEmbedder.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.maven.server; import com.intellij.util.Function; +import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; @@ -25,14 +26,25 @@ import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.handler.DefaultArtifactHandler; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactResolutionRequest; +import org.apache.maven.artifact.resolver.ArtifactResolutionResult; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.resolver.ResolutionListener; import org.apache.maven.artifact.versioning.ArtifactVersion; import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.model.building.ModelBuildingRequest; +import org.apache.maven.model.interpolation.ModelInterpolator; +import org.apache.maven.project.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.MavenRemoteRepository; +import org.jetbrains.idea.maven.server.embedder.CustomMaven3ModelInterpolator2; +import org.jetbrains.idea.maven.server.embedder.MavenExecutionResult; import java.io.File; import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -111,6 +123,67 @@ public abstract class Maven3ServerEmbedder extends MavenRemoteObject implements return Collections.emptyList(); } + @NotNull + protected List getProjectBuildingResults(@NotNull MavenExecutionRequest request, @NotNull Collection files) { + final ProjectBuilder builder = getComponent(ProjectBuilder.class); + + CustomMaven3ModelInterpolator2 modelInterpolator = (CustomMaven3ModelInterpolator2)getComponent(ModelInterpolator.class); + + String savedLocalRepository = modelInterpolator.getLocalRepository(); + modelInterpolator.setLocalRepository(request.getLocalRepositoryPath().getAbsolutePath()); + List buildingResults = new SmartList(); + + final ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); + projectBuildingRequest.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL); + projectBuildingRequest.setResolveDependencies(true); + try { + buildingResults = builder.build(new ArrayList(files), false, projectBuildingRequest); + } + catch (ProjectBuildingException e) { + for (ProjectBuildingResult result : e.getResults()) { + if (result.getProject() != null) { + buildingResults.add(result); + } + else { + try { + ProjectBuildingResult build = builder.build(result.getPomFile(), projectBuildingRequest); + buildingResults.add(build); + } + catch (ProjectBuildingException e2) { + buildingResults.addAll(e2.getResults()); + } + } + } + } + finally { + modelInterpolator.setLocalRepository(savedLocalRepository); + } + return buildingResults; + } + + protected void addMvn2CompatResults(MavenProject project, + List exceptions, + List listeners, + ArtifactRepository localRepository, + Collection executionResults) { + ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest(); + resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts()); + resolutionRequest.setArtifact(project.getArtifact()); + resolutionRequest.setManagedVersionMap(project.getManagedVersionMap()); + resolutionRequest.setLocalRepository(localRepository); + resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories()); + resolutionRequest.setListeners(listeners); + + resolutionRequest.setResolveRoot(false); + resolutionRequest.setResolveTransitively(true); + + ArtifactResolver resolver = getComponent(ArtifactResolver.class); + ArtifactResolutionResult result = resolver.resolve(resolutionRequest); + + project.setArtifacts(result.getArtifacts()); + executionResults.add(new MavenExecutionResult(project, exceptions)); + } + @NotNull protected abstract List convertRepositories(List repositories) throws RemoteException; diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java index 16ec1e387926..854196f9aa2e 100644 --- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java +++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java @@ -38,7 +38,6 @@ import org.apache.maven.model.Activation; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; import org.apache.maven.model.Profile; -import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.interpolation.ModelInterpolator; import org.apache.maven.model.profile.DefaultProfileInjector; @@ -604,26 +603,7 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder { @Override public void run() { try { - // copied from DefaultMavenProjectBuilder.buildWithDependencies - ProjectBuilder builder = getComponent(ProjectBuilder.class); - - CustomMaven3ModelInterpolator2 modelInterpolator = (CustomMaven3ModelInterpolator2)getComponent(ModelInterpolator.class); - - String savedLocalRepository = modelInterpolator.getLocalRepository(); - modelInterpolator.setLocalRepository(request.getLocalRepositoryPath().getAbsolutePath()); - List buildingResults; - - try { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - projectBuildingRequest.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL); - buildingResults = builder.build(new ArrayList(files), false, projectBuildingRequest); - } - catch (ProjectBuildingException e) { - buildingResults = e.getResults(); - } - finally { - modelInterpolator.setLocalRepository(savedLocalRepository); - } + List buildingResults = getProjectBuildingResults(request, files); for (ProjectBuildingResult buildingResult : buildingResults) { MavenProject project = buildingResult.getProject(); @@ -658,23 +638,7 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder { // if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) { - ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest(); - resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts()); - resolutionRequest.setArtifact(project.getArtifact()); - resolutionRequest.setManagedVersionMap(project.getManagedVersionMap()); - resolutionRequest.setLocalRepository(myLocalRepository); - resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories()); - resolutionRequest.setListeners(listeners); - - resolutionRequest.setResolveRoot(false); - resolutionRequest.setResolveTransitively(true); - - ArtifactResolver resolver = getComponent(ArtifactResolver.class); - ArtifactResolutionResult result = resolver.resolve(resolutionRequest); - - project.setArtifacts(result.getArtifacts()); - // end copied from DefaultMavenProjectBuilder.buildWithDependencies - executionResults.add(new MavenExecutionResult(project, exceptions)); + addMvn2CompatResults(project, exceptions, listeners, myLocalRepository, executionResults); } else { final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession); diff --git a/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java b/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java index 33f7411b74bb..9725efde505b 100644 --- a/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java +++ b/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java @@ -18,10 +18,7 @@ package org.jetbrains.idea.maven.server; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.util.ExceptionUtil; -import com.intellij.util.Function; -import com.intellij.util.ReflectionUtil; -import com.intellij.util.SystemProperties; +import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; @@ -40,7 +37,6 @@ import org.apache.maven.model.Activation; import org.apache.maven.model.Model; import org.apache.maven.model.Plugin; import org.apache.maven.model.Profile; -import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.interpolation.ModelInterpolator; import org.apache.maven.model.profile.DefaultProfileInjector; @@ -623,26 +619,7 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder { @Override public void run() { try { - // copied from DefaultMavenProjectBuilder.buildWithDependencies - ProjectBuilder builder = getComponent(ProjectBuilder.class); - - CustomMaven3ModelInterpolator2 modelInterpolator = (CustomMaven3ModelInterpolator2)getComponent(ModelInterpolator.class); - - String savedLocalRepository = modelInterpolator.getLocalRepository(); - modelInterpolator.setLocalRepository(request.getLocalRepositoryPath().getAbsolutePath()); - List buildingResults; - - try { - ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest(); - projectBuildingRequest.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL); - buildingResults = builder.build(new ArrayList(files), false, projectBuildingRequest); - } - catch (ProjectBuildingException e) { - buildingResults = e.getResults(); - } - finally { - modelInterpolator.setLocalRepository(savedLocalRepository); - } + List buildingResults = getProjectBuildingResults(request, files); for (ProjectBuildingResult buildingResult : buildingResults) { MavenProject project = buildingResult.getProject(); @@ -680,23 +657,7 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder { // if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) { - ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest(); - resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts()); - resolutionRequest.setArtifact(project.getArtifact()); - resolutionRequest.setManagedVersionMap(project.getManagedVersionMap()); - resolutionRequest.setLocalRepository(myLocalRepository); - resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories()); - resolutionRequest.setListeners(listeners); - - resolutionRequest.setResolveRoot(false); - resolutionRequest.setResolveTransitively(true); - - ArtifactResolver resolver = getComponent(ArtifactResolver.class); - ArtifactResolutionResult result = resolver.resolve(resolutionRequest); - - project.setArtifacts(result.getArtifacts()); - // end copied from DefaultMavenProjectBuilder.buildWithDependencies - executionResults.add(new MavenExecutionResult(project, exceptions)); + addMvn2CompatResults(project, exceptions, listeners, myLocalRepository, executionResults); } else { final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);