Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package maven-resolver for openSUSE:Factory checked in at 2025-07-22 12:54:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/maven-resolver (Old) and /work/SRC/openSUSE:Factory/.maven-resolver.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "maven-resolver" Tue Jul 22 12:54:23 2025 rev:24 rq:1294967 version:1.9.24 Changes: -------- New Changes file: --- /dev/null 2025-07-03 00:32:22.244000000 +0200 +++ /work/SRC/openSUSE:Factory/.maven-resolver.new.8875/maven-resolver-supplier.changes 2025-07-22 12:54:41.378029227 +0200 @@ -0,0 +1,500 @@ +------------------------------------------------------------------- +Tue Jul 22 07:22:59 UTC 2025 - Fridrich Strba <fst...@suse.com> + +- Update to upstream version 1.9.24 + * New features and improvements + + Metadata type out of coordinates + + RFC9457 implementation + + Intern context strings + * Maintenance + + Align plexus-util version with Maven + + Align guice version with Maven + + Enable Github Issues (1.9.x branch) +- Build also maven-resolver-supplier package in separate spec file + +------------------------------------------------------------------- +Tue Jun 3 08:20:23 UTC 2025 - Fridrich Strba <fst...@suse.com> + +- Add dependency on objectweb-asm to build with sisu 0.9.0.M4 + +------------------------------------------------------------------- +Mon May 26 10:21:33 UTC 2025 - Fridrich Strba <fst...@suse.com> + +- Update to upstream version 1.9.23 + * Bug + + MRESOLVER-659: NPE in trusted checksum post processor if + * Improvement + + MRESOLVER-680: Disable checksum by default for .sigstore.json + as well + + MRESOLVER-703: HTTP transport should expose config for max + redirects + +------------------------------------------------------------------- +Tue Aug 27 08:51:42 UTC 2024 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.22 + * Bug + + MRESOLVER-572: Resolver-Supplier unusable in OSGi runtimes + + MRESOLVER-574: Invalid Cookie set under proxy conditions + + MRESOLVER-586: In typical setups, DefaultArtifact copies the + same maps over and over again + + MRESOLVER-587: Memory consumption improvements + * New Feature + + MRESOLVER-571: Import o.e.aether packages with the exact same + version in OSGi metadata + * Improvement + + MRESOLVER-570: Remove excessive strictness of OSGi dependency + metadata + * Task + + MRESOLVER-576: Allow co-release of Resolver 1.x and 2.x + +------------------------------------------------------------------- +Wed Jun 12 10:33:43 UTC 2024 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.20 + * Bug + + MRESOLVER-483: PreorderNodeListGenerator bug: may print + trailing ":" + + MRESOLVER-522: File locking threads not entering critical + region were "oversleeping" + + MRESOLVER-547: BF collector always copies artifacts, even + when it should not + * Improvement + + MRESOLVER-536: Skip setting last modified time when FS does + not support it + +------------------------------------------------------------------- +Tue Apr 2 17:30:32 UTC 2024 - Fridrich Strba <fst...@suse.com> + +- Add dependency on plexus-xml where relevant + * this will be needed for smooth upgrade to plexus-utils 4.0.0 + +------------------------------------------------------------------- +Tue Jan 30 07:02:35 UTC 2024 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.18 + * Bug + + MRESOLVER-372: Sporadic AccessDeniedEx on Windows + + MRESOLVER-441: Undo FileUtils changes that altered non-Windows + execution path + * Improvement + + MRESOLVER-396: Native transport should retry on HTTP 429 + (Retry-After) + * Task + + MRESOLVER-397: Deprecate Guice modules + + MRESOLVER-405: Get rid of component name string literals, make + them constants and reusable + + MRESOLVER-433: Expose configuration for inhibiting + Expect-Continue handshake in 1.x + + MRESOLVER-435: Refresh download page + + MRESOLVER-437: Resolver should not override given HTTP + transport default use of expect-continue handshake + +------------------------------------------------------------------- +Thu Sep 21 12:10:01 UTC 2023 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.15 + * Bug + + MRESOLVER-373: Remove lock upgrading code + + MRESOLVER-375: Several key aspects are broken in provided and + trusted checksum feature + + MRESOLVER-376: StackOverflowError at + BfDependencyCollector.processDependency + + MRESOLVER-380: Lock diagnostic: attempted lock step is + recorded, but on failed attempt is not removed + + MRESOLVER-393: Transport HTTP does not retain last modified as + sent by remote end + * Improvement + + MRESOLVER-220: Modify signaling for unsupported operations + + MRESOLVER-382: Define local outgoing (bind) address + + MRESOLVER-385: Reduce default value for + aether.connector.http.connectionMaxTtl + * Task + + MRESOLVER-378: Update parent POM to 40 + + MRESOLVER-381: Undo MRESOLVER-373 as it was fixed by other + means + + MRESOLVER-386: Make all injected ctors public, deprecate all + def ctors + + MRESOLVER-388: Transport HTTP old codec proper override + +------------------------------------------------------------------- +Mon Jun 19 15:06:45 UTC 2023 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.12 + * Bug + + [MRESOLVER-371] Unjustified WARNING log added by + MRESOLVER-364 + + [MRESOLVER-361] Unreliable TCP and retries on upload + + [MRESOLVER-357] ConflictResolver STANDARD verbosity + misbehaves + + [MRESOLVER-352] Duplicate METADATA_DOWNLOADING event is + being sent + * Improvement + + [MRESOLVER-360] disable checksum by default for .sigstore + in addition to .asc + * New Feature + + [MRESOLVER-370] Lock factory should dump lock states on + failure + + [MRESOLVER-353] Make aether.checksums.algorithms settable + per remote repository + * Task + + [MRESOLVER-366] Upgrade build plugins + + [MRESOLVER-364] Revert MRESOLVER-132 + + [MRESOLVER-359] Make build be explicit about build time + requirements + + [MRESOLVER-356] Remove Guava (is unused) + + [MRESOLVER-354] Document expected checksums + +------------------------------------------------------------------- +Wed May 3 10:30:23 UTC 2023 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.9.8 + * Bug + + [MRESOLVER-345] Conflict resolution in verbose mode is + sensitive to version ordering + + [MRESOLVER-348] SslConfig httpSecurityMode change is not + detected + + [MRESOLVER-339] Preemptive Auth broken when default ports used + + [MRESOLVER-325] [REGRESSION] Suddenly seeing I/O errors under + windows aborting the build + + [MRESOLVER-330] Static name mapper is unusable with file-lock + factory + + [MRESOLVER-314] Getting "IllegalArgumentException: Comparison + method violates its general contract!" + + [MRESOLVER-316] DF collector enters endless loop when + collecting org.webjars.npm:musquette:1.1.1 + + [MRESOLVER-298] javax.inject should be provided or optional + + [MRESOLVER-305] Evaluate blocked repositories also when + retrieving metadata + + [MRESOLVER-309] PrefixesRemoteRepositoryFilterSource aborts + the build while it should not + + [MRESOLVER-313] Artifact file permissions are 0600 and not + implicitly set by umask + + [MRESOLVER-296] FileProcessor.write( File, InputStream ) is + defunct + + [MRESOLVER-292] Documented and used param names mismatch + + [MRESOLVER-294] Fix JapiCmp configuration and document it + + [MRESOLVER-285] File locking on Windows knows to misbehave + + [MRESOLVER-246] m-deploy-p will create hashes for hashes + + [MRESOLVER-265] Discrepancy between produced and recognized + checksums + + [MRESOLVER-241] Resolver checksum calculation should be driven + by layout + + [MRESOLVER-242] When no remote checksums provided by layout, + transfer inevitably fails/warns + + [MRESOLVER-250] Usage of descriptors map in DataPool prevents + gargabe collection + * New Feature + + [MRESOLVER-32] Support parallel artifact/metadata uploads + + [MRESOLVER-319] Support parallel deploy + + [MRESOLVER-297] Chained LRM + + [MRESOLVER-167] Support forcing specific repositories for + artifacts + + [MRESOLVER-268] Apply artifact checksum verification for any + resolved artifact + + [MRESOLVER-274] Introduce Remote Repository Filter feature + + [MRESOLVER-275] Introduce trusted checksums source + + [MRESOLVER-276] Resolver post-processor + + [MRESOLVER-278] BREAKING: Introduce RepositorySystem shutdown + hooks + + [MRESOLVER-236] Make it possible to resolve .asc on a 'fail' + respository. + * Improvement + + [MRESOLVER-346] Too eager locking + + [MRESOLVER-347] Better connection pool configuration (reuse, + max TTL, maxPerRoute) + + [MRESOLVER-349] Adapter when locking should "give up and + retry" + + [MRESOLVER-350] Get rid of commons-lang dependency + + [MRESOLVER-327] Make tranport-http obey system properties + regarding proxy settings + + [MRESOLVER-340] Make WebDAV "dance" disabled by default + + [MRESOLVER-341] Add option for preemptive PUT Auth + + [MRESOLVER-315] Implement preemptive authentication feature + for transport-http + + [MRESOLVER-328] The transport-http should be able to ignore + cert errors + + [MRESOLVER-337] Real cause when artifact not found with + repository filtering + + [MRESOLVER-287] Get rid of deprecated finalize methods + + [MRESOLVER-317] Improvements for BF collector + + [MRESOLVER-318] Cleanup redundant code and centralize executor + handling + + [MRESOLVER-303] Make checksum detection reusable + + [MRESOLVER-290] Improve file handling resolver wide + + [MRESOLVER-7] Download dependency POMs in parallel in BF + collector + + [MRESOLVER-266] Simplify adapter creation and align + configuration for it + + [MRESOLVER-269] Allow more compact storage of provided + checksums + + [MRESOLVER-273] Create more compact File locking layout/mapper + + [MRESOLVER-284] BREAKING: Some Sisu parameters needs to be + bound + + [MRESOLVER-286] Improve basic connector closed state handling + + [MRESOLVER-240] Using breadth-first approach to resolve Maven + dependencies + + [MRESOLVER-247] Avoid unnecessary dependency resolution by a + Skip solution based on BFS + + [MRESOLVER-248] Make DF and BF collector implementations + coexist + * Task + + [MRESOLVER-326] Resolver transport-http should retry on + failures + + [MRESOLVER-331] Make DefaultTrackingFileManager write directly + to tracking files + + [MRESOLVER-333] Distinguish better resolver errors for + artifact availability + + [MRESOLVER-320] Investigate slower resolving speeds as + reported by users + + [MRESOLVER-291] Undo MRESOLVER-284 + + [MRESOLVER-279] Simplify and improve trusted checksum sources + + [MRESOLVER-281] Update configurations page with new elements + + [MRESOLVER-282] Drop PartialFile + + [MRESOLVER-230] Make supported checksum algorithms extensible + + [MRESOLVER-231] Extend “smart checksum” feature + + [MRESOLVER-234] Introduce “provided” checksums feature + + [MRESOLVER-237] Make all checksum mismatches handled same + + [MRESOLVER-239] Update and sanitize dependencies + + [MRESOLVER-244] Deprecate FileTransformer API + + [MRESOLVER-245] Isolate Hazelcast tests + * Dependency upgrade + + [MRESOLVER-311] Upgrade Parent to 39 + + [MRESOLVER-293] Update dependencies, align with Maven + + [MRESOLVER-272] Update parent POM to 37, remove plugin version + overrides, update bnd + + [MRESOLVER-280] Upgrade invoker, install, deploy, require + maven 3.8.4+ + + [MRESOLVER-251] Upgrade Redisson to 3.17.5 + + [MRESOLVER-249] Update Hazelcast to 5.1.1 in + named-locks-hazelcast module + +------------------------------------------------------------------- +Sat May 21 19:48:19 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Add an alias for the wagon connector + +------------------------------------------------------------------- +Wed Mar 30 10:13:22 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Build against the standalone JavaEE modules unconditionally + +------------------------------------------------------------------- +Sat Mar 19 13:38:39 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Remove the javax.annotation:javax.annotation-api dependency on + distribution versions that do not incorporate the JavaEE modules + +------------------------------------------------------------------- +Thu Mar 17 03:20:22 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Add the glassfish-annotation-api jar to the build classpath + +------------------------------------------------------------------- +Fri Mar 11 12:10:26 UTC 2022 - Fridrich Strba <fst...@suse.com> + +- Upgrade to upstream version 1.7.3 + * Bug ++++ 203 more lines (skipped) ++++ between /dev/null ++++ and /work/SRC/openSUSE:Factory/.maven-resolver.new.8875/maven-resolver-supplier.changes --- /work/SRC/openSUSE:Factory/maven-resolver/maven-resolver.changes 2025-06-03 17:54:43.900572090 +0200 +++ /work/SRC/openSUSE:Factory/.maven-resolver.new.8875/maven-resolver.changes 2025-07-22 12:54:41.414030726 +0200 @@ -1,0 +2,14 @@ +Tue Jul 22 07:22:59 UTC 2025 - Fridrich Strba <fst...@suse.com> + +- Update to upstream version 1.9.24 + * New features and improvements + + Metadata type out of coordinates + + RFC9457 implementation + + Intern context strings + * Maintenance + + Align plexus-util version with Maven + + Align guice version with Maven + + Enable Github Issues (1.9.x branch) +- Build also maven-resolver-supplier package in separate spec file + +------------------------------------------------------------------- Old: ---- maven-resolver-1.9.23-source-release.zip New: ---- _multibuild maven-resolver-1.9.24-source-release.zip maven-resolver-supplier.changes maven-resolver-supplier.spec pre_checkin.sh ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ maven-resolver-supplier.spec ++++++ # # spec file for package maven-resolver-supplier # # Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %global base_name maven-resolver %define _buildshell /bin/bash Name: %{base_name}-supplier Version: 1.9.24 Release: 0 Summary: Apache Maven Artifact Resolver library License: Apache-2.0 Group: Development/Libraries/Java URL: https://maven.apache.org/resolver/ Source0: https://archive.apache.org/dist/maven/resolver/%{base_name}-%{version}-source-release.zip Source1: %{base_name}-build.tar.xz BuildRequires: ant BuildRequires: atinject BuildRequires: fdupes BuildRequires: javapackages-local BuildRequires: maven-lib BuildRequires: maven-resolver-api BuildRequires: maven-resolver-connector-basic BuildRequires: maven-resolver-impl BuildRequires: maven-resolver-named-locks BuildRequires: maven-resolver-spi BuildRequires: maven-resolver-transport-file BuildRequires: maven-resolver-transport-http BuildRequires: maven-resolver-util BuildRequires: sisu-inject BuildRequires: slf4j BuildRequires: unzip BuildRequires: xmvn-install BuildRequires: xmvn-resolve BuildArch: noarch %description A helper module to provide RepositorySystem instances. %package javadoc Summary: API documentation for %{name} Group: Documentation/HTML %description javadoc This package provides %{summary}. %prep %setup -q -n %{base_name}-%{version} -a1 # requires internet connection rm maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/{HttpServer,HttpTransporterTest}.java %pom_remove_dep org.eclipse.jetty: maven-resolver-transport-http %pom_remove_plugin -r :bnd-maven-plugin %pom_remove_plugin -r org.codehaus.mojo:animal-sniffer-maven-plugin %pom_remove_plugin -r :japicmp-maven-plugin %pom_remove_plugin -r :maven-enforcer-plugin %pom_disable_module maven-resolver-demos %pom_disable_module maven-resolver-named-locks-hazelcast %pom_disable_module maven-resolver-named-locks-redisson %pom_disable_module maven-resolver-transport-classpath # generate OSGi manifests for pom in $(find -mindepth 2 -name pom.xml) ; do %pom_add_plugin "org.apache.felix:maven-bundle-plugin" $pom \ "<configuration> <instructions> <Bundle-SymbolicName>\${project.groupId}$(sed 's:./maven-resolver::;s:/pom.xml::;s:-:.:g' <<< $pom)</Bundle-SymbolicName> <Export-Package>!org.eclipse.aether.internal*,org.eclipse.aether*</Export-Package> <_nouses>true</_nouses> </instructions> </configuration> <executions> <execution> <id>create-manifest</id> <phase>process-classes</phase> <goals><goal>manifest</goal></goals> </execution> </executions>" done %pom_add_plugin "org.apache.maven.plugins:maven-jar-plugin" pom.xml \ "<configuration> <archive> <manifestFile>\${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration>" %{mvn_package} :maven-resolver __noinstall %{mvn_alias} 'org.apache.maven.resolver:maven-resolver{*}' 'org.eclipse.aether:aether@1' %{mvn_alias} 'org.apache.maven.resolver:maven-resolver-transport-wagon' 'org.eclipse.aether:aether-connector-wagon' %{mvn_file} ':%{base_name}{*}' %{base_name}/%{base_name}@1 aether/aether@1 # Try to avoid sucking in dependencies on packages that are not built at this moment %pom_remove_parent . %pom_remove_plugin :maven-jar-plugin . %build mkdir -p lib build-jar-repository -s lib \ atinject \ maven-resolver/maven-resolver-api \ maven-resolver/maven-resolver-util \ maven-resolver/maven-resolver-spi \ maven-resolver/maven-resolver-named-locks \ maven-resolver/maven-resolver-impl \ maven-resolver/maven-resolver-connector-basic \ maven-resolver/maven-resolver-transport-file \ maven-resolver/maven-resolver-transport-http \ maven/maven-resolver-provider \ maven/maven-model-builder \ org.eclipse.sisu.inject \ slf4j/api ant \ -f %{name}/build.xml \ -Dtest.skip=true \ package javadoc %{mvn_artifact} pom.xml %{mvn_artifact} %{name}/pom.xml %{name}/target/%{name}-%{version}.jar %install %mvn_install -J %{name}/target/site/apidocs %fdupes -s %{buildroot}%{_javadocdir} %files -f .mfiles %license LICENSE NOTICE %files javadoc -f .mfiles-javadoc %license LICENSE NOTICE %changelog ++++++ maven-resolver.spec ++++++ --- /var/tmp/diff_new_pack.JtvL6K/_old 2025-07-22 12:54:42.154061542 +0200 +++ /var/tmp/diff_new_pack.JtvL6K/_new 2025-07-22 12:54:42.158061708 +0200 @@ -16,22 +16,23 @@ # +%global base_name maven-resolver %define _buildshell /bin/bash -%bcond_with tests -Name: maven-resolver -Version: 1.9.23 +Name: %{base_name} +Version: 1.9.24 Release: 0 Summary: Apache Maven Artifact Resolver library License: Apache-2.0 Group: Development/Libraries/Java URL: https://maven.apache.org/resolver/ -Source0: https://archive.apache.org/dist/maven/resolver/%{name}-%{version}-source-release.zip -Source1: %{name}-build.tar.xz +Source0: https://archive.apache.org/dist/maven/resolver/%{base_name}-%{version}-source-release.zip +Source1: %{base_name}-build.tar.xz BuildRequires: ant BuildRequires: apache-commons-lang3 BuildRequires: atinject BuildRequires: fdupes BuildRequires: glassfish-annotation-api +BuildRequires: google-gson BuildRequires: google-guice BuildRequires: httpcomponents-client BuildRequires: httpcomponents-core @@ -49,13 +50,6 @@ BuildRequires: xmvn-install BuildRequires: xmvn-resolve BuildArch: noarch -%if %{with tests} -BuildRequires: ant-junit -BuildRequires: cglib -BuildRequires: mockito -BuildRequires: objenesis -BuildRequires: plexus-containers-component-annotations -%endif %description Apache Maven Artifact Resolver is a library for working with artifact @@ -149,7 +143,7 @@ This package provides %{summary}. %prep -%setup -q -a1 +%setup -q -n %{base_name}-%{version} -a1 # requires internet connection rm maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/{HttpServer,HttpTransporterTest}.java @@ -158,6 +152,7 @@ %pom_remove_plugin -r :bnd-maven-plugin %pom_remove_plugin -r org.codehaus.mojo:animal-sniffer-maven-plugin %pom_remove_plugin -r :japicmp-maven-plugin +%pom_remove_plugin -r :maven-enforcer-plugin %pom_disable_module maven-resolver-demos %pom_disable_module maven-resolver-named-locks-hazelcast @@ -193,7 +188,7 @@ %{mvn_package} :maven-resolver-{*} @1 %{mvn_alias} 'org.apache.maven.resolver:maven-resolver{*}' 'org.eclipse.aether:aether@1' %{mvn_alias} 'org.apache.maven.resolver:maven-resolver-transport-wagon' 'org.eclipse.aether:aether-connector-wagon' -%{mvn_file} ':maven-resolver{*}' %{name}/maven-resolver@1 aether/aether@1 +%{mvn_file} ':%{base_name}{*}' %{base_name}/%{base_name}@1 aether/aether@1 # Try to avoid sucking in dependencies on packages that are not built at this moment %pom_remove_parent . @@ -205,6 +200,7 @@ atinject \ commons-lang3 \ glassfish-annotation-api \ + google-gson/gson \ guice/google-guice-no_aop \ httpcomponents/httpclient \ httpcomponents/httpcore \ @@ -216,26 +212,16 @@ plexus/utils \ plexus/xml \ slf4j/api -%if %{with tests} -build-jar-repository -s lib \ - cglib/cglib \ - mockito/mockito-core \ - objenesis/objenesis \ - plexus-containers/plexus-component-annotations \ - slf4j/simple -%endif -%{ant} \ -%if %{without tests} +ant \ -Dtest.skip=true \ -%endif package javadoc %{mvn_artifact} pom.xml mkdir -p target/site/apidocs for i in api spi test-util util named-locks impl connector-basic transport-classpath transport-file transport-http transport-wagon; do - cp -r %{name}-${i}/target/site/apidocs target/site/apidocs/%{name}-${i} - %{mvn_artifact} %{name}-${i}/pom.xml %{name}-${i}/target/%{name}-${i}-%{version}.jar + cp -r %{base_name}-${i}/target/site/apidocs target/site/apidocs/%{base_name}-${i} + %{mvn_artifact} %{base_name}-${i}/pom.xml %{base_name}-${i}/target/%{base_name}-${i}-%{version}.jar done %install ++++++ _multibuild ++++++ <multibuild> <flavor>maven-resolver-supplier</flavor> </multibuild> ++++++ maven-resolver-1.9.23-source-release.zip -> maven-resolver-1.9.24-source-release.zip ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/README.md new/maven-resolver-1.9.24/README.md --- old/maven-resolver-1.9.23/README.md 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/README.md 2025-06-26 19:08:04.000000000 +0200 @@ -17,7 +17,6 @@ Contributing to [Apache Maven Artifact Resolver](https://maven.apache.org/resolver/) ====================== -[][jira] [][license] [](https://search.maven.org/artifact/org.apache.maven.resolver/maven-resolver) [](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/resolver/maven-resolver/README.md) @@ -25,7 +24,7 @@ [][test-results] -You have found a bug or you have an idea for a cool new feature? Contributing +You have found a bug, or you have an idea for a cool new feature? Contributing code is a great way to give something back to the open source community. Before you dig right into the code, there are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of @@ -34,7 +33,6 @@ Getting Started --------------- -+ Make sure you have a [JIRA account](https://issues.apache.org/jira/). + Make sure you have a [GitHub account](https://github.com/signup/free). + If you're planning to implement a new feature, it makes sense to discuss your changes on the [dev list][ml-list] first. @@ -60,37 +58,23 @@ + Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted, create a separate PR for this change. + Check for unnecessary whitespace with `git diff --check` before committing. -+ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue. -``` -[MRESOLVER-XXX] - Subject of the JIRA Ticket - Optional supplemental description. -``` + Make sure you have added the necessary tests (JUnit/IT) for your changes. + Run all the tests with `mvn -Prun-its verify` to assure nothing else was accidentally broken. + Submit a pull request to the repository in the Apache organization. -+ Update your JIRA ticket and include a link to the pull request in the ticket. If you plan to contribute on a regular basis, please consider filing a [contributor license agreement][cla]. -Making Trivial Changes ----------------------- - -For changes of a trivial nature to comments and documentation, it is not always -necessary to create a new ticket in JIRA. In this case, it is appropriate to -start the first line of a commit with '(doc)' instead of a ticket number. - Additional Resources -------------------- + [Contributing patches](https://maven.apache.org/guides/development/guide-maven-development.html#Creating_and_submitting_a_patch) -+ [Apache Maven Artifact Resolver project page][jira] + [Contributor License Agreement][cla] + [General GitHub documentation](https://help.github.com/) + [GitHub pull request documentation](https://help.github.com/send-pull-requests/) -+ [Apache Maven Twitter Account](https://twitter.com/ASFMavenProject) -+ #Maven IRC channel on freenode.org ++ [Apache Maven X Account](https://x.com/ASFMavenProject) ++ [Apache Maven Bluesky Account](https://bsky.app/profile/maven.apache.org) ++ [Apache Maven Mastodon Account](https://mastodon.social/deck/@asfmavenproj...@fosstodon.org) -[jira]: https://issues.apache.org/jira/projects/MRESOLVER/ [license]: https://www.apache.org/licenses/LICENSE-2.0 [ml-list]: https://maven.apache.org/mailing-lists.html [code-style]: https://maven.apache.org/developers/conventions/code.html diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/pom.xml new/maven-resolver-1.9.24/maven-resolver-api/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-api/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-api</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/collection/CollectRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/collection/CollectRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/collection/CollectRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/collection/CollectRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -284,7 +284,7 @@ * @return This request for chaining, never {@code null}. */ public CollectRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/graph/DefaultDependencyNode.java 2025-06-26 19:08:04.000000000 +0200 @@ -251,7 +251,7 @@ } public void setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; } public Map<Object, Object> getData() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalArtifactRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalArtifactRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalArtifactRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalArtifactRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -93,7 +93,7 @@ * @return This query for chaining, never {@code null}. */ public LocalArtifactRequest setContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalMetadataRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalMetadataRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalMetadataRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/repository/LocalMetadataRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -89,7 +89,7 @@ * @return This query for chaining, never {@code null}. */ public LocalMetadataRequest setContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorPolicyRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorPolicyRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorPolicyRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorPolicyRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -85,7 +85,7 @@ * @return This request for chaining, never {@code null}. */ public ArtifactDescriptorPolicyRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactDescriptorRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -138,7 +138,7 @@ * @return This request for chaining, never {@code null}. */ public ArtifactDescriptorRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/ArtifactRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -176,7 +176,7 @@ * @return This request for chaining, never {@code null}. */ public ArtifactRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/MetadataRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/MetadataRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/MetadataRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/MetadataRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -129,7 +129,7 @@ * @return This request for chaining, never {@code null}. */ public MetadataRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRangeRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRangeRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRangeRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRangeRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -138,7 +138,7 @@ * @return This request for chaining, never {@code null}. */ public VersionRangeRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRequest.java new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRequest.java --- old/maven-resolver-1.9.23/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRequest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-api/src/main/java/org/eclipse/aether/resolution/VersionRequest.java 2025-06-26 19:08:04.000000000 +0200 @@ -138,7 +138,7 @@ * @return This request for chaining, never {@code null}. */ public VersionRequest setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-connector-basic/pom.xml new/maven-resolver-1.9.24/maven-resolver-connector-basic/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-connector-basic/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-connector-basic/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-connector-basic</artifactId> @@ -62,6 +62,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>test</scope> </dependency> <dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-demos/maven-resolver-demo-maven-plugin/pom.xml new/maven-resolver-1.9.24/maven-resolver-demos/maven-resolver-demo-maven-plugin/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-demos/maven-resolver-demo-maven-plugin/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-demos/maven-resolver-demo-maven-plugin/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver-demos</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>resolver-demo-maven-plugin</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml new/maven-resolver-1.9.24/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver-demos</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-demo-snippets</artifactId> @@ -86,6 +86,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <optional>true</optional> </dependency> <dependency> @@ -98,11 +99,6 @@ <scope>runtime</scope> </dependency> <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-xml</artifactId> - <scope>test</scope> - </dependency> - <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-demos/pom.xml new/maven-resolver-1.9.24/maven-resolver-demos/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-demos/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-demos/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-demos</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-impl/pom.xml new/maven-resolver-1.9.24/maven-resolver-impl/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-impl/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-impl/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-impl</artifactId> @@ -76,6 +76,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>provided</scope> <optional>true</optional> </dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalPathComposer.java new/maven-resolver-1.9.24/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalPathComposer.java --- old/maven-resolver-1.9.23/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalPathComposer.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalPathComposer.java 2025-06-26 19:08:04.000000000 +0200 @@ -89,13 +89,19 @@ } private String insertRepositoryKey(String metadataType, String repositoryKey) { - String result; - int idx = metadataType.indexOf('.'); - if (idx < 0) { - result = metadataType + '-' + repositoryKey; + if (metadataType.contains("/") && !metadataType.endsWith("/")) { + int lastSlash = metadataType.lastIndexOf('/'); + return metadataType.substring(0, lastSlash + 1) + + insertRepositoryKey(metadataType.substring(lastSlash + 1), repositoryKey); } else { - result = metadataType.substring(0, idx) + '-' + repositoryKey + metadataType.substring(idx); + String result; + int idx = metadataType.indexOf('.'); + if (idx < 0) { + result = metadataType + '-' + repositoryKey; + } else { + result = metadataType.substring(0, idx) + '-' + repositoryKey + metadataType.substring(idx); + } + return result; } - return result; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-named-locks/pom.xml new/maven-resolver-1.9.24/maven-resolver-named-locks/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-named-locks/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-named-locks/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-named-locks</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-named-locks-hazelcast/pom.xml new/maven-resolver-1.9.24/maven-resolver-named-locks-hazelcast/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-named-locks-hazelcast/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-named-locks-hazelcast/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-named-locks-hazelcast</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-named-locks-redisson/pom.xml new/maven-resolver-1.9.24/maven-resolver-named-locks-redisson/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-named-locks-redisson/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-named-locks-redisson/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-named-locks-redisson</artifactId> @@ -45,7 +45,7 @@ <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> - <version>3.46.0</version> + <version>3.50.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-spi/pom.xml new/maven-resolver-1.9.24/maven-resolver-spi/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-spi/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-spi/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-spi</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/ArtifactDownload.java new/maven-resolver-1.9.24/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/ArtifactDownload.java --- old/maven-resolver-1.9.23/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/ArtifactDownload.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/ArtifactDownload.java 2025-06-26 19:08:04.000000000 +0200 @@ -143,7 +143,7 @@ * @return This transfer for chaining, never {@code null}. */ public ArtifactDownload setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/MetadataDownload.java new/maven-resolver-1.9.24/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/MetadataDownload.java --- old/maven-resolver-1.9.23/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/MetadataDownload.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-spi/src/main/java/org/eclipse/aether/spi/connector/MetadataDownload.java 2025-06-26 19:08:04.000000000 +0200 @@ -110,7 +110,7 @@ * @return This transfer for chaining, never {@code null}. */ public MetadataDownload setRequestContext(String context) { - this.context = (context != null) ? context : ""; + this.context = (context != null) ? context.intern() : ""; return this; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-supplier/pom.xml new/maven-resolver-1.9.24/maven-resolver-supplier/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-supplier/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-supplier/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-supplier</artifactId> @@ -102,11 +102,6 @@ </dependency> <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-xml</artifactId> - <scope>test</scope> - </dependency> - <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <scope>test</scope> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-test-util/pom.xml new/maven-resolver-1.9.24/maven-resolver-test-util/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-test-util/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-test-util/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-test-util</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-classpath/pom.xml new/maven-resolver-1.9.24/maven-resolver-transport-classpath/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-transport-classpath/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-classpath/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-transport-classpath</artifactId> @@ -53,6 +53,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>test</scope> </dependency> <dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-file/pom.xml new/maven-resolver-1.9.24/maven-resolver-transport-file/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-transport-file/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-file/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-transport-file</artifactId> @@ -49,6 +49,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>test</scope> </dependency> <dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/pom.xml new/maven-resolver-1.9.24/maven-resolver-transport-http/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-transport-http/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-transport-http</artifactId> @@ -49,6 +49,11 @@ <artifactId>maven-resolver-util</artifactId> </dependency> <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>2.13.1</version> + </dependency> + <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> @@ -91,6 +96,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>test</scope> </dependency> <dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java 2025-06-26 19:08:04.000000000 +0200 @@ -95,6 +95,8 @@ import org.eclipse.aether.spi.connector.transport.TransportTask; import org.eclipse.aether.transfer.NoTransporterException; import org.eclipse.aether.transfer.TransferCancelledException; +import org.eclipse.aether.transport.http.RFC9457.HttpRFC9457Exception; +import org.eclipse.aether.transport.http.RFC9457.RFC9457Reporter; import org.eclipse.aether.util.ConfigUtils; import org.eclipse.aether.util.FileUtils; import org.slf4j.Logger; @@ -380,6 +382,10 @@ private static HttpHost toHost(Proxy proxy) { HttpHost host = null; if (proxy != null) { + // in Maven, the proxy.protocol is used for proxy matching against remote repository protocol; no TLS proxy + // support + // https://github.com/apache/maven/issues/2519 + // https://github.com/apache/maven-resolver/issues/745 host = new HttpHost(proxy.getHost(), proxy.getPort()); } return host; @@ -624,9 +630,12 @@ } } - private void handleStatus(CloseableHttpResponse response) throws HttpResponseException { + private void handleStatus(CloseableHttpResponse response) throws HttpResponseException, HttpRFC9457Exception { int status = response.getStatusLine().getStatusCode(); if (status >= 300) { + if (RFC9457Reporter.INSTANCE.isRFC9457Message(response)) { + RFC9457Reporter.INSTANCE.generateException(response); + } throw new HttpResponseException(status, response.getStatusLine().getReasonPhrase() + " (" + status + ")"); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/HttpRFC9457Exception.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/HttpRFC9457Exception.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/HttpRFC9457Exception.java 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/HttpRFC9457Exception.java 2025-06-26 19:08:04.000000000 +0200 @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.eclipse.aether.transport.http.RFC9457; + +import java.io.IOException; + +/** + * Exception thrown by {@code HttpTransporter} in case of errors. + * + * @since 1.9.24 + */ +public class HttpRFC9457Exception extends IOException { + private final int statusCode; + + private final String reasonPhrase; + + private final RFC9457Payload payload; + + public HttpRFC9457Exception(int statusCode, String reasonPhrase, RFC9457Payload payload) { + super(payload.toString()); + this.statusCode = statusCode; + this.reasonPhrase = reasonPhrase; + this.payload = payload; + } + + public int getStatusCode() { + return statusCode; + } + + public String getReasonPhrase() { + return reasonPhrase; + } + + public RFC9457Payload getPayload() { + return payload; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Parser.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Parser.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Parser.java 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Parser.java 2025-06-26 19:08:04.000000000 +0200 @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.eclipse.aether.transport.http.RFC9457; + +import java.lang.reflect.Type; +import java.net.URI; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +public class RFC9457Parser { + private static final Gson GSON = new GsonBuilder() + .registerTypeAdapter(RFC9457Payload.class, new RFC9457PayloadAdapter()) + .create(); + + public static RFC9457Payload parse(String data) { + return GSON.fromJson(data, RFC9457Payload.class); + } + + private static class RFC9457PayloadAdapter implements JsonDeserializer<RFC9457Payload> { + @Override + public RFC9457Payload deserialize( + final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) + throws JsonParseException { + JsonObject asJsonObject = json.getAsJsonObject(); + URI type = parseNullableURI(asJsonObject, "type", "about:blank"); + Integer status = parseStatus(asJsonObject); + String title = parseNullableString(asJsonObject, "title"); + String detail = parseNullableString(asJsonObject, "detail"); + URI instance = parseNullableURI(asJsonObject, "instance", null); + return new RFC9457Payload(type, status, title, detail, instance); + } + } + + private static Integer parseStatus(JsonObject jsonObject) { + return jsonObject.get("status") == null || jsonObject.get("status").isJsonNull() + ? null + : jsonObject.get("status").getAsInt(); + } + + private static String parseNullableString(JsonObject jsonObject, String key) { + return jsonObject.get(key) == null || jsonObject.get(key).isJsonNull() + ? null + : jsonObject.get(key).getAsString(); + } + + private static URI parseNullableURI(JsonObject jsonObject, String key, String defaultValue) { + return !jsonObject.has(key) || jsonObject.get(key).isJsonNull() + ? defaultValue != null ? URI.create(defaultValue) : null + : URI.create(jsonObject.get(key).getAsString()); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Payload.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Payload.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Payload.java 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Payload.java 2025-06-26 19:08:04.000000000 +0200 @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.eclipse.aether.transport.http.RFC9457; + +import java.net.URI; + +public class RFC9457Payload { + public static final RFC9457Payload INSTANCE = new RFC9457Payload(); + + private final URI type; + + private final Integer status; + + private final String title; + + private final String detail; + + private final URI instance; + + private RFC9457Payload() { + this(null, null, null, null, null); + } + + public RFC9457Payload( + final URI type, final Integer status, final String title, final String detail, final URI instance) { + this.type = type; + this.status = status; + this.title = title; + this.detail = detail; + this.instance = instance; + } + + public URI getType() { + return type; + } + + public Integer getStatus() { + return status; + } + + public String getTitle() { + return title; + } + + public String getDetail() { + return detail; + } + + public URI getInstance() { + return instance; + } + + @Override + public String toString() { + return "RFC9457Payload {" + "type=" + + type + ", status=" + + status + ", title='" + + title + ", detail='" + + detail + ", instance=" + + instance + '}'; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Reporter.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Reporter.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Reporter.java 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/RFC9457/RFC9457Reporter.java 2025-06-26 19:08:04.000000000 +0200 @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.eclipse.aether.transport.http.RFC9457; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import org.apache.http.Header; +import org.apache.http.HttpHeaders; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.util.EntityUtils; + +public class RFC9457Reporter { + public static final RFC9457Reporter INSTANCE = new RFC9457Reporter(); + + public boolean isRFC9457Message(CloseableHttpResponse response) { + Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE); + if (headers.length > 0) { + String contentType = headers[0].getValue(); + return hasRFC9457ContentType(contentType); + } + return false; + } + + public void generateException(CloseableHttpResponse response) throws HttpRFC9457Exception { + int statusCode = getStatusCode(response); + String reasonPhrase = getReasonPhrase(response); + + String body; + try { + body = getBody(response); + } catch (IOException ignore) { + // No body found but it is representing a RFC 9457 message due to the content type. + throw new HttpRFC9457Exception(statusCode, reasonPhrase, RFC9457Payload.INSTANCE); + } + + if (body != null && !body.isEmpty()) { + RFC9457Payload rfc9457Payload = RFC9457Parser.parse(body); + throw new HttpRFC9457Exception(statusCode, reasonPhrase, rfc9457Payload); + } + throw new HttpRFC9457Exception(statusCode, reasonPhrase, RFC9457Payload.INSTANCE); + } + + private String getBody(final CloseableHttpResponse response) throws IOException { + return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + } + + private int getStatusCode(final CloseableHttpResponse response) { + return response.getStatusLine().getStatusCode(); + } + + private String getReasonPhrase(final CloseableHttpResponse response) { + String reasonPhrase = response.getStatusLine().getReasonPhrase(); + if (reasonPhrase == null || reasonPhrase.isEmpty()) { + return ""; + } + int statusCode = getStatusCode(response); + return reasonPhrase + " (" + statusCode + ")"; + } + + private boolean hasRFC9457ContentType(String contentType) { + return "application/problem+json".equals(contentType); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java 2025-06-26 19:08:04.000000000 +0200 @@ -25,6 +25,9 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.net.URI; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; @@ -35,6 +38,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.google.gson.Gson; +import org.eclipse.aether.transport.http.RFC9457.RFC9457Payload; import org.eclipse.aether.util.ChecksumUtils; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; @@ -116,7 +121,7 @@ private final AtomicInteger connectionsToClose = new AtomicInteger(0); - private List<LogEntry> logEntries = Collections.synchronizedList(new ArrayList<>()); + private final List<LogEntry> logEntries = Collections.synchronizedList(new ArrayList<>()); public String getHost() { return "localhost"; @@ -229,6 +234,7 @@ handlers.addHandler(new AuthHandler()); handlers.addHandler(new RedirectHandler()); handlers.addHandler(new RepoHandler()); + handlers.addHandler(new RFC9457Handler()); server = new Server(); httpConnector = new ServerConnector(server); @@ -278,7 +284,7 @@ } headers.put(name, buffer.toString()); } - logEntries.add(new LogEntry(req.getMethod(), req.getPathInfo(), Collections.unmodifiableMap(headers))); + logEntries.add(new LogEntry(req.getMethod(), req.getOriginalURI(), Collections.unmodifiableMap(headers))); } } @@ -478,6 +484,46 @@ } } + private class RFC9457Handler extends AbstractHandler { + @Override + public void handle( + final String target, + final Request req, + final HttpServletRequest request, + final HttpServletResponse response) + throws IOException { + String path = req.getPathInfo().substring(1); + + if (!path.startsWith("rfc9457/")) { + return; + } + req.setHandled(true); + + if (HttpMethod.GET.is(req.getMethod())) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + response.setHeader(HttpHeader.CONTENT_TYPE.asString(), "application/problem+json"); + RFC9457Payload rfc9457Payload; + if (path.endsWith("missing_fields.txt")) { + rfc9457Payload = new RFC9457Payload(null, null, null, null, null); + } else { + rfc9457Payload = new RFC9457Payload( + URI.create("https://example.com/probs/out-of-credit"), + HttpServletResponse.SC_FORBIDDEN, + "You do not have enough credit.", + "Your current balance is 30, but that costs 50.", + URI.create("/account/12345/msgs/abc")); + } + try (OutputStream outputStream = response.getOutputStream()) { + outputStream.write(buildRFC9457Message(rfc9457Payload).getBytes(StandardCharsets.UTF_8)); + } + } + } + } + + private String buildRFC9457Message(RFC9457Payload payload) { + return new Gson().toJson(payload, RFC9457Payload.class); + } + static boolean checkBasicAuth(String credentials, String username, String password) { if (credentials != null) { int space = credentials.indexOf(' '); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java 2025-06-26 19:08:04.000000000 +0200 @@ -49,6 +49,7 @@ import org.eclipse.aether.spi.connector.transport.TransporterFactory; import org.eclipse.aether.transfer.NoTransporterException; import org.eclipse.aether.transfer.TransferCancelledException; +import org.eclipse.aether.transport.http.RFC9457.HttpRFC9457Exception; import org.eclipse.aether.util.repository.AuthenticationBuilder; import org.junit.After; import org.junit.Before; @@ -1246,4 +1247,36 @@ newTransporter("HTTPS://localhost"); newTransporter("HttpS://localhost"); } + + @Test + public void testGetRFC9457Response() throws Exception { + try { + transporter.get(new GetTask(URI.create("rfc9457/file.txt"))); + fail("Expected error"); + } catch (HttpRFC9457Exception e) { + assertEquals(403, e.getStatusCode()); + assertEquals(e.getPayload().getType(), URI.create("https://example.com/probs/out-of-credit")); + assertEquals(403, e.getPayload().getStatus().intValue()); + assertEquals("You do not have enough credit.", e.getPayload().getTitle()); + assertEquals( + "Your current balance is 30, but that costs 50.", + e.getPayload().getDetail()); + assertEquals(e.getPayload().getInstance(), URI.create("/account/12345/msgs/abc")); + } + } + + @Test + public void testGetRFC9457ResponseWithMissingFields() throws Exception { + try { + transporter.get(new GetTask(URI.create("rfc9457/missing_fields.txt"))); + fail("Expected error"); + } catch (HttpRFC9457Exception e) { + assertEquals(403, e.getStatusCode()); + assertEquals(e.getPayload().getType(), URI.create("about:blank")); + assertNull(e.getPayload().getStatus()); + assertNull(e.getPayload().getTitle()); + assertNull(e.getPayload().getDetail()); + assertNull(e.getPayload().getInstance()); + } + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/RFC9457/RFC9457ParserTest.java new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/RFC9457/RFC9457ParserTest.java --- old/maven-resolver-1.9.23/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/RFC9457/RFC9457ParserTest.java 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-1.9.24/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/RFC9457/RFC9457ParserTest.java 2025-06-26 19:08:04.000000000 +0200 @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.eclipse.aether.transport.http.RFC9457; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class RFC9457ParserTest { + + @Test + public void testParseAllFields() { + String data = + "{\"type\":\"https://example.com/error\",\"status\":400,\"title\":\"Bad Request\",\"detail\":\"The request could not be understood by the server due to malformed syntax.\",\"instance\":\"https://example.com/error/400\"}"; + RFC9457Payload payload = RFC9457Parser.parse(data); + + assertEquals("https://example.com/error", payload.getType().toString()); + assertEquals(400, payload.getStatus().intValue()); + assertEquals("Bad Request", payload.getTitle()); + assertEquals("The request could not be understood by the server due to malformed syntax.", payload.getDetail()); + assertEquals("https://example.com/error/400", payload.getInstance().toString()); + } + + @Test + public void testParseWithMissingFields() { + String data = "{\"type\":\"https://example.com/other_error\",\"status\":403}"; + RFC9457Payload payload = RFC9457Parser.parse(data); + + assertEquals("https://example.com/other_error", payload.getType().toString()); + assertEquals(403, payload.getStatus().intValue()); + assertNull(payload.getTitle()); + assertNull(payload.getDetail()); + assertNull(payload.getInstance()); + } + + @Test + public void testParseWithNoFields() { + String data = "{}"; + RFC9457Payload payload = RFC9457Parser.parse(data); + + assertEquals("about:blank", payload.getType().toString()); + assertNull(payload.getStatus()); + assertNull(payload.getTitle()); + assertNull(payload.getDetail()); + assertNull(payload.getInstance()); + } + + @Test + public void testParseWithNullFields() { + String data = "{\"type\":null,\"status\":null,\"title\":null,\"detail\":null,\"instance\":null}"; + RFC9457Payload payload = RFC9457Parser.parse(data); + + assertEquals("about:blank", payload.getType().toString()); + assertNull(payload.getStatus()); + assertNull(payload.getTitle()); + assertNull(payload.getDetail()); + assertNull(payload.getInstance()); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-transport-wagon/pom.xml new/maven-resolver-1.9.24/maven-resolver-transport-wagon/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-transport-wagon/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-transport-wagon/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-transport-wagon</artifactId> @@ -67,11 +67,6 @@ <optional>true</optional> </dependency> <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-xml</artifactId> - <optional>true</optional> - </dependency> - <dependency> <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.plexus</artifactId> <optional>true</optional> @@ -79,6 +74,7 @@ <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> + <classifier>classes</classifier> <scope>test</scope> </dependency> <dependency> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/maven-resolver-util/pom.xml new/maven-resolver-1.9.24/maven-resolver-util/pom.xml --- old/maven-resolver-1.9.23/maven-resolver-util/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/maven-resolver-util/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> </parent> <artifactId>maven-resolver-util</artifactId> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-1.9.23/pom.xml new/maven-resolver-1.9.24/pom.xml --- old/maven-resolver-1.9.23/pom.xml 2025-05-05 19:56:42.000000000 +0200 +++ new/maven-resolver-1.9.24/pom.xml 2025-06-26 19:08:04.000000000 +0200 @@ -23,13 +23,13 @@ <parent> <groupId>org.apache.maven</groupId> <artifactId>maven-parent</artifactId> - <version>44</version> + <version>45</version> <relativePath /> </parent> <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver</artifactId> - <version>1.9.23</version> + <version>1.9.24</version> <packaging>pom</packaging> <name>Maven Artifact Resolver</name> @@ -65,12 +65,12 @@ <scm> <connection>scm:git:https://gitbox.apache.org/repos/asf/maven-resolver.git</connection> <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-resolver.git</developerConnection> - <tag>maven-resolver-1.9.23</tag> + <tag>maven-resolver-1.9.24</tag> <url>https://github.com/apache/maven-resolver/tree/${project.scm.tag}</url> </scm> <issueManagement> - <system>jira</system> - <url>https://issues.apache.org/jira/browse/MRESOLVER</url> + <system>GitHub Issues</system> + <url>https://github.com/apache/maven-resolver/issues</url> </issueManagement> <ciManagement> <system>Jenkins</system> @@ -89,14 +89,15 @@ <failsafe.redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</failsafe.redirectTestOutputToFile> <maven.site.path>resolver-archives/resolver-LATEST-1.x</maven.site.path> <checkstyle.violation.ignore>None</checkstyle.violation.ignore> - <sisuVersion>0.9.0.M3</sisuVersion> - <guiceVersion>6.0.0</guiceVersion> + <sisuVersion>0.9.0.M4</sisuVersion> + <!-- the same version as in Maven 3.9.x --> + <guiceVersion>5.1.0</guiceVersion> <slf4jVersion>1.7.36</slf4jVersion> <!-- used by supplier and demo only --> - <mavenVersion>3.9.9</mavenVersion> + <mavenVersion>3.9.10</mavenVersion> <minimalMavenBuildVersion>[3.8.7,)</minimalMavenBuildVersion> <minimalJavaBuildVersion>[1.8.0-362,)</minimalJavaBuildVersion> - <project.build.outputTimestamp>2025-05-05T19:56:41Z</project.build.outputTimestamp> + <project.build.outputTimestamp>2025-06-26T19:08:04Z</project.build.outputTimestamp> <bnd.instructions.additions /> </properties> @@ -192,12 +193,8 @@ <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> - <version>4.0.2</version> - </dependency> - <dependency> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-xml</artifactId> - <version>3.0.2</version> + <!-- the same version as in Maven 3.9,x --> + <version>3.6.0</version> </dependency> <dependency> @@ -216,17 +213,12 @@ <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.plexus</artifactId> <version>${sisuVersion}</version> - <exclusions> - <exclusion> - <groupId>javax.enterprise</groupId> - <artifactId>cdi-api</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>${guiceVersion}</version> + <classifier>classes</classifier> </dependency> <dependency> <groupId>com.google.guava</groupId> @@ -509,6 +501,38 @@ </pluginManagement> <plugins> <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <executions> + <execution> + <id>ensure-no-guice-with-asm</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <bannedDependencies> + <excludes> + <!-- we use com.google.inject:classes:guice --> + <exclude>com.google.inject:guice:*</exclude> + </excludes> + <includes> + <include>com.google.inject:guice:*:jar:*:classes</include> + </includes> + <message>use guice without asm shaded in.</message> + </bannedDependencies> + <bannedDependencies> + <excludes> + <exclude>org.codehaus.plexus:plexus-xml</exclude> + </excludes> + <message>plexus-xml should not be used with plexus-util 3.6.0</message> + </bannedDependencies> + </rules> + </configuration> + </execution> + </executions> + </plugin> + <plugin> <groupId>biz.aQute.bnd</groupId> <artifactId>bnd-maven-plugin</artifactId> <executions> ++++++ maven-resolver-build.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/common.xml new/common.xml --- old/common.xml 2025-05-11 06:19:27.569424682 +0200 +++ new/common.xml 2025-06-27 06:45:25.048129550 +0200 @@ -3,7 +3,7 @@ <project name="common" basedir="."> <property file="build.properties"/> - <property name="project.version" value="1.9.23"/> + <property name="project.version" value="1.9.24"/> <property name="project.groupId" value="org.apache.maven.resolver"/> <property name="project.url" value="https://maven.apache.org/resolver/"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/maven-resolver-supplier/build.xml new/maven-resolver-supplier/build.xml --- old/maven-resolver-supplier/build.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/maven-resolver-supplier/build.xml 2025-07-01 09:21:22.622911134 +0200 @@ -0,0 +1,280 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<project name="maven-resolver-supplier" default="package" basedir="."> + + <!-- ====================================================================== --> + <!-- Build environment properties --> + <!-- ====================================================================== --> + + <include file="../common.xml"/> + <property file="build.properties"/> + + <property name="project.artifactId" value="maven-resolver-supplier"/> + <property name="project.name" value="Maven Artifact Resolver Instance Supplier"/> + <property name="project.description" + value="A helper module to provide RepositorySystem instances."/> + + <property name="build.finalName" value="${project.artifactId}-${project.version}"/> + <property name="build.dir" value="target"/> + <property name="build.outputDir" value="${build.dir}/classes"/> + <property name="build.srcDir" value="src/main/java"/> + <property name="build.resourceDir" value="src/main/resources"/> + <property name="build.testOutputDir" value="${build.dir}/test-classes"/> + <property name="build.testDir" value="src/test/java"/> + <property name="build.testResourceDir" value="src/test/resources"/> + <property name="test.reports" value="${build.dir}/test-reports"/> + <property name="reporting.outputDirectory" value="${build.dir}/site"/> + + <!-- ====================================================================== --> + <!-- Defining classpaths --> + <!-- ====================================================================== --> + + <path id="build.classpath"> + <pathelement location="../maven-resolver-api/target/classes"/> + <pathelement location="../maven-resolver-util/target/classes"/> + <pathelement location="../maven-resolver-spi/target/classes"/> + <pathelement location="../maven-resolver-named-locks/target/classes"/> + <pathelement location="../maven-resolver-impl/target/classes"/> + <pathelement location="../maven-resolver-connector-basic/target/classes"/> + <pathelement location="../maven-resolver-transport-file/target/classes"/> + <pathelement location="../maven-resolver-transport-http/target/classes"/> + <fileset dir="../lib"> + <include name="**/*.jar"/> + </fileset> + </path> + <path id="build.test.classpath"> + <pathelement location="../maven-resolver-api/target/classes"/> + <pathelement location="../maven-resolver-util/target/classes"/> + <pathelement location="../maven-resolver-spi/target/classes"/> + <pathelement location="../maven-resolver-named-locks/target/classes"/> + <pathelement location="../maven-resolver-impl/target/classes"/> + <pathelement location="../maven-resolver-connector-basic/target/classes"/> + <pathelement location="../maven-resolver-transport-file/target/classes"/> + <pathelement location="../maven-resolver-transport-http/target/classes"/> + <fileset dir="../lib"> + <include name="**/*.jar"/> + </fileset> + </path> + + <!-- ====================================================================== --> + <!-- Cleaning up target --> + <!-- ====================================================================== --> + + <target name="clean" description="Clean the output directory"> + <delete dir="${build.dir}"/> + </target> + + <!-- ====================================================================== --> + <!-- Compilation target --> + <!-- ====================================================================== --> + + <target name="compile" description="Compile the code"> + <mkdir dir="${build.outputDir}"/> + <javac destdir="${build.outputDir}" + nowarn="false" + encoding="utf-8" + debug="true" + optimize="false" + deprecation="true" + release="${compiler.release}" + target="${compiler.target}" + verbose="false" + fork="false" + source="${compiler.source}"> + <src> + <pathelement location="${build.srcDir}"/> + </src> + <classpath refid="build.classpath"/> + </javac> + </target> + + <!-- ====================================================================== --> + <!-- Test-compilation target --> + <!-- ====================================================================== --> + + <target name="compile-tests" + depends="compile" + description="Compile the test code" + unless="test.skip"> + <mkdir dir="${build.testOutputDir}"/> + <javac destdir="${build.testOutputDir}" + nowarn="false" + encoding="utf-8" + debug="true" + optimize="false" + deprecation="true" + release="${compiler.release}" + target="${compiler.target}" + verbose="false" + fork="false" + source="${compiler.source}"> + <src> + <pathelement location="${build.testDir}"/> + </src> + <classpath> + <path refid="build.test.classpath"/> + <pathelement location="${build.outputDir}"/> + </classpath> + </javac> + </target> + + <!-- ====================================================================== --> + <!-- Run all tests --> + <!-- ====================================================================== --> + + <target name="test" + depends="compile-tests, junit-missing" + unless="junit.skipped" + description="Run the test cases"> + <mkdir dir="${test.reports}"/> + <junit printSummary="yes" haltonerror="true" haltonfailure="true" fork="true" dir="."> + <sysproperty key="basedir" value="."/> + <formatter type="xml"/> + <formatter type="plain" usefile="false"/> + <classpath> + <path refid="build.test.classpath"/> + <pathelement location="${build.outputDir}"/> + <pathelement location="${build.testOutputDir}"/> + </classpath> + <batchtest todir="${test.reports}" unless="test"> + <fileset dir="${build.testDir}"> + <include name="**/Test*.java"/> + <include name="**/*Test.java"/> + <include name="**/*TestCase.java"/> + <exclude name="**/*Abstract*Test.java"/> + </fileset> + </batchtest> + <batchtest todir="${test.reports}" if="test"> + <fileset dir="${build.testDir}"> + <include name="**/${test}.java"/> + <exclude name="**/*Abstract*Test.java"/> + </fileset> + </batchtest> + </junit> + </target> + + <target name="test-junit-present"> + <available classname="junit.framework.Test" property="junit.present" classpathref="build.test.classpath"/> + </target> + + <target name="test-junit-status" + depends="test-junit-present"> + <condition property="junit.missing"> + <and> + <isfalse value="${junit.present}"/> + <isfalse value="${test.skip}"/> + </and> + </condition> + <condition property="junit.skipped"> + <or> + <isfalse value="${junit.present}"/> + <istrue value="${test.skip}"/> + </or> + </condition> + </target> + + <target name="junit-missing" + depends="test-junit-status" + if="junit.missing"> + <echo>=================================== WARNING ===================================</echo> + <echo> JUnit is not present in the test classpath or your $ANT_HOME/lib directory. Tests not executed.</echo> + <echo>===============================================================================</echo> + </target> + + <!-- ====================================================================== --> + <!-- Javadoc target --> + <!-- ====================================================================== --> + + <target name="javadoc" description="Generates the Javadoc of the application"> + <javadoc sourcepath="${build.srcDir}" + packagenames="*" + destdir="${reporting.outputDirectory}/apidocs" + access="protected" + source="${compiler.source}" + verbose="false" + locale="en" + version="true" + use="true" + author="true" + splitindex="false" + nodeprecated="false" + nodeprecatedlist="false" + notree="false" + noindex="false" + nohelp="false" + nonavbar="false" + serialwarn="false" + encoding="UTF-8" + linksource="true" + breakiterator="false"> + <classpath refid="build.classpath"/> + <group title="API"/> + <group title="SPI"/> + <group title="Utilities"/> + <group title="Repository Connectors"/> + <group title="Transporters"/> + <group title="Implementation"/> + <group title="Demo Maven Plugin"/> + <group title="Demo Snippets"/> + <group title="Internals"/> + <tag name="noextend" + scope="all" + description="Restriction:"/> + <tag name="noimplement" + scope="all" + description="Restriction:"/> + <tag name="noinstantiate" + scope="all" + description="Restriction:"/> + <tag name="nooverride" + scope="all" + description="Restriction:"/> + <tag name="noreference" + scope="all" + description="Restriction:"/> + <tag name="provisional" + scope="all" + description="Provisional:"/> + </javadoc> + </target> + + <!-- ====================================================================== --> + <!-- Package target --> + <!-- ====================================================================== --> + + <target name="package" depends="compile,test" description="Package the application"> + <jar jarfile="${build.dir}/${build.finalName}.jar" + compress="true" + index="false" + basedir="${build.outputDir}" + excludes="**/package.html"> + <manifest> + <attribute name="Automatic-Module-Name" value="${project.groupId}.supplier"/> + <attribute name="Bundle-Description" value="${project.description}"/> + <attribute name="Bundle-DocURL" value="${project.url}${project.artifactId}/"/> + <attribute name="Bundle-License" value="https://www.apache.org/licenses/LICENSE-2.0.txt"/> + <attribute name="Bundle-ManifestVersion" value="2"/> + <attribute name="Bundle-Name" value="${project.name}"/> + <attribute name="Bundle-SymbolicName" value="${project.groupId}.supplier"/> + <attribute name="Bundle-Vendor" value="${project.organization.name}"/> + <attribute name="Bundle-Version" value="${project.version}"/> + <attribute name="Export-Package" value="org.eclipse.aether.supplier;uses:="org.apache.maven.model.building,org.apache.maven.repository.internal,org.eclipse.aether,org.eclipse.aether.connector.basic,org.eclipse.aether.impl,org.eclipse.aether.internal.impl,org.eclipse.aether.internal.impl.collect,org.eclipse.aether.internal.impl.synccontext.named,org.eclipse.aether.named,org.eclipse.aether.spi.checksums,org.eclipse.aether.spi.connector,org.eclipse.aether.spi.connector.checksum,org.eclipse.aether.spi.connector.filter,org.eclipse.aether.spi.connector.layout,org.eclipse.aether.spi.connector.transport,org.eclipse.aether.spi.io,org.eclipse.aether.spi.resolution,org.eclipse.aether.spi.synccontext,org.eclipse.aether.transport.http";version="${project.version}""/> + <attribute name="Implementation-Title" value="${project.name}"/> + <attribute name="Implementation-URL" value="${project.url}${project.artifactId}/"/> + <attribute name="Implementation-Vendor" value="${project.organization.name}"/> + <attribute name="Implementation-Vendor-Id" value="${project.groupId}"/> + <attribute name="Implementation-Version" value="${project.version}"/> + <attribute name="Import-Package" value="org.apache.maven.model.building,org.apache.maven.repository.internal,org.eclipse.aether.connector.basic,org.eclipse.aether.impl,org.eclipse.aether.internal.impl.checksum,org.eclipse.aether.internal.impl.collect.bf,org.eclipse.aether.internal.impl.collect.df,org.eclipse.aether.internal.impl.collect,org.eclipse.aether.internal.impl.filter,org.eclipse.aether.internal.impl.resolution,org.eclipse.aether.internal.impl.synccontext.named,org.eclipse.aether.internal.impl.synccontext,org.eclipse.aether.internal.impl,org.eclipse.aether.named.providers,org.eclipse.aether.named,org.eclipse.aether.spi.checksums,org.eclipse.aether.spi.connector.checksum,org.eclipse.aether.spi.connector.filter,org.eclipse.aether.spi.connector.layout,org.eclipse.aether.spi.connector.transport,org.eclipse.aether.spi.connector,org.eclipse.aether.spi.io,org.eclipse.aether.spi.resolution,org.eclipse.aether.spi.synccontext,org.eclipse.aether.transport.file,org.eclipse.aether.tran sport.http,org.eclipse.aether"/> + <attribute name="JavaPackages-ArtifactId" value="${project.artifactId}"/> + <attribute name="JavaPackages-GroupId" value="${project.groupId}"/> + <attribute name="JavaPackages-Version" value="${project.version}"/> + <attribute name="Private-Package" value="org.eclipse.aether.spi.log,org.eclipse.aether.spi.localrepo,org.eclipse.aether.spi.io,org.eclipse.aether.spi.connector,org.eclipse.aether.spi.connector.checksum,org.eclipse.aether.spi.connector.layout,org.eclipse.aether.spi.connector.transport,org.eclipse.aether.spi.locator"/> + <attribute name="Require-Capability" value="osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=${compiler.target}))""/> + <attribute name="Specification-Title" value="${project.name}"/> + <attribute name="Specification-Vendor" value="${project.organization.name}"/> + <attribute name="Specification-Version" value="${spec.version}"/> + </manifest> + </jar> + </target> + +</project> ++++++ pre_checkin.sh ++++++ #!/bin/sh cp maven-resolver.changes maven-resolver-supplier.changes