diff --git a/aether-dependency-resolver/aether-dependency-resolver.iml b/aether-dependency-resolver/aether-dependency-resolver.iml
index 5a94b5515a56..fa0e95e03449 100644
--- a/aether-dependency-resolver/aether-dependency-resolver.iml
+++ b/aether-dependency-resolver/aether-dependency-resolver.iml
@@ -4,6 +4,7 @@
+
@@ -30,5 +31,6 @@
+
\ No newline at end of file
diff --git a/aether-dependency-resolver/src/org/jetbrains/idea/maven/aether/ArtifactRepositoryManager.java b/aether-dependency-resolver/src/org/jetbrains/idea/maven/aether/ArtifactRepositoryManager.java
index 888fef229a8f..c5f97ed75d53 100644
--- a/aether-dependency-resolver/src/org/jetbrains/idea/maven/aether/ArtifactRepositoryManager.java
+++ b/aether-dependency-resolver/src/org/jetbrains/idea/maven/aether/ArtifactRepositoryManager.java
@@ -124,35 +124,39 @@ public class ArtifactRepositoryManager {
myRemoteRepositories.add(createRemoteRepository(id, url));
}
- public Collection resolveDependency(String groupId, String artifactId, String version) throws Exception {
+ public Collection resolveDependency(String groupId, String artifactId, String version, boolean includeTransitiveDependencies) throws Exception {
final List files = new ArrayList<>();
- for (Artifact artifact : resolveDependencyAsArtifact(groupId, artifactId, version, EnumSet.of(ArtifactKind.ARTIFACT))) {
+ for (Artifact artifact : resolveDependencyAsArtifact(groupId, artifactId, version, EnumSet.of(ArtifactKind.ARTIFACT), includeTransitiveDependencies)) {
files.add(artifact.getFile());
}
return files;
}
@NotNull
- public Collection resolveDependencyAsArtifact(String groupId,
- String artifactId,
- String versionConstraint,
- final Set artifactKinds) throws Exception {
-
- final List artifacts = new ArrayList<>();
+ public Collection resolveDependencyAsArtifact(String groupId, String artifactId, String versionConstraint, Set artifactKinds, boolean includeTransitiveDependencies) throws Exception {final List artifacts = new ArrayList<>();
final Set constraints = Collections.singleton(asVersionConstraint(versionConstraint));
for (ArtifactKind kind : artifactKinds) {
//RepositorySystem.resolveDependencies() ignores classifiers, so we need to collect dependencies for the default classifier, and then
// resolve artifacts with specified classifiers for each found dependency
try {
- final CollectResult collectResult = ourSystem.collectDependencies(
- mySession, createCollectRequest(groupId, artifactId, constraints, EnumSet.of(kind))
- );
- final ArtifactRequestBuilder builder = new ArtifactRequestBuilder(kind);
- collectResult.getRoot().accept(new TreeDependencyVisitor(
- new FilteringDependencyVisitor(builder, DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
- ));
-
- final List requests = builder.getRequests();
+ final List requests;
+ if (includeTransitiveDependencies) {
+ final CollectResult collectResult = ourSystem.collectDependencies(
+ mySession, createCollectRequest(groupId, artifactId, constraints, EnumSet.of(kind))
+ );
+ final ArtifactRequestBuilder builder = new ArtifactRequestBuilder(kind);
+ collectResult.getRoot().accept(new TreeDependencyVisitor(
+ new FilteringDependencyVisitor(builder, DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
+ ));
+ requests = builder.getRequests();
+ }
+ else {
+ requests = new ArrayList<>();
+ for (Artifact artifact : toArtifacts(groupId, artifactId, constraints, artifactKinds)) {
+ requests.add(new ArtifactRequest(artifact, Collections.unmodifiableList(myRemoteRepositories), null));
+ }
+ }
+
if (!requests.isEmpty()) {
try {
for (ArtifactResult result : ourSystem.resolveArtifacts(mySession, requests)) {
@@ -276,8 +280,8 @@ public class ArtifactRepositoryManager {
final Dependency dep = node.getDependency();
if (dep != null) {
myRequests.add(new ArtifactRequest(
- new ArtifactWithChangedClassifier(node.getDependency().getArtifact(), myKind.getClassifier()),
- node.getRepositories(),
+ new ArtifactWithChangedClassifier(node.getDependency().getArtifact(), myKind.getClassifier()),
+ node.getRepositories(),
node.getRequestContext()
));
}
diff --git a/aether-dependency-resolver/testSrc/org/jetbrains/idea/maven/aether/ArtifactRepositoryManagerTest.java b/aether-dependency-resolver/testSrc/org/jetbrains/idea/maven/aether/ArtifactRepositoryManagerTest.java
new file mode 100644
index 000000000000..9cca3c7faf90
--- /dev/null
+++ b/aether-dependency-resolver/testSrc/org/jetbrains/idea/maven/aether/ArtifactRepositoryManagerTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.idea.maven.aether;
+
+import com.intellij.testFramework.UsefulTestCase;
+import com.intellij.util.SystemProperties;
+import com.intellij.util.containers.ContainerUtil;
+
+import java.io.File;
+import java.util.Collection;
+
+/**
+ * @author nik
+ */
+public class ArtifactRepositoryManagerTest extends UsefulTestCase {
+ private ArtifactRepositoryManager myRepositoryManager;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ final File localRepo = new File(SystemProperties.getUserHome(), ".m2/repository");
+ myRepositoryManager = new ArtifactRepositoryManager(localRepo);
+ }
+
+ public void testResolveTransitively() throws Exception {
+ Collection files = myRepositoryManager.resolveDependency("junit", "junit", "4.12", true);
+ assertSameElements(ContainerUtil.map(files, File::getName), "junit-4.12.jar", "hamcrest-core-1.3.jar");
+ }
+
+ public void testResolveNonTransitively() throws Exception {
+ Collection files = myRepositoryManager.resolveDependency("junit", "junit", "4.12", false);
+ assertSameElements(ContainerUtil.map(files, File::getName), "junit-4.12.jar");
+ }
+}
diff --git a/java/idea-ui/src/com/intellij/jarRepository/JarRepositoryManager.java b/java/idea-ui/src/com/intellij/jarRepository/JarRepositoryManager.java
index d6d9e23c0a61..8b2d826cbbb5 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/JarRepositoryManager.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/JarRepositoryManager.java
@@ -98,10 +98,11 @@ public class JarRepositoryManager {
final String coord = dialog.getCoordinateText();
final boolean attachSources = dialog.getAttachSources();
final boolean attachJavaDoc = dialog.getAttachJavaDoc();
+ boolean includeTransitiveDependencies = dialog.getIncludeTransitiveDependencies();
final String copyTo = dialog.getDirectoryPath();
final NewLibraryConfiguration config = resolveAndDownload(
- project, coord, attachSources, attachJavaDoc, copyTo, RemoteRepositoriesConfiguration.getInstance(project).getRepositories()
+ project, coord, attachSources, attachJavaDoc, includeTransitiveDependencies, copyTo, RemoteRepositoriesConfiguration.getInstance(project).getRepositories()
);
if (config == null) {
Messages.showErrorDialog(parentComponent, "No files were downloaded for " + coord, CommonBundle.getErrorTitle());
@@ -114,9 +115,10 @@ public class JarRepositoryManager {
String coord,
boolean attachSources,
boolean attachJavaDoc,
+ boolean includeTransitiveDependencies,
String copyTo,
Collection repositories) {
- RepositoryLibraryProperties props = new RepositoryLibraryProperties(coord);
+ RepositoryLibraryProperties props = new RepositoryLibraryProperties(coord, includeTransitiveDependencies);
final Collection roots = loadDependenciesModal(
project, props, attachSources, attachJavaDoc, copyTo, repositories
);
@@ -188,7 +190,7 @@ public class JarRepositoryManager {
boolean loadJavadoc,
@Nullable String copyTo,
@Nullable Collection repositories, boolean modal) {
- final JpsMavenRepositoryLibraryDescriptor libDescriptor = new JpsMavenRepositoryLibraryDescriptor(libraryProps.getGroupId(), libraryProps.getArtifactId(), libraryProps.getVersion());
+ final JpsMavenRepositoryLibraryDescriptor libDescriptor = libraryProps.getRepositoryLibraryDescriptor();
if (libDescriptor.getMavenId() != null) {
if (repositories == null || repositories.isEmpty()) {
repositories = RemoteRepositoriesConfiguration.getInstance(project).getRepositories();
@@ -235,7 +237,7 @@ public class JarRepositoryManager {
}
loadDependenciesAsync(
project,
- new JpsMavenRepositoryLibraryDescriptor(libraryProps.getGroupId(), libraryProps.getArtifactId(), libraryProps.getVersion()),
+ libraryProps.getRepositoryLibraryDescriptor(),
kinds, repos, copyTo, resultProcessor
);
}
@@ -292,7 +294,7 @@ public class JarRepositoryManager {
template = new RepositoryArtifactDescription(null, null, null, "jar", null, coord, null);
}
else {
- template = new RepositoryArtifactDescription(new RepositoryLibraryProperties(coord), "jar", null);
+ template = new RepositoryArtifactDescription(new RepositoryLibraryProperties(coord, true), "jar", null);
}
ProgressManager.getInstance().run(new Task.Backgroundable(project, "Maven", false) {
@@ -539,7 +541,8 @@ public class JarRepositoryManager {
protected Collection perform(ProgressIndicator progress, ArtifactRepositoryManager manager) throws Exception {
final String version = myDesc.getVersion();
try {
- return manager.resolveDependencyAsArtifact(myDesc.getGroupId(), myDesc.getArtifactId(), version, myKinds);
+ return manager.resolveDependencyAsArtifact(myDesc.getGroupId(), myDesc.getArtifactId(), version, myKinds,
+ myDesc.isIncludeTransitiveDependencies());
}
catch (TransferCancelledException e) {
throw new ProcessCanceledException(e);
@@ -553,7 +556,8 @@ public class JarRepositoryManager {
throw e;
}
try {
- return manager.resolveDependencyAsArtifact(myDesc.getGroupId(), myDesc.getArtifactId(), resolvedVersion, myKinds);
+ return manager.resolveDependencyAsArtifact(myDesc.getGroupId(), myDesc.getArtifactId(), resolvedVersion, myKinds,
+ myDesc.isIncludeTransitiveDependencies());
}
catch (TransferCancelledException e1) {
throw new ProcessCanceledException(e1);
diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAddLibraryAction.java b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAddLibraryAction.java
index 49a33579308e..a7e0647bef00 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAddLibraryAction.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAddLibraryAction.java
@@ -70,7 +70,7 @@ public class RepositoryAddLibraryAction extends IntentionAndQuickFixAction {
module.getProject(),
model,
libraryDescription,
- false);
+ false, true);
if (!dialog.showAndGet()) {
return;
}
diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.form b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.form
index 4c449aeef6ec..09d2db2d61a4 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.form
+++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.form
@@ -71,7 +71,7 @@
-
+
@@ -81,7 +81,7 @@
-
+
@@ -89,7 +89,7 @@
-
+
@@ -100,6 +100,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java
index 8545b6cc9e5a..1af64d8b75d2 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java
@@ -90,6 +90,7 @@ public class RepositoryAttachDialog extends DialogWrapper {
private JBCheckBox myDownloadToCheckBox;
private JBLabel myCaptionLabel;
private JPanel myDownloadOptionsPanel;
+ private JBCheckBox myIncludeTransitiveDepsCheckBox;
private final JComboBox myCombobox;
@@ -217,6 +218,10 @@ public class RepositoryAttachDialog extends DialogWrapper {
return mySourcesCheckBox.isSelected();
}
+ public boolean getIncludeTransitiveDependencies() {
+ return myIncludeTransitiveDepsCheckBox.isSelected();
+ }
+
@Nullable
public String getDirectoryPath() {
return myDownloadToCheckBox.isSelected()? myDirectoryField.getText() : null;
diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibrarySupportInModuleConfigurable.java b/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibrarySupportInModuleConfigurable.java
index b4a66448c248..50f21b70b7a8 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibrarySupportInModuleConfigurable.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibrarySupportInModuleConfigurable.java
@@ -38,7 +38,7 @@ public class RepositoryLibrarySupportInModuleConfigurable extends FrameworkSuppo
public RepositoryLibrarySupportInModuleConfigurable(@Nullable Project project, @NotNull RepositoryLibraryDescription libraryDescription) {
this.libraryDescription = libraryDescription;
RepositoryLibraryProperties defaultProperties = libraryDescription.createDefaultProperties();
- this.model = new RepositoryLibraryPropertiesModel(defaultProperties.getVersion(), false, false);
+ this.model = new RepositoryLibraryPropertiesModel(defaultProperties.getVersion(), false, false, defaultProperties.isIncludeTransitiveDependencies());
editor = new RepositoryLibraryPropertiesEditor(project, model, libraryDescription);
}
diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibraryWithDescriptionEditor.java b/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibraryWithDescriptionEditor.java
index 1589068e888d..02bcd029d7a0 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibraryWithDescriptionEditor.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryLibraryWithDescriptionEditor.java
@@ -50,7 +50,7 @@ public class RepositoryLibraryWithDescriptionEditor
RepositoryLibraryPropertiesModel model = new RepositoryLibraryPropertiesModel(
properties.getVersion(),
RepositoryUtils.libraryHasSources(myEditorComponent.getLibraryEditor()),
- RepositoryUtils.libraryHasJavaDocs(myEditorComponent.getLibraryEditor()));
+ RepositoryUtils.libraryHasJavaDocs(myEditorComponent.getLibraryEditor()), properties.isIncludeTransitiveDependencies());
final Project project = myEditorComponent.getProject();
assert project != null : "EditorComponent's project must not be null in order to be used with RepositoryLibraryWithDescriptionEditor";
@@ -59,11 +59,12 @@ public class RepositoryLibraryWithDescriptionEditor
project,
model,
RepositoryLibraryDescription.findDescription(properties),
- true);
+ true, true);
if (!dialog.showAndGet()) {
return;
}
myEditorComponent.getProperties().changeVersion(model.getVersion());
+ myEditorComponent.getProperties().setIncludeTransitiveDependencies(model.isIncludeTransitiveDependencies());
if (wasGeneratedName) {
myEditorComponent.renameLibrary(RepositoryLibraryType.getInstance().getDescription(properties));
}
diff --git a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesDialog.java b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesDialog.java
index 601024874e7f..93aa9b5e7c61 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesDialog.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesDialog.java
@@ -30,11 +30,11 @@ public class RepositoryLibraryPropertiesDialog extends DialogWrapper {
public RepositoryLibraryPropertiesDialog(@Nullable Project project,
RepositoryLibraryPropertiesModel model,
RepositoryLibraryDescription description,
- final boolean changesRequired) {
+ final boolean changesRequired, final boolean allowExcludingTransitiveDependencies) {
super(project);
this.model = model;
propertiesEditor =
- new RepositoryLibraryPropertiesEditor(project, model, description, new RepositoryLibraryPropertiesEditor.ModelChangeListener() {
+ new RepositoryLibraryPropertiesEditor(project, model, description, allowExcludingTransitiveDependencies, new RepositoryLibraryPropertiesEditor.ModelChangeListener() {
@Override
public void onChange(RepositoryLibraryPropertiesEditor editor) {
setOKActionEnabled(editor.isValid() && (!changesRequired || editor.hasChanges()));
diff --git a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.form b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.form
index cb1f7a895be3..ffcf1fb93e5c 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.form
+++ b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.form
@@ -120,7 +120,7 @@
-
+
@@ -151,6 +151,14 @@
+
+
+
+
+
+
+
+
diff --git a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.java b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.java
index d4765db18b1f..1845a13ab3ba 100644
--- a/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.java
+++ b/java/idea-ui/src/com/intellij/jarRepository/settings/RepositoryLibraryPropertiesEditor.java
@@ -61,6 +61,7 @@ public class RepositoryLibraryPropertiesEditor {
private JBCheckBox downloadSourcesCheckBox;
private JBCheckBox downloadJavaDocsCheckBox;
private JBLabel mavenCoordinates;
+ private JBCheckBox myIncludeTransitiveDepsCheckBox;
@NotNull private ModelChangeListener onChangeListener;
@@ -71,7 +72,7 @@ public class RepositoryLibraryPropertiesEditor {
public RepositoryLibraryPropertiesEditor(@Nullable Project project,
RepositoryLibraryPropertiesModel model,
RepositoryLibraryDescription description) {
- this(project, model, description, new ModelChangeListener() {
+ this(project, model, description, true, new ModelChangeListener() {
@Override
public void onChange(RepositoryLibraryPropertiesEditor editor) {
@@ -83,12 +84,14 @@ public class RepositoryLibraryPropertiesEditor {
public RepositoryLibraryPropertiesEditor(@Nullable Project project,
final RepositoryLibraryPropertiesModel model,
RepositoryLibraryDescription description,
+ boolean allowExcludingTransitiveDependencies,
@NotNull final ModelChangeListener onChangeListener) {
this.initialModel = model.clone();
this.model = model;
this.project = project == null ? ProjectManager.getInstance().getDefaultProject() : project;
repositoryLibraryDescription = description;
mavenCoordinates.setCopyable(true);
+ myIncludeTransitiveDepsCheckBox.setVisible(allowExcludingTransitiveDependencies);
myReloadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -243,6 +246,14 @@ public class RepositoryLibraryPropertiesEditor {
onChangeListener.onChange(RepositoryLibraryPropertiesEditor.this);
}
});
+ myIncludeTransitiveDepsCheckBox.setSelected(model.isIncludeTransitiveDependencies());
+ myIncludeTransitiveDepsCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ model.setIncludeTransitiveDependencies(myIncludeTransitiveDepsCheckBox.isSelected());
+ onChangeListener.onChange(RepositoryLibraryPropertiesEditor.this);
+ }
+ });
}
diff --git a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryLibrarySupport.java b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryLibrarySupport.java
index 85b19ed43f1a..9c9602569ada 100644
--- a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryLibrarySupport.java
+++ b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/RepositoryLibrarySupport.java
@@ -73,7 +73,8 @@ public class RepositoryLibrarySupport {
RepositoryLibraryProperties libraryProperties = new RepositoryLibraryProperties(
libraryDescription.getGroupId(),
libraryDescription.getArtifactId(),
- model.getVersion());
+ model.getVersion(),
+ model.isIncludeTransitiveDependencies());
final LibraryEx library = (LibraryEx)modifiableModel.createLibrary(
LibraryEditingUtil.suggestNewLibraryName(modifiableModel, RepositoryLibraryType.getInstance().getDescription(libraryProperties)),
RepositoryLibraryType.REPOSITORY_LIBRARY_KIND);
diff --git a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/propertiesEditor/RepositoryLibraryPropertiesModel.java b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/propertiesEditor/RepositoryLibraryPropertiesModel.java
index bfd51600d905..3f71806702a5 100644
--- a/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/propertiesEditor/RepositoryLibraryPropertiesModel.java
+++ b/java/idea-ui/src/org/jetbrains/idea/maven/utils/library/propertiesEditor/RepositoryLibraryPropertiesModel.java
@@ -21,21 +21,36 @@ public class RepositoryLibraryPropertiesModel {
private String version;
private boolean downloadSources;
private boolean downloadJavaDocs;
+ private boolean includeTransitiveDependencies;
public RepositoryLibraryPropertiesModel(String version, boolean downloadSources, boolean downloadJavaDocs) {
+ this(version, downloadSources, downloadJavaDocs, true);
+ }
+
+ public RepositoryLibraryPropertiesModel(String version, boolean downloadSources, boolean downloadJavaDocs,
+ boolean includeTransitiveDependencies) {
this.version = version;
this.downloadSources = downloadSources;
this.downloadJavaDocs = downloadJavaDocs;
+ this.includeTransitiveDependencies = includeTransitiveDependencies;
}
public RepositoryLibraryPropertiesModel clone() {
- return new RepositoryLibraryPropertiesModel(version, downloadSources, downloadJavaDocs);
+ return new RepositoryLibraryPropertiesModel(version, downloadSources, downloadJavaDocs, includeTransitiveDependencies);
}
public boolean isValid() {
return !Strings.isNullOrEmpty(version);
}
+ public boolean isIncludeTransitiveDependencies() {
+ return includeTransitiveDependencies;
+ }
+
+ public void setIncludeTransitiveDependencies(boolean includeTransitiveDependencies) {
+ this.includeTransitiveDependencies = includeTransitiveDependencies;
+ }
+
public boolean isDownloadSources() {
return downloadSources;
}
@@ -69,6 +84,7 @@ public class RepositoryLibraryPropertiesModel {
if (downloadSources != model.downloadSources) return false;
if (downloadJavaDocs != model.downloadJavaDocs) return false;
+ if (includeTransitiveDependencies != model.includeTransitiveDependencies) return false;
if (version != null ? !version.equals(model.version) : model.version != null) return false;
return true;
@@ -78,6 +94,7 @@ public class RepositoryLibraryPropertiesModel {
public int hashCode() {
int result = (downloadSources ? 1 : 0);
result = 31 * result + (downloadJavaDocs ? 1 : 0);
+ result = 31 * result + (includeTransitiveDependencies ? 1 : 0);
result = 31 * result + (version != null ? version.hashCode() : 0);
return result;
}
diff --git a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java
index 8cbe3dd40523..5d40d01b04e0 100644
--- a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java
+++ b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryDescription.java
@@ -112,7 +112,7 @@ public class RepositoryLibraryDescription {
}
public RepositoryLibraryProperties createDefaultProperties() {
- return new RepositoryLibraryProperties(getGroupId(), getArtifactId(), ReleaseVersionId);
+ return new RepositoryLibraryProperties(getGroupId(), getArtifactId(), ReleaseVersionId, true);
}
public String getDisplayName(String version) {
diff --git a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java
index 811afc45e744..1eb6548e8808 100644
--- a/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java
+++ b/java/openapi/src/org/jetbrains/idea/maven/utils/library/RepositoryLibraryProperties.java
@@ -32,11 +32,15 @@ public class RepositoryLibraryProperties extends LibraryProperties method) {
final JpsMavenRepositoryLibraryDescriptor descriptor = myDescriptor;
return descriptor != null ? method.apply(descriptor) : null;
}
+
+ @NotNull
+ public JpsMavenRepositoryLibraryDescriptor getRepositoryLibraryDescriptor() {
+ return myDescriptor != null ? myDescriptor : new JpsMavenRepositoryLibraryDescriptor(null, true);
+ }
}
diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java
index 321b784b01ae..ce63c18d5767 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java
@@ -147,7 +147,8 @@ public class DependencyResolvingBuilder extends ModuleLevelBuilder{
if (!required.isEmpty()) {
context.processMessage(new ProgressMessage("Resolving '" + lib.getName() + "' library..."));
LOG.debug("Downloading missing files for " + lib.getName() + " library: " + required);
- final Collection resolved = repoManager.resolveDependency(descriptor.getGroupId(), descriptor.getArtifactId(), descriptor.getVersion());
+ final Collection resolved = repoManager.resolveDependency(descriptor.getGroupId(), descriptor.getArtifactId(),
+ descriptor.getVersion(), descriptor.isIncludeTransitiveDependencies());
if (!resolved.isEmpty()) {
syncPaths(required, resolved);
}
diff --git a/jps/model-api/src/org/jetbrains/jps/model/library/JpsMavenRepositoryLibraryDescriptor.java b/jps/model-api/src/org/jetbrains/jps/model/library/JpsMavenRepositoryLibraryDescriptor.java
index 6f926e660442..f43afb006e77 100644
--- a/jps/model-api/src/org/jetbrains/jps/model/library/JpsMavenRepositoryLibraryDescriptor.java
+++ b/jps/model-api/src/org/jetbrains/jps/model/library/JpsMavenRepositoryLibraryDescriptor.java
@@ -18,6 +18,8 @@ package org.jetbrains.jps.model.library;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Objects;
+
/**
* @author Eugene Zhuravlev
* Date: 13-Jun-16
@@ -27,16 +29,28 @@ public class JpsMavenRepositoryLibraryDescriptor {
private final String myGroupId;
private final String myArtifactId;
private final String myVersion;
+ private final boolean myIncludeTransitiveDependencies;
public JpsMavenRepositoryLibraryDescriptor(@NotNull String groupId, @NotNull String artifactId, @NotNull String version) {
+ this(groupId, artifactId, version, true);
+ }
+
+ public JpsMavenRepositoryLibraryDescriptor(@NotNull String groupId, @NotNull String artifactId, @NotNull String version,
+ boolean includeTransitiveDependencies) {
myGroupId = groupId;
myArtifactId = artifactId;
myVersion = version;
+ myIncludeTransitiveDependencies = includeTransitiveDependencies;
myMavenId = groupId + ":" + artifactId + ":" + version;
}
public JpsMavenRepositoryLibraryDescriptor(@Nullable String mavenId) {
+ this(mavenId, true);
+ }
+
+ public JpsMavenRepositoryLibraryDescriptor(@Nullable String mavenId, boolean includeTransitiveDependencies) {
myMavenId = mavenId;
+ myIncludeTransitiveDependencies = includeTransitiveDependencies;
if (mavenId == null) {
myGroupId = myArtifactId = myVersion = null;
}
@@ -61,6 +75,10 @@ public class JpsMavenRepositoryLibraryDescriptor {
return myArtifactId;
}
+ public boolean isIncludeTransitiveDependencies() {
+ return myIncludeTransitiveDependencies;
+ }
+
public String getVersion() {
return myVersion;
}
@@ -71,15 +89,12 @@ public class JpsMavenRepositoryLibraryDescriptor {
if (o == null || getClass() != o.getClass()) return false;
JpsMavenRepositoryLibraryDescriptor that = (JpsMavenRepositoryLibraryDescriptor)o;
-
- if (myMavenId != null ? !myMavenId.equals(that.myMavenId) : that.myMavenId != null) return false;
-
- return true;
+ return Objects.equals(myMavenId, that.myMavenId) && myIncludeTransitiveDependencies == that.myIncludeTransitiveDependencies;
}
@Override
public int hashCode() {
- return myMavenId != null ? myMavenId.hashCode() : 0;
+ return Objects.hashCode(myMavenId) * 31 + (myIncludeTransitiveDependencies ? 1 : 0);
}
@Override
diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java
index b482d2c6d1b1..21d394635a0d 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java
@@ -386,6 +386,7 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension
private static class JpsRepositoryLibraryPropertiesSerializer extends JpsLibraryPropertiesSerializer> {
private static final String MAVEN_ID_ATTRIBUTE = "maven-id";
+ private static final String INCLUDE_TRANSITIVE_DEPS_ATTRIBUTE = "include-transitive-deps";
public JpsRepositoryLibraryPropertiesSerializer() {
super(JpsRepositoryLibraryType.INSTANCE, JpsRepositoryLibraryType.INSTANCE.getTypeId());
@@ -394,7 +395,8 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension
@Override
public JpsSimpleElement loadProperties(@Nullable Element elem) {
return JpsElementFactory.getInstance().createSimpleElement(new JpsMavenRepositoryLibraryDescriptor(
- elem != null? elem.getAttributeValue(MAVEN_ID_ATTRIBUTE, (String)null) : null
+ elem != null ? elem.getAttributeValue(MAVEN_ID_ATTRIBUTE, (String)null) : null,
+ elem == null || Boolean.parseBoolean(elem.getAttributeValue(INCLUDE_TRANSITIVE_DEPS_ATTRIBUTE, "true"))
));
}
diff --git a/platform/testFramework/testSrc/tests/testGroups.properties b/platform/testFramework/testSrc/tests/testGroups.properties
index 54f0b6e207a2..66a69a372881 100644
--- a/platform/testFramework/testSrc/tests/testGroups.properties
+++ b/platform/testFramework/testSrc/tests/testGroups.properties
@@ -50,6 +50,7 @@ org.jetbrains.idea.maven.embedder.*
org.jetbrains.idea.maven.execution.*
org.jetbrains.idea.maven.intentions.*
org.jetbrains.idea.maven.navigator.*
+org.jetbrains.idea.maven.aether.*
[TASKS_INTEGRATION_TESTS]
com.intellij.tasks.integration.*
diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit4/JUnitAbstractIntegrationTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit4/JUnitAbstractIntegrationTest.java
index b1ba96003451..61302037feee 100644
--- a/plugins/junit5_rt_tests/test/com/intellij/junit4/JUnitAbstractIntegrationTest.java
+++ b/plugins/junit5_rt_tests/test/com/intellij/junit4/JUnitAbstractIntegrationTest.java
@@ -128,7 +128,8 @@ public abstract class JUnitAbstractIntegrationTest extends BaseConfigurationTest
JpsMavenRepositoryLibraryDescriptor descriptor,
ArtifactRepositoryManager repoManager) throws Exception {
- Collection files = repoManager.resolveDependency(descriptor.getGroupId(), descriptor.getArtifactId(), descriptor.getVersion());
+ Collection files = repoManager.resolveDependency(descriptor.getGroupId(), descriptor.getArtifactId(), descriptor.getVersion(),
+ descriptor.isIncludeTransitiveDependencies());
for (File artifact : files) {
VirtualFile libJarLocal = LocalFileSystem.getInstance().findFileByIoFile(artifact);
assertNotNull(libJarLocal);
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java
index 3b7d8cd8974c..0ab270d99d64 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/library/RepositoryAttachHandler.java
@@ -59,7 +59,7 @@ public class RepositoryAttachHandler {
List repositories) {
final ArrayList repos =
repositories.stream().map(info -> toRemoteRepositoryDescription(info)).collect(Collectors.toCollection(ArrayList::new));
- return JarRepositoryManager.resolveAndDownload(project, coord, attachSources, attachJavaDoc, copyTo, repos);
+ return JarRepositoryManager.resolveAndDownload(project, coord, attachSources, attachJavaDoc, true, copyTo, repos);
}
@NotNull
@@ -73,7 +73,7 @@ public class RepositoryAttachHandler {
final ArrayList repos =
repositories.stream().map(info -> toRemoteRepositoryDescription(info)).collect(Collectors.toCollection(ArrayList::new));
return new ArrayList<>(JarRepositoryManager.loadDependencies(
- project, new RepositoryLibraryProperties(coord), attachSources, attachJavaDoc, copyTo, repos
+ project, new RepositoryLibraryProperties(coord, true), attachSources, attachJavaDoc, copyTo, repos
));
}