diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenArtifactBuilder.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenArtifactBuilder.java new file mode 100644 index 000000000000..e1aacde73b82 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenArtifactBuilder.java @@ -0,0 +1,20 @@ +// Copyright 2000-2018 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.execution.build; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; +import com.intellij.task.ProjectModelBuildTask; +import com.intellij.task.ProjectTaskNotification; + +/** + * @author ibessonov + */ +public interface MavenArtifactBuilder { + + ExtensionPointName EP_NAME = + ExtensionPointName.create("org.jetbrains.idea.maven.artifactBuilder"); + + boolean isApplicable(ProjectModelBuildTask task); + + void build(Project project, ProjectModelBuildTask task, ProjectTaskNotification callback); +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java index 80fbe2597a41..9ad9bc30ae5e 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/build/MavenProjectTaskRunner.java @@ -18,6 +18,7 @@ import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packaging.artifacts.Artifact; import com.intellij.task.*; import com.intellij.task.impl.JpsProjectTaskRunner; import org.jetbrains.annotations.NotNull; @@ -57,14 +58,33 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner { buildModuleFiles(project, callback, getFromGroupedMap(taskMap, ModuleFilesBuildTask.class, emptyList())); buildModules(project, callback, getFromGroupedMap(taskMap, ModuleBuildTask.class, emptyList())); + + buildArtifacts(project, callback, getFromGroupedMap(taskMap, ProjectModelBuildTask.class, emptyList())); + } + + public boolean canRun(@NotNull ProjectTask projectTask) { + throw new UnsupportedOperationException("MavenProjectTaskRunner#canRun(ProjectTask)"); } @Override - public boolean canRun(@NotNull ProjectTask projectTask) { + public boolean canRun(@NotNull Project project, @NotNull ProjectTask projectTask) { + if (!MavenRunner.getInstance(project).getSettings().isDelegateToMaven()) { + return false; + } + if (projectTask instanceof ModuleBuildTask) { Module module = ((ModuleBuildTask)projectTask).getModule(); - if (isDelegatedToMaven(module)) { - return isMavenModule(module); + return isMavenModule(module); + } + + if (projectTask instanceof ProjectModelBuildTask) { + ProjectModelBuildTask buildTask = (ProjectModelBuildTask)projectTask; + if (buildTask.getBuildableElement() instanceof Artifact) { + for (MavenArtifactBuilder artifactBuilder : MavenArtifactBuilder.EP_NAME.getExtensions()) { + if (artifactBuilder.isApplicable(buildTask)) { + return true; + } + } } } @@ -73,14 +93,12 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner { RunProfile runProfile = task.getRunProfile(); if (runProfile instanceof ModuleBasedConfiguration) { RunConfigurationModule module = ((ModuleBasedConfiguration)runProfile).getConfigurationModule(); - if (isDelegatedToMaven(module.getModule())) { - if (!isMavenModule(module.getModule())) { - return false; - } - for (MavenExecutionEnvironmentProvider environmentProvider: MavenExecutionEnvironmentProvider.EP_NAME.getExtensions()) { - if (environmentProvider.isApplicable(task)) { - return true; - } + if (!isMavenModule(module.getModule())) { + return false; + } + for (MavenExecutionEnvironmentProvider environmentProvider: MavenExecutionEnvironmentProvider.EP_NAME.getExtensions()) { + if (environmentProvider.isApplicable(task)) { + return true; } } } @@ -89,10 +107,6 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner { return false; } - private static boolean isDelegatedToMaven(@Nullable Module module) { - return module != null && MavenRunner.getInstance(module.getProject()).getSettings().isDelegateToMaven(); - } - @Nullable @Override public ExecutionEnvironment createExecutionEnvironment(@NotNull Project project, @@ -166,10 +180,15 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner { explicitProfiles.getDisabledProfiles())); } + runBatch(project, mavenRunner, "Maven Build", commands, callback); + } + + public static void runBatch(@NotNull Project project, @NotNull MavenRunner mavenRunner, @NotNull String title, + @NotNull List commands, @Nullable ProjectTaskNotification callback) { ApplicationManager.getApplication().invokeAndWait(() -> { AtomicInteger errors = new AtomicInteger(); AtomicInteger warnings = new AtomicInteger(); - MavenConsole console = new MavenConsoleImpl("Maven Build", project) { + MavenConsole console = new MavenConsoleImpl(title, project) { @Override public void attachToProcess(ProcessHandler processHandler) { @@ -242,4 +261,16 @@ public class MavenProjectTaskRunner extends ProjectTaskRunner { @NotNull Collection moduleFilesBuildTasks) { buildModules(project, callback, moduleFilesBuildTasks); } + + private static void buildArtifacts(Project project, ProjectTaskNotification callback, List tasks) { + for (ProjectModelBuildTask buildTask : tasks) { + if (buildTask.getBuildableElement() instanceof Artifact) { + for (MavenArtifactBuilder artifactBuilder : MavenArtifactBuilder.EP_NAME.getExtensions()) { + if (artifactBuilder.isApplicable(buildTask)) { + artifactBuilder.build(project, buildTask, callback); + } + } + } + } + } } diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml index df566379c8fd..252b5c7aab2a 100644 --- a/plugins/maven/src/main/resources/META-INF/plugin.xml +++ b/plugins/maven/src/main/resources/META-INF/plugin.xml @@ -29,6 +29,7 @@ + com.intellij.properties