IDEA-193487 maven - delegate artifact builds to maven goals

This commit is contained in:
Ivan Bessonov
2018-08-01 14:20:04 +03:00
parent 2f62a7a131
commit 0b8d9b3e50
3 changed files with 68 additions and 16 deletions
@@ -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<MavenArtifactBuilder> EP_NAME =
ExtensionPointName.create("org.jetbrains.idea.maven.artifactBuilder");
boolean isApplicable(ProjectModelBuildTask task);
void build(Project project, ProjectModelBuildTask task, ProjectTaskNotification callback);
}
@@ -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<MavenRunnerParameters> 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<? extends ModuleFilesBuildTask> moduleFilesBuildTasks) {
buildModules(project, callback, moduleFilesBuildTasks);
}
private static void buildArtifacts(Project project, ProjectTaskNotification callback, List<? extends ProjectModelBuildTask> 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);
}
}
}
}
}
}
@@ -29,6 +29,7 @@
<extensionPoint name="repositoryProvider" interface="org.jetbrains.idea.maven.indices.MavenRepositoryProvider"/>
<extensionPoint name="executionEnvironmentProvider" interface="org.jetbrains.idea.maven.execution.build.MavenExecutionEnvironmentProvider"/>
<extensionPoint name="artifactBuilder" interface="org.jetbrains.idea.maven.execution.build.MavenArtifactBuilder"/>
</extensionPoints>
<depends>com.intellij.properties</depends>