mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Maven: user properties can be customized by MavenImporters. It's the merge of the PR at https://github.com/JetBrains/intellij-community/pull/167
This commit is contained in:
+3
-1
@@ -24,6 +24,7 @@ import java.rmi.Remote;
|
||||
import java.rmi.RemoteException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public interface MavenServerEmbedder extends Remote {
|
||||
String MAVEN_EMBEDDER_VERSION = "idea.maven.embedder.version";
|
||||
@@ -33,7 +34,8 @@ public interface MavenServerEmbedder extends Remote {
|
||||
boolean failOnUnresolvedDependency,
|
||||
@NotNull MavenServerConsole console,
|
||||
@NotNull MavenServerProgressIndicator indicator,
|
||||
boolean alwaysUpdateSnapshots) throws RemoteException;
|
||||
boolean alwaysUpdateSnapshots,
|
||||
@Nullable Properties userProperties) throws RemoteException;
|
||||
|
||||
void customizeComponents() throws RemoteException;
|
||||
|
||||
|
||||
+3
-1
@@ -631,13 +631,15 @@ public class Maven2ServerEmbedderImpl extends MavenRemoteObject implements Maven
|
||||
boolean failOnUnresolvedDependency,
|
||||
@NotNull MavenServerConsole console,
|
||||
@NotNull MavenServerProgressIndicator indicator,
|
||||
boolean alwaysUpdateSnapshots) {
|
||||
boolean alwaysUpdateSnapshots,
|
||||
@Nullable Properties userProperties) {
|
||||
try {
|
||||
((CustomArtifactFactory)getComponent(ArtifactFactory.class)).customize();
|
||||
((CustomArtifactFactory)getComponent(ProjectArtifactFactory.class)).customize();
|
||||
((CustomArtifactResolver)getComponent(ArtifactResolver.class)).customize(workspaceMap, failOnUnresolvedDependency);
|
||||
((CustomRepositoryMetadataManager)getComponent(RepositoryMetadataManager.class)).customize(workspaceMap);
|
||||
((CustomWagonManager)getComponent(WagonManager.class)).customize(failOnUnresolvedDependency);
|
||||
myImpl.setUserProperties(userProperties);
|
||||
|
||||
setConsoleAndIndicator(console, indicator);
|
||||
}
|
||||
|
||||
+7
-1
@@ -58,6 +58,7 @@ import org.codehaus.plexus.logging.Logger;
|
||||
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
|
||||
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
|
||||
|
||||
@@ -76,6 +77,7 @@ public class MavenEmbedder {
|
||||
private final Logger myLogger;
|
||||
private final MavenEmbedderSettings myEmbedderSettings;
|
||||
private final ArtifactRepository myLocalRepository;
|
||||
private Properties myUserProperties = new Properties();
|
||||
|
||||
private MavenEmbedder(@NotNull DefaultPlexusContainer container,
|
||||
@NotNull Settings settings,
|
||||
@@ -418,7 +420,7 @@ public class MavenEmbedder {
|
||||
MavenExecutionRequest result = new DefaultMavenExecutionRequest(myLocalRepository, mySettings, dispatcher, goals, file.getParent(),
|
||||
createProfileManager(activeProfiles, inactiveProfiles,
|
||||
executionProperties), executionProperties,
|
||||
new Properties(), true) {
|
||||
myUserProperties, true) {
|
||||
private boolean myIsRecursive;
|
||||
|
||||
@Override
|
||||
@@ -595,5 +597,9 @@ public class MavenEmbedder {
|
||||
ComponentDescriptor d = container.getComponentDescriptor(componentClass.getName());
|
||||
d.setImplementation(implementationClass.getName());
|
||||
}
|
||||
|
||||
public void setUserProperties(@Nullable Properties userProperties) {
|
||||
myUserProperties = userProperties == null ? new Properties() : userProperties;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-1
@@ -136,6 +136,8 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
|
||||
private boolean myAlwaysUpdateSnapshots;
|
||||
|
||||
@Nullable private Properties myUserProperties;
|
||||
|
||||
public Maven3ServerEmbedderImpl(MavenEmbedderSettings settings) throws RemoteException {
|
||||
super(settings.getSettings());
|
||||
|
||||
@@ -523,7 +525,8 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
boolean failOnUnresolvedDependency,
|
||||
@NotNull MavenServerConsole console,
|
||||
@NotNull MavenServerProgressIndicator indicator,
|
||||
boolean alwaysUpdateSnapshots) throws RemoteException {
|
||||
boolean alwaysUpdateSnapshots,
|
||||
@Nullable Properties userProperties) throws RemoteException {
|
||||
|
||||
try {
|
||||
customizeComponents();
|
||||
@@ -540,6 +543,8 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
myAlwaysUpdateSnapshots = myAlwaysUpdateSnapshots || alwaysUpdateSnapshots;
|
||||
|
||||
setConsoleAndIndicator(console, new MavenServerProgressIndicatorWrapper(indicator));
|
||||
|
||||
myUserProperties = userProperties;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw rethrowException(e);
|
||||
@@ -877,6 +882,7 @@ public class Maven3ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
getComponent(MavenExecutionRequestPopulator.class).populateDefaults(result);
|
||||
|
||||
result.setSystemProperties(mySystemProperties);
|
||||
result.setUserProperties(myUserProperties);
|
||||
|
||||
if (activeProfiles != null) {
|
||||
result.setActiveProfiles(activeProfiles);
|
||||
|
||||
+7
-1
@@ -130,6 +130,8 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
|
||||
private boolean myAlwaysUpdateSnapshots;
|
||||
|
||||
@Nullable private Properties myUserProperties;
|
||||
|
||||
public Maven30ServerEmbedderImpl(MavenServerSettings settings) throws RemoteException {
|
||||
super(settings);
|
||||
|
||||
@@ -494,7 +496,8 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
boolean failOnUnresolvedDependency,
|
||||
@NotNull MavenServerConsole console,
|
||||
@NotNull MavenServerProgressIndicator indicator,
|
||||
boolean alwaysUpdateSnapshots) throws RemoteException {
|
||||
boolean alwaysUpdateSnapshots,
|
||||
@Nullable Properties userProperties) throws RemoteException {
|
||||
|
||||
try {
|
||||
customizeComponents();
|
||||
@@ -511,6 +514,8 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
myAlwaysUpdateSnapshots = myAlwaysUpdateSnapshots || alwaysUpdateSnapshots;
|
||||
|
||||
setConsoleAndIndicator(console, new MavenServerProgressIndicatorWrapper(indicator));
|
||||
|
||||
myUserProperties = userProperties;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw rethrowException(e);
|
||||
@@ -821,6 +826,7 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
getComponent(MavenExecutionRequestPopulator.class).populateDefaults(result);
|
||||
|
||||
result.setSystemProperties(mySystemProperties);
|
||||
result.setUserProperties(myUserProperties);
|
||||
|
||||
if (activeProfiles != null) {
|
||||
result.setActiveProfiles(activeProfiles);
|
||||
|
||||
@@ -213,4 +213,10 @@ public abstract class MavenImporter {
|
||||
protected String findGoalConfigValue(MavenProject p, String goal, String path) {
|
||||
return MavenJDOMUtil.findChildValueByPath(getGoalConfig(p, goal), path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this method if you'd like control over properties used by Maven, e.g. for pom interpolation.
|
||||
*/
|
||||
public void customizeUserProperties(Project project, MavenProject mavenProject, Properties properties) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1244,7 +1244,13 @@ public class MavenProjectsTree {
|
||||
String baseDir = entry.getKey().getPath();
|
||||
MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DEPENDENCIES_RESOLVE, baseDir, baseDir);
|
||||
try {
|
||||
embedder.customizeForResolve(getWorkspaceMap(), console, process, generalSettings.isAlwaysUpdateSnapshots());
|
||||
Properties userProperties = new Properties();
|
||||
for (MavenProject mavenProject : mavenProjects) {
|
||||
for (MavenImporter mavenImporter : mavenProject.getSuitableImporters()) {
|
||||
mavenImporter.customizeUserProperties(project, mavenProject, userProperties);
|
||||
}
|
||||
}
|
||||
embedder.customizeForResolve(getWorkspaceMap(), console, process, generalSettings.isAlwaysUpdateSnapshots(), userProperties);
|
||||
doResolve(project, entry.getValue(), generalSettings, embedder, context, process);
|
||||
}
|
||||
finally {
|
||||
|
||||
+19
-7
@@ -33,6 +33,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServerEmbedder> {
|
||||
private Customization myCustomization;
|
||||
@@ -50,7 +51,7 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
}
|
||||
|
||||
public void customizeForResolve(MavenConsole console, MavenProgressIndicator indicator) {
|
||||
setCustomization(console, indicator, null, false, false);
|
||||
setCustomization(console, indicator, null, false, false, null);
|
||||
perform(new Retriable<Object>() {
|
||||
@Override
|
||||
public Object execute() throws RemoteException {
|
||||
@@ -61,7 +62,12 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
}
|
||||
|
||||
public void customizeForResolve(MavenWorkspaceMap workspaceMap, MavenConsole console, MavenProgressIndicator indicator, boolean alwaysUpdateSnapshot) {
|
||||
setCustomization(console, indicator, workspaceMap, false, alwaysUpdateSnapshot);
|
||||
customizeForResolve(workspaceMap, console, indicator, alwaysUpdateSnapshot, null);
|
||||
}
|
||||
|
||||
public void customizeForResolve(MavenWorkspaceMap workspaceMap, MavenConsole console, MavenProgressIndicator indicator,
|
||||
boolean alwaysUpdateSnapshot, @Nullable Properties userProperties) {
|
||||
setCustomization(console, indicator, workspaceMap, false, alwaysUpdateSnapshot, userProperties);
|
||||
perform(new Retriable<Object>() {
|
||||
@Override
|
||||
public Object execute() throws RemoteException {
|
||||
@@ -74,7 +80,7 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
public void customizeForStrictResolve(MavenWorkspaceMap workspaceMap,
|
||||
MavenConsole console,
|
||||
MavenProgressIndicator indicator) {
|
||||
setCustomization(console, indicator, workspaceMap, true, false);
|
||||
setCustomization(console, indicator, workspaceMap, true, false, null);
|
||||
perform(new Retriable<Object>() {
|
||||
@Override
|
||||
public Object execute() throws RemoteException {
|
||||
@@ -103,7 +109,8 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
myCustomization.failOnUnresolvedDependency,
|
||||
myCustomization.console,
|
||||
myCustomization.indicator,
|
||||
myCustomization.alwaysUpdateSnapshot);
|
||||
myCustomization.alwaysUpdateSnapshot,
|
||||
myCustomization.userProperties);
|
||||
}
|
||||
|
||||
public MavenServerExecutionResult resolveProject(@NotNull final VirtualFile file,
|
||||
@@ -294,13 +301,15 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
MavenProgressIndicator indicator,
|
||||
MavenWorkspaceMap workspaceMap,
|
||||
boolean failOnUnresolvedDependency,
|
||||
boolean alwaysUpdateSnapshot) {
|
||||
boolean alwaysUpdateSnapshot,
|
||||
@Nullable Properties userProperties) {
|
||||
resetCustomization();
|
||||
myCustomization = new Customization(MavenServerManager.wrapAndExport(console),
|
||||
MavenServerManager.wrapAndExport(indicator),
|
||||
workspaceMap,
|
||||
failOnUnresolvedDependency,
|
||||
alwaysUpdateSnapshot);
|
||||
alwaysUpdateSnapshot,
|
||||
userProperties);
|
||||
}
|
||||
|
||||
private synchronized void resetCustomization() {
|
||||
@@ -329,17 +338,20 @@ public abstract class MavenEmbedderWrapper extends RemoteObjectWrapper<MavenServ
|
||||
private final MavenWorkspaceMap workspaceMap;
|
||||
private final boolean failOnUnresolvedDependency;
|
||||
private final boolean alwaysUpdateSnapshot;
|
||||
private final Properties userProperties;
|
||||
|
||||
private Customization(MavenServerConsole console,
|
||||
MavenServerProgressIndicator indicator,
|
||||
MavenWorkspaceMap workspaceMap,
|
||||
boolean failOnUnresolvedDependency,
|
||||
boolean alwaysUpdateSnapshot) {
|
||||
boolean alwaysUpdateSnapshot,
|
||||
@Nullable Properties userProperties) {
|
||||
this.console = console;
|
||||
this.indicator = indicator;
|
||||
this.workspaceMap = workspaceMap;
|
||||
this.failOnUnresolvedDependency = failOnUnresolvedDependency;
|
||||
this.alwaysUpdateSnapshot = alwaysUpdateSnapshot;
|
||||
this.userProperties = userProperties;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,21 +16,31 @@
|
||||
package org.jetbrains.idea.maven.importing;
|
||||
|
||||
import com.intellij.ProjectTopics;
|
||||
import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider;
|
||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ModuleRootEvent;
|
||||
import com.intellij.openapi.roots.ModuleRootListener;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import org.jetbrains.idea.maven.MavenCustomRepositoryHelper;
|
||||
import org.jetbrains.idea.maven.MavenImportingTestCase;
|
||||
import org.jetbrains.idea.maven.model.MavenId;
|
||||
import org.jetbrains.idea.maven.model.MavenProjectProblem;
|
||||
import org.jetbrains.idea.maven.project.MavenProject;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectChanges;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsProcessorTask;
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsTree;
|
||||
import org.jetbrains.idea.maven.server.MavenServerManager;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MiscImportingTest extends MavenImportingTestCase {
|
||||
private int beforeRootsChangedCount;
|
||||
@@ -380,8 +390,85 @@ public class MiscImportingTest extends MavenImportingTestCase {
|
||||
});
|
||||
}
|
||||
|
||||
public void testUserPropertiesCanBeCustomizedByMavenImportersForMaven3() throws Exception {
|
||||
NameSettingMavenImporter extension = new NameSettingMavenImporter("name-from-properties");
|
||||
ExtensionPoint<MavenImporter> extensionPoint = Extensions.getRootArea().getExtensionPoint(MavenImporter.EXTENSION_POINT_NAME);
|
||||
extensionPoint.registerExtension(extension);
|
||||
|
||||
try {
|
||||
importProjectWithMaven3("<groupId>test</groupId>" +
|
||||
"<artifactId>project</artifactId>" +
|
||||
"<version>1</version>" +
|
||||
"<name>${myName}</name>");
|
||||
}
|
||||
finally {
|
||||
extensionPoint.unregisterExtension(extension);
|
||||
}
|
||||
|
||||
MavenProject project = myProjectsManager.findProject(new MavenId("test", "project", "1"));
|
||||
assertNotNull(project);
|
||||
assertEquals("name-from-properties", project.getName());
|
||||
}
|
||||
|
||||
public void testUserPropertiesCanBeCustomizedByMavenImportersForMaven2() throws Exception {
|
||||
NameSettingMavenImporter extension = new NameSettingMavenImporter("name-from-properties");
|
||||
ExtensionPoint<MavenImporter> extensionPoint = Extensions.getRootArea().getExtensionPoint(MavenImporter.EXTENSION_POINT_NAME);
|
||||
extensionPoint.registerExtension(extension);
|
||||
|
||||
try {
|
||||
importProject("<groupId>test</groupId>" +
|
||||
"<artifactId>project</artifactId>" +
|
||||
"<version>1</version>" +
|
||||
"<name>${myName}</name>");
|
||||
}
|
||||
finally {
|
||||
extensionPoint.unregisterExtension(extension);
|
||||
}
|
||||
|
||||
MavenProject project = myProjectsManager.findProject(new MavenId("test", "project", "1"));
|
||||
assertNotNull(project);
|
||||
assertEquals("name-from-properties", project.getName());
|
||||
}
|
||||
|
||||
private void assertRootsChanged(int count) {
|
||||
assertEquals(count, rootsChangedCount);
|
||||
assertEquals(rootsChangedCount, beforeRootsChangedCount);
|
||||
}
|
||||
|
||||
private static class NameSettingMavenImporter extends MavenImporter {
|
||||
private final String myName;
|
||||
|
||||
public NameSettingMavenImporter(String name) {
|
||||
super("gid", "id");
|
||||
myName = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customizeUserProperties(Project project, MavenProject mavenProject, Properties properties) {
|
||||
properties.setProperty("myName", myName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isApplicable(MavenProject mavenProject) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preProcess(Module module,
|
||||
MavenProject mavenProject,
|
||||
MavenProjectChanges changes,
|
||||
IdeModifiableModelsProvider modifiableModelsProvider) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(IdeModifiableModelsProvider modifiableModelsProvider,
|
||||
Module module,
|
||||
MavenRootModelAdapter rootModel,
|
||||
MavenProjectsTree mavenModel,
|
||||
MavenProject mavenProject,
|
||||
MavenProjectChanges changes,
|
||||
Map<MavenProject, String> mavenProjectToModuleName,
|
||||
List<MavenProjectsProcessorTask> postTasks) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user