From 242b41635a89f011714b9935941aac472dc372e9 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 17 Sep 2024 14:22:30 +0200 Subject: [PATCH] update maven resolver to 3.9.9 GitOrigin-RevId: 2abdd551becaf6a62dcc87a3db2f3bd7366ecd1c --- .idea/libraries/XStream.xml | 4 + .idea/libraries/maven_resolver_provider.xml | 103 +++++++++--------- ...intellij.java.aetherDependencyResolver.iml | 30 ++--- .../aether/ArtifactRepositoryManager.java | 82 ++++++++++++-- .../library/RepositoryLibraryProperties.java | 47 ++++---- 5 files changed, 166 insertions(+), 100 deletions(-) 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