New format in "etag" response header in 3.66.0

Hi,

Our team recently upgraded to OSS 3.66.0, and discovered a format change in the “etag” response header>

Old format (<= 3.65.0):
“{SHA1{18578ef02384f87026308877657b517c4404a915}}”

New format (>= 3.66.0):
“18578ef02384f87026308877657b517c4404a915”

Since we can’t find any documentation for this, we’re reaching out to ask if this is an intentional and permanent change?

Best regards,
Marius Stenbek

Hi Marius,

I’d just point out that etags by the RFC are an opaque identifier so I would generally discourage you from having any expectations about the content of the header.

The problem is Maven expecting the old format to extract the checksum from the request (maven-resolver/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/transport/http/Nx2ChecksumExtractor.java at master · apache/maven-resolver · GitHub)

Now Maven (3.9+) will reported:

[WARNING] Could not validate integrity of download from https://domain.com/nexus/repository/repo/groupid/artifact/version/artifact-version.pom
org.eclipse.aether.transfer.ChecksumFailureException: Checksum validation failed, no checksums available
      at org.eclipse.aether.internal.impl.AbstractChecksumPolicy.onNoMoreChecksums (AbstractChecksumPolicy.java:63)
      at org.eclipse.aether.connector.basic.ChecksumValidator.validate (ChecksumValidator.java:112)
      at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask (BasicRepositoryConnector.java:484)
      at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run (BasicRepositoryConnector.java:414)
      at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get (BasicRepositoryConnector.java:260)
      at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads (DefaultArtifactResolver.java:537)
      at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:449)
      at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:261)
      at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:243)
      at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:234)
      at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:175)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.resolveCachedArtifactDescriptor (DfDependencyCollector.java:382)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.getArtifactDescriptorResult (DfDependencyCollector.java:368)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:218)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:156)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process (DfDependencyCollector.java:138)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doRecurse (DfDependencyCollector.java:343)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:277)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:156)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process (DfDependencyCollector.java:138)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doRecurse (DfDependencyCollector.java:343)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:277)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.processDependency (DfDependencyCollector.java:156)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.process (DfDependencyCollector.java:138)
      at org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector.doCollectDependencies (DfDependencyCollector.java:108)
      at org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies (DependencyCollectorDelegate.java:222)
      at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies (DefaultDependencyCollector.java:87)
      at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies (DefaultRepositorySystem.java:306)
      at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:151)
      at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:224)
      at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:136)
      at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:355)
      at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:313)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
      at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
      at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
      at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
      at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
      at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
      at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
      at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
      at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
      at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
      at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
      at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
      at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
      at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
      at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
      at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke (Method.java:566)
      at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
      at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
      at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
      at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)

Ref: Artifact Resolver – Included Checksum Strategies