diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/MavenSyncConsole.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/MavenSyncConsole.kt
index 05a1092d34c1..78db717c30a6 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/MavenSyncConsole.kt
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/MavenSyncConsole.kt
@@ -9,12 +9,16 @@ import com.intellij.build.events.EventResult
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.MessageEventResult
import com.intellij.build.events.impl.*
+import com.intellij.build.issue.BuildIssue
+import com.intellij.build.issue.BuildIssueQuickFix
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
+import org.jetbrains.idea.maven.buildtool.quickfix.OpenMavenSettingsQuickFix
+import org.jetbrains.idea.maven.buildtool.quickfix.UseBundledMavenQuickFix
import org.jetbrains.idea.maven.execution.SyncBundle
import org.jetbrains.idea.maven.server.MavenServerProgressIndicator
import org.jetbrains.idea.maven.utils.MavenLog
@@ -172,6 +176,7 @@ class MavenSyncConsole(private val myProject: Project) {
completeTask(downloadString, downloadArtifactString, SuccessResultImpl(false))
}
+
@Synchronized
private fun downloadEventFailed(keyPrefix: String, dependency: String, error: String, stackTrace: String?) = doIfImportInProcess{
val downloadString = SyncBundle.message("${keyPrefix}.download")
@@ -201,6 +206,18 @@ class MavenSyncConsole(private val myProject: Project) {
}
}
+ @Synchronized
+ fun showQuickFixBadMaven(message: String, kind: MessageEvent.Kind) {
+ mySyncView.onEvent(mySyncId, BuildIssueEventImpl(mySyncId, object : BuildIssue {
+ override val title = "Bad maven version"
+ override val description: String = "${message}\n" +
+ "- Open Settings\n" +
+ "- Use Bundled\n"
+
+ override val quickFixes: List = listOf(OpenMavenSettingsQuickFix(), UseBundledMavenQuickFix())
+ }, kind))
+ }
+
private fun isJavadocOrSource(dependency: String): Boolean {
val split = dependency.split(':')
if (split.size < 4) {
@@ -215,7 +232,6 @@ class MavenSyncConsole(private val myProject: Project) {
action.invoke()
}
-
private inner class ArtifactSyncListenerImpl(val keyPrefix: String) : ArtifactSyncListener {
override fun downloadStarted(dependency: String) {
downloadEventStarted(keyPrefix, dependency)
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/OpenMavenSettingsQuickFix.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/OpenMavenSettingsQuickFix.kt
new file mode 100644
index 000000000000..d3ba01a26f7c
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/OpenMavenSettingsQuickFix.kt
@@ -0,0 +1,25 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.buildtool.quickfix
+
+import com.intellij.build.issue.BuildIssueQuickFix
+import com.intellij.openapi.actionSystem.DataProvider
+import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.options.ShowSettingsUtil
+import com.intellij.openapi.project.Project
+import org.jetbrains.idea.maven.utils.MavenSettings
+import java.util.concurrent.CompletableFuture
+
+class OpenMavenSettingsQuickFix : BuildIssueQuickFix {
+ override val id: String = ID
+
+ override fun runQuickFix(project: Project, dataProvider: DataProvider): CompletableFuture<*> {
+ ApplicationManager.getApplication().invokeLater {
+ ShowSettingsUtil.getInstance().showSettingsDialog(project, MavenSettings.DISPLAY_NAME)
+ }
+ return CompletableFuture.completedFuture(null)
+ }
+
+ companion object {
+ const val ID = "open_maven_settings_quick_fix"
+ }
+}
\ No newline at end of file
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/UseBundledMavenQuickFix.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/UseBundledMavenQuickFix.kt
new file mode 100644
index 000000000000..e427a9410545
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/buildtool/quickfix/UseBundledMavenQuickFix.kt
@@ -0,0 +1,33 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jetbrains.idea.maven.buildtool.quickfix
+
+import com.intellij.build.issue.BuildIssueQuickFix
+import com.intellij.ide.actions.ShowSettingsUtilImpl
+import com.intellij.notification.Notification
+import com.intellij.notification.NotificationType
+import com.intellij.openapi.actionSystem.DataProvider
+import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.options.ShowSettingsUtil
+import com.intellij.openapi.project.Project
+import org.jetbrains.idea.maven.project.MavenGeneralSettings
+import org.jetbrains.idea.maven.project.MavenWorkspaceSettings
+import org.jetbrains.idea.maven.project.MavenWorkspaceSettingsComponent
+import org.jetbrains.idea.maven.server.MavenServerManager
+import org.jetbrains.idea.maven.utils.MavenSettings
+import org.jetbrains.idea.maven.utils.MavenUtil
+import java.util.concurrent.CompletableFuture
+
+class UseBundledMavenQuickFix: BuildIssueQuickFix {
+ override val id: String = ID
+
+ override fun runQuickFix(project: Project, dataProvider: DataProvider): CompletableFuture<*> {
+ MavenWorkspaceSettingsComponent.getInstance(project).settings.generalSettings.mavenHome = MavenServerManager.BUNDLED_MAVEN_3
+ Notification(MavenUtil.MAVEN_NOTIFICATION_GROUP, "", "Maven version changed to ${MavenServerManager.getInstance().currentMavenVersion}", NotificationType.INFORMATION).notify(null)
+ return CompletableFuture.completedFuture(null)
+ }
+
+ companion object {
+ const val ID = "use_bundled_maven_quick_fix"
+ }
+
+}
\ No newline at end of file
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
index 5aadac9ecbe3..fd1df1e81f75 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java
@@ -59,6 +59,7 @@ import org.jetbrains.idea.maven.importing.MavenProjectImporter;
import org.jetbrains.idea.maven.model.*;
import org.jetbrains.idea.maven.project.MavenArtifactDownloader.DownloadResult;
import org.jetbrains.idea.maven.server.MavenEmbedderWrapper;
+import org.jetbrains.idea.maven.server.MavenServerManager;
import org.jetbrains.idea.maven.server.MavenServerProgressIndicator;
import org.jetbrains.idea.maven.server.NativeMavenProjectHolder;
import org.jetbrains.idea.maven.utils.*;
@@ -884,6 +885,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
public Promise> scheduleImportAndResolve(boolean fromAutoImport) {
getSyncConsole().startImport(myProgressListener, fromAutoImport);
+ MavenServerManager.getInstance().showMavenNotifications(getSyncConsole());
MavenSyncConsole console = getSyncConsole();
AsyncPromise> promise = scheduleResolve();
promise.onProcessed(m -> {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java
index 26fa7764eead..d386e55fe1f2 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/server/MavenServerManager.java
@@ -1,6 +1,7 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.maven.server;
+import com.intellij.build.events.MessageEvent;
import com.intellij.execution.DefaultExecutionResult;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionResult;
@@ -37,7 +38,6 @@ import com.intellij.util.EnvironmentUtil;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.BaseOutputReader;
-import com.intellij.util.text.VersionComparatorUtil;
import com.intellij.util.xmlb.Converter;
import com.intellij.util.xmlb.annotations.Attribute;
import gnu.trove.THashMap;
@@ -48,9 +48,11 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
+import org.jetbrains.idea.maven.buildtool.MavenSyncConsole;
import org.jetbrains.idea.maven.execution.MavenExecutionOptions;
import org.jetbrains.idea.maven.execution.MavenRunnerSettings;
import org.jetbrains.idea.maven.execution.RunnerBundle;
+import org.jetbrains.idea.maven.execution.SyncBundle;
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
import org.jetbrains.idea.maven.model.MavenModel;
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
@@ -100,6 +102,17 @@ public class MavenServerManager extends MavenRemoteObjectWrapper im
private boolean myDownloadListenerExported;
private State myState = new State();
+ public void showMavenNotifications(MavenSyncConsole console) {
+ String mavenVersion = getCurrentMavenVersion();
+ if (mavenVersion == null) {
+ console.showQuickFixBadMaven(SyncBundle.message("maven.sync.quickfixes.nomaven"), MessageEvent.Kind.ERROR);
+ }
+
+ if (StringUtil.compareVersionNumbers(mavenVersion, "3.6.0") == 0) {
+ console.showQuickFixBadMaven(SyncBundle.message("maven.sync.quickfixes.maven360"), MessageEvent.Kind.WARNING);
+ }
+ }
+
private static class BundledMavenPathHolder {
private static final File myBundledMaven2Home;
private static final File myBundledMaven3Home;
@@ -308,15 +321,6 @@ public class MavenServerManager extends MavenRemoteObjectWrapper im
}
}
- private static void showNofificationIfMaven360(@NotNull String mavenVersion, @NotNull String sdkConfigLocation) {
- if(StringUtil.compareVersionNumbers(mavenVersion, "3.6.0") == 0) {
- new Notification(MavenUtil.MAVEN_NOTIFICATION_GROUP, "",
- "You use Maven 3.6.0, there could be issues importing multimodule project.
" +
- "It is recommended to upgrade or downgrade Maven version at
" +
- sdkConfigLocation,
- NotificationType.WARNING).notify(null);
- }
- }
public static File getMavenEventListener() {
return BundledMavenPathHolder.eventListenerJar;
@@ -725,8 +729,6 @@ public class MavenServerManager extends MavenRemoteObjectWrapper im
String sdkConfigLocation = "Settings | Build, Execution, Deployment | Build Tools | Maven | Importing | JDK for Importer";
verifyMavenSdkRequirements(jdk, mavenVersion, sdkConfigLocation);
- showNofificationIfMaven360(mavenVersion,sdkConfigLocation);
-
final List classPath = new ArrayList<>();
classPath.add(PathUtil.getJarPathForClass(org.apache.log4j.Logger.class));
if (StringUtil.compareVersionNumbers(mavenVersion, "3.1") < 0) {
diff --git a/plugins/maven/src/main/resources/SyncBundle.properties b/plugins/maven/src/main/resources/SyncBundle.properties
index 5f1b969061ae..d9efcb7701ff 100644
--- a/plugins/maven/src/main/resources/SyncBundle.properties
+++ b/plugins/maven/src/main/resources/SyncBundle.properties
@@ -6,4 +6,7 @@ maven.sync.plugins.artifact.download=Downloading {0}
maven.sync.dependencies.resolve=Resolve dependencies
maven.sync.dependencies.resolve.error=Cannot resolve {0}
maven.sync.dependencies.download=Downloading dependencies
-maven.sync.dependencies.artifact.download=Downloading {0}
\ No newline at end of file
+maven.sync.dependencies.artifact.download=Downloading {0}
+
+maven.sync.quickfixes.nomaven=Maven version not defined
+maven.sync.quickfixes.maven360=You use Maven 3.6.0, there could be issues importing multimodule project. It is recommended to upgrade or downgrade Maven version