diff --git a/.idea/libraries/XStream.xml b/.idea/libraries/XStream.xml
index 89d16d07a764..1264fe7b4bb2 100644
--- a/.idea/libraries/XStream.xml
+++ b/.idea/libraries/XStream.xml
@@ -12,6 +12,10 @@
34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63
+
+
+
+
diff --git a/.idea/libraries/maven_resolver_provider.xml b/.idea/libraries/maven_resolver_provider.xml
index be6b428d7061..f5d59b9c1153 100644
--- a/.idea/libraries/maven_resolver_provider.xml
+++ b/.idea/libraries/maven_resolver_provider.xml
@@ -1,42 +1,45 @@
-
+
-
- 197a8a6e7c7df66dd1fa70bb495ac7616f0e96f43d354d69ff4794d725d47427
+
+ 5dea05049c94f952f48ce2bfe0111afdf986acc591fcc11d23fe3b8dcb70291e
-
- c392548bc1a3f0c6a180f888bd2349602de5b1e30059fe0ec46f81ed4ce14129
+
+ 8f59b0a16fe9c933be749a60ae0705a0cb337bb5abaf38801b40b740ff775727
-
- 288c29acda1d26138c8a53fff326ee79bbce870c63c9ac876e7fe8c2944044d3
+
+ a4377182ac2e5adfe16be3b3c81981a5ecddab014184de72ae1e522f04a77602
-
- b3b5412ce17889103ea564bcdfcf9fb3dfa540344ffeac6b538a73c9d7182662
+
+ 3fb4fb6143fdf964024c3cb738551524b9ea84e5c211cd660c559ad0703e5230
-
- 813233a8485cbaf97b1f9a2c17cef723b068f7260a4319cf4958f221d04b9937
+
+ 30f015d1c1a393e19c18cd4f43532089c36d4ca328608ce3dda78b74d3d31515
-
- c425ca169d67217256a8d1991144691fcf23351e09431890af240bfeed33b902
+
+ 2ca4a967bdd12a9e85d40e012374f86e63d4a1030c199da4832e3d0a1c6770d8
-
- c5994010bcdce1d2bd603a4d50c47191ddbd7875d1157b23aaa26d33c82fda13
+
+ 15335c4dcf082f599fb8eddcfb58d6a7e9a9c97de2883c257089a479b9b24522
-
- b396d3b081b353541ea9a147ab2d3eee5723b460d130ef7cb1d95366aeab7c31
+
+ 137c297e6a52d489b76663c82324d54e40f5d498a8fc015c0203fd91df8623b0
-
- d0b28ed944058ba4f9be4b54c25d6d5269cc4f3f3c49aa450d4dc2f7e0d552f6
+
+ 63f5f665e44a09ef55463b3b91fda0b78ff07dd24b1060d56e79c10b6e32cbfb
-
- 17441a39045ac19bc4a8068fb7284facebf6337754bf2bf8f26a76b5f98ed108
+
+ 99ad721e4631d9bd0c4f9e29c869672577c66f2a674a5723ce38eff13c75cbfd
-
- cdcad9355b625743f40e4cead9a96353404e010c39c808d23b044be331afa251
+
+ 4aaea1584c39294ca926fc474723d9684473609ef4490c4eb169d6ea7daca6b5
-
- 17aaebe6e3e59df8cb5b4ec210196f7084637312b9bc4ff14cb77ad1ae3c381b
+
+ e4dafb8acc13d736377c02d2170d869438dd74b98b860745909d238726babcbb
+
+
+ 0685f29ec3b548d9b6917c527f13c667685a3394b955aaa5b25d0559818b7fc5
@@ -47,33 +50,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aether-dependency-resolver/intellij.java.aetherDependencyResolver.iml b/aether-dependency-resolver/intellij.java.aetherDependencyResolver.iml
index 9a3fa95782be..244d4187c36c 100644
--- a/aether-dependency-resolver/intellij.java.aetherDependencyResolver.iml
+++ b/aether-dependency-resolver/intellij.java.aetherDependencyResolver.iml
@@ -33,10 +33,10 @@
-
+
-
- 663bc1ab1f5b2e2462d241e48934d84e4cddc950a17f7f19c53ebf1b39cc5569
+
+ 4f2a857d8b832494bae9ef6d7db7bb8409378b28aabd3615f03faebe42a4ad1d
@@ -46,20 +46,20 @@
-
+
-
+
-
+
-
- 465bbb05ee2e1504738d26a1bfeca0c85d133476f3f625ceb1c7eb57e39b15ac
+
+ 1cf2a88c984e0eae8b3f13e1eec904eedead2f076d1f3c1d5cb5103a21538bd1
@@ -74,20 +74,20 @@
-
+
-
+
-
+
-
- 50174586a20ab1d0082bafaa12939932592164fd0fecdcac2f60af26684b6e34
+
+ 4ab68bdec97eec318b2a3bd27e7c954e316f890df92d544b68afd0bf666c9588
@@ -98,11 +98,11 @@
-
+
-
+
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 552f670683d8..b9a35bc24729 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
@@ -4,6 +4,13 @@ package org.jetbrains.idea.maven.aether;
import com.intellij.openapi.application.ClassPathUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.ArrayUtil;
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.building.DefaultModelBuilderFactory;
+import org.apache.maven.model.building.ModelBuilder;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.apache.maven.model.profile.activation.ProfileActivator;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.*;
import org.eclipse.aether.artifact.Artifact;
@@ -63,6 +70,14 @@ public final class ArtifactRepositoryManager {
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
locator.addService(TransporterFactory.class, FileTransporterFactory.class);
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
+ locator.setServices(ModelBuilder.class, new DefaultModelBuilderFactory() {
+ @Override
+ public ProfileActivator[] newProfileActivators() {
+ // allow pom profiles to make dependency resolution deterministic and predictable:
+ // consider all possible dependencies the artifact can potentially have.
+ return new ProfileActivator[] {new ProfileActivatorProxy(super.newProfileActivators())};
+ }
+ }.newInstance());
locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler() {
@Override
public void serviceCreationFailed(Class> type, Class> impl, Throwable exception) {
@@ -168,7 +183,9 @@ public final class ArtifactRepositoryManager {
}
private RepositorySystemSession createDefaultSession() {
- return new DefaultRepositorySystemSession(sessionTemplate);
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(sessionTemplate);
+ session.setReadOnly();
+ return session;
}
/**
@@ -184,13 +201,12 @@ public final class ArtifactRepositoryManager {
private RepositorySystemSession createSession(@NotNull List excludedDependencies) {
DefaultRepositorySystemSession session = new DefaultRepositorySystemSession(sessionTemplate);
- if (excludedDependencies.isEmpty()) {
- return session;
+ if (!excludedDependencies.isEmpty()) {
+ session.setDependencySelector(new AndDependencySelector(
+ session.getDependencySelector(),
+ new ExclusionDependencySelector(exclusions(excludedDependencies)))
+ );
}
- session.setDependencySelector(new AndDependencySelector(
- session.getDependencySelector(),
- new ExclusionDependencySelector(exclusions(excludedDependencies)))
- );
session.setReadOnly();
return session;
}
@@ -223,6 +239,7 @@ public final class ArtifactRepositoryManager {
private static RepositorySystemSession cloneSessionAndClearData(RepositorySystemSession session) {
DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession(session);
newSession.setData(new DefaultSessionData());
+ newSession.setReadOnly();
return newSession;
}
@@ -266,13 +283,16 @@ public final class ArtifactRepositoryManager {
org.eclipse.aether.spi.connector.RepositoryConnector.class, //aether-spi
org.eclipse.aether.util.ConfigUtils.class, //aether-util
org.eclipse.aether.impl.ArtifactResolver.class, //aether-impl
+ org.eclipse.sisu.Nullable.class, // sisu.inject
org.eclipse.aether.transport.file.FileTransporterFactory.class, //aether-transport-file
org.eclipse.aether.transport.http.HttpTransporterFactory.class, //aether-transport-http
org.apache.http.HttpConnection.class, //http-core
org.apache.http.client.HttpClient.class, //http-client
+ org.apache.http.entity.mime.MIME.class, //http-mime
org.apache.commons.logging.LogFactory.class, // commons-logging
org.slf4j.Marker.class, // slf4j, - required for aether resolver at runtime
org.slf4j.jul.JDK14LoggerFactory.class, // slf4j-jdk14 - required for aether resolver at runtime
+ org.eclipse.aether.named.providers.NoopNamedLockFactory.class, // resolver-named-locks
org.apache.commons.codec.binary.Base64.class // commons-codec
));
result.addAll(List.of(ClassPathUtil.getUtilClasses())); // intellij.platform.util module
@@ -546,8 +566,8 @@ public final class ArtifactRepositoryManager {
// explicitly set UPDATE_POLICY_ALWAYS, because default setting is UPDATE_POLICY_DAILY, and 5xx resolution errors are cached
// in local repository for one day and retry does not work
- RepositoryPolicy enabledRepositoryPolicy = new RepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_ALWAYS, null);
- RepositoryPolicy disabledRepositoryPolicy = new RepositoryPolicy(false, null, null);
+ RepositoryPolicy enabledRepositoryPolicy = new RepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_ALWAYS, RepositoryPolicy.CHECKSUM_POLICY_WARN);
+ RepositoryPolicy disabledRepositoryPolicy = new RepositoryPolicy(false, null, RepositoryPolicy.CHECKSUM_POLICY_WARN);
builder.setReleasePolicy(enabledRepositoryPolicy);
builder.setSnapshotPolicy(allowSnapshots ? enabledRepositoryPolicy : disabledRepositoryPolicy);
@@ -756,4 +776,48 @@ public final class ArtifactRepositoryManager {
return rootNodes.isEmpty() ? null : rootNodes.get(0);
}
}
+
+ // Force certain activation kinds to be always active in order to include such dependencies in dependency resolution process
+ // Currently OS and JDK activations are always enabled for the purpose of transitive artifact discovery
+ private static class ProfileActivatorProxy implements ProfileActivator {
+
+ private final ProfileActivator[] myDelegates;
+
+ ProfileActivatorProxy(ProfileActivator[] delegates) {
+ myDelegates = delegates;
+ }
+
+ private static boolean isForceActivation(Profile profile) {
+ Activation activation = profile.getActivation();
+ return activation != null && (activation.getJdk() != null || activation.getOs() != null);
+ }
+
+ @Override
+ public boolean isActive(Profile profile, ProfileActivationContext context, ModelProblemCollector problems) {
+ if (isForceActivation(profile)) {
+ return true;
+ }
+ Boolean active = null;
+ for (ProfileActivator delegate : myDelegates) {
+ if (delegate.presentInConfig(profile, context, problems)) {
+ boolean activeValue = delegate.isActive(profile, context, problems);
+ active = active == null? activeValue : active && activeValue;
+ }
+ }
+ return Boolean.TRUE.equals(active);
+ }
+
+ @Override
+ public boolean presentInConfig(Profile profile, ProfileActivationContext context, ModelProblemCollector problems) {
+ if (isForceActivation(profile)) {
+ return true;
+ }
+ for (ProfileActivator delegate : myDelegates) {
+ if (delegate.presentInConfig(profile, context, problems)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
}
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 0e471d7c9e8d..993a8a6255de 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
@@ -1,4 +1,4 @@
-// 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.
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.maven.utils.library;
import com.intellij.java.library.LibraryWithMavenCoordinatesProperties;
@@ -45,12 +45,10 @@ public class RepositoryLibraryProperties extends LibraryProperties excludedDependencies) {
- this(new JpsMavenRepositoryLibraryDescriptor(groupId, artifactId, version, includeTransitiveDependencies,
- excludedDependencies));
+ public RepositoryLibraryProperties(
+ @NotNull String groupId, @NotNull String artifactId, @NotNull String version, boolean includeTransitiveDependencies, @NotNull List excludedDependencies
+ ) {
+ this(new JpsMavenRepositoryLibraryDescriptor(groupId, artifactId, version, includeTransitiveDependencies, excludedDependencies));
}
@Override
@@ -95,15 +93,11 @@ public class RepositoryLibraryProperties extends LibraryProperties dependencyMavenIds) {
- myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), getPackaging(), isIncludeTransitiveDependencies(),
- dependencyMavenIds, getArtifactsVerification(),
- getJarRepositoryId());
+ public void setExcludedDependencies(List excludedDeps) {
+ myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), getPackaging(), isIncludeTransitiveDependencies(), excludedDeps != null? excludedDeps : Collections.emptyList(), getArtifactsVerification(), getJarRepositoryId());
}
@@ -180,10 +169,14 @@ public class RepositoryLibraryProperties extends LibraryProperties artifactsVerification) {
- List effectiveValue = artifactsVerification == null ? Collections.emptyList() : artifactsVerification;
- myDescriptor = new JpsMavenRepositoryLibraryDescriptor(getMavenId(), getPackaging(), isIncludeTransitiveDependencies(),
- getExcludedDependencies(), effectiveValue,
- getJarRepositoryId());
+ myDescriptor = new JpsMavenRepositoryLibraryDescriptor(
+ getMavenId(),
+ getPackaging(),
+ isIncludeTransitiveDependencies(),
+ getExcludedDependencies(),
+ artifactsVerification != null? artifactsVerification : Collections.emptyList(),
+ getJarRepositoryId()
+ );
}
@SuppressWarnings("unused") //we need to have a separate method here because XmlSerializer fails if the returned list is unmodifiable