This is an automated email from the ASF dual-hosted git repository.
garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git
The following commit(s) were added to refs/heads/master by this push:
new 4abc176e0 Prepare for the next release candidate
4abc176e0 is described below
commit 4abc176e0217478b8019c0e5c92b582eadae2b40
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Aug 6 09:54:12 2026 +0000
Prepare for the next release candidate
---
CONTRIBUTING.md | 9 ++-
README.md | 12 ++--
RELEASE-NOTES.txt | 114 +++++++++++++++++++++++++++++++++
pom.xml | 4 +-
src/changes/changes.xml | 2 +-
src/changes/release-notes.vm | 2 +-
src/site/xdoc/download_collections.xml | 26 ++++----
7 files changed, 141 insertions(+), 28 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 790f6537c..e876f4340 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -48,13 +48,13 @@ 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). This is
not essential, but makes providing patches much easier.
++ Make sure you have a [GitHub account](https://github.com/signup/free). This
is not essential, but makes providing patches much easier.
+ If you're planning to implement a new feature it makes sense to discuss your
changes on the [dev list](https://commons.apache.org/mail-lists.html) first.
This way you can make sure you're not wasting your time on something that isn't
considered to be in Apache Commons Collections's scope.
+ Submit a [Jira Ticket][jira] for your issue, assuming one does not already
exist.
+ Clearly describe the issue including steps to reproduce when it is a bug.
+ Make sure you fill in the earliest version that you know has the issue.
+ Find the corresponding [repository on
GitHub](https://github.com/apache/?query=commons-),
-[fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)
and check out your forked repository. If you don't have a GitHub account, you
can still clone the Commons repository.
+[fork](https://help.github.com/articles/fork-a-repo/) and check out your
forked repository. If you don't have a GitHub account, you can still clone the
Commons repository.
Making Changes
--------------
@@ -108,9 +108,8 @@ Additional Resources
+ [Contributing patches](https://commons.apache.org/patches.html)
+ [Apache Commons Collections JIRA project page][jira]
+ [Contributor License Agreement][cla]
-+ [General GitHub documentation](https://docs.github.com/)
-+ [GitHub pull request
documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)
++ [General GitHub documentation](https://help.github.com/)
++ [GitHub pull request
documentation](https://help.github.com/articles/creating-a-pull-request/)
[cla]:https://www.apache.org/licenses/#clas
[jira]:https://issues.apache.org/jira/browse/COLLECTIONS
diff --git a/README.md b/README.md
index 3275da428..617fbb050 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Apache Commons Collections
[](https://github.com/apache/commons-collections/actions/workflows/maven.yml)
[](https://search.maven.org/artifact/org.apache.commons/commons-collections4)
-[](https://javadoc.io/doc/org.apache.commons/commons-collections4/4.5.0)
+[](https://javadoc.io/doc/org.apache.commons/commons-collections4/4.6.0)
[](https://github.com/apache/commons-collections/actions/workflows/codeql-analysis.yml)
[](https://api.securityscorecards.dev/projects/github.com/apache/commons-collections)
@@ -68,7 +68,7 @@ Alternatively, you can pull it from the central Maven
repositories:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
- <version>4.5.0</version>
+ <version>4.6.0</version>
</dependency>
```
@@ -89,8 +89,8 @@ There are some guidelines which will make applying PRs easier
for us:
+ Respect the existing code style for each file.
+ 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.
+ Provide JUnit tests for your changes and make sure your changes don't break
any existing tests by running `mvn`.
-+ Before you pushing a PR, run `mvn` (by itself), this runs the default goal,
which contains all build checks.
-+ To see the code coverage report, regardless of coverage failures, run `mvn
clean site -Dcommons.jacoco.haltOnFailure=false`
++ Before you push a PR, run `mvn` (without arguments). This runs the default
goal which contains all build checks.
++ To see the code coverage report, regardless of coverage failures, run `mvn
clean site -Dcommons.jacoco.haltOnFailure=false -Pjacoco`
If you plan to contribute on a regular basis, please consider filing a
[contributor license agreement](https://www.apache.org/licenses/#clas).
You can learn more about contributing via GitHub in our [contribution
guidelines](CONTRIBUTING.md).
@@ -111,9 +111,9 @@ Additional Resources
+ [Apache Commons Homepage](https://commons.apache.org/)
+ [Apache Issue Tracker
(JIRA)](https://issues.apache.org/jira/browse/COLLECTIONS)
+ [Apache Commons Slack Channel](https://the-asf.slack.com/archives/C60NVB8AD)
-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)
Apache Commons Components
-------------------------
-Please see the [list of components](https://commons.apache.org/components.html)
++ [List of Apache Commons
components](https://commons.apache.org/components.html): homepages and
documentation for all components.
++
[`REPOSITORIES.md`](https://github.com/apache/commons-parent/blob/master/REPOSITORIES.md):
overview of the code repositories and their build status.
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 473141ccf..e20751cb9 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,3 +1,117 @@
+Apache Commons Collections 4.6.0 Release Notes
+----------------------------------------------
+
+The Apache Commons Collections team is pleased to announce the release of
Apache Commons Collections 4.6.0.
+
+The Apache Commons Collections package contains types that extend and augment
the Java Collections Framework.
+
+This is a feature and maintenance release. Java 8 or later is required.
+
+Changes in this version
+-----------------------
+
+New features
+------------
+
+* Add generics to UnmodifiableIterator for the wrapped type. Thanks to Gary
Gregory.
+* Add a Maven benchmark profile for JMH. Thanks to Gary Gregory.
+* Add a Maven benchmark profile for JMH. Thanks to Gary Gregory.
+* COLLECTIONS-893: Add SortedMultiSet interface, TreeMultiSet implementation,
sorted multiset decorators, and MultiSetUtils factory methods, giving MultiSet
feature parity with SortedBag/TreeBag. Thanks to Paul King.
+* COLLECTIONS-893: Add
MultiSetUtils.containsOccurrences/removeOccurrences/retainOccurrences providing
Bag's cardinality-respecting semantics under explicit names, and
Bag-to-MultiSet migration notes in the Bag javadoc. Thanks to Paul King.
+* Add IterableUtils.sumSizes(Iterable<? extends Collection<E>>). Thanks to
Gary Gregory.
+
+Fixed Bugs
+----------
+
+* COLLECTIONS-776: Wrapping PassiveExpiringMap in Collections.synchronizedMap
breaks expiration. Thanks to Gary Gregory.
+*
org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceEntry.toReference(ReferenceStrength,
T, int) now throws IllegalArgumentException instead of Error. Thanks to Gary
Gregory.
+* Remove deprecation annotation of org.apache.commons.collections4.Factory;
this will be deprecated in 5.0 in favor of java.util.function.Supplier. Thanks
to Eric Hubert, Gary Gregory.
+* Remove deprecation annotation of org.apache.commons.collections4.Predicate;
this will be deprecated in 5.0 in favor of java.util.function.Predicate. Thanks
to Eric Hubert, Gary Gregory.
+* Remove deprecation annotation of
org.apache.commons.collections4.Transformer; this will be deprecated in 5.0 in
favor of java.util.function.Function. Thanks to Eric Hubert, Gary Gregory.
+* Remove deprecation annotation of org.apache.commons.collections4.Closure;
this will be deprecated in 5.0 in favor of java.util.function.Consumer. Thanks
to Eric Hubert, Gary Gregory.
+* COLLECTIONS-874: MapUtils.getLongValue(Map, K, Function) returns a byte
instead of a long. Thanks to Sebastian Götz, Gary Gregory.
+* MapUtils.getIntValue(Map, K, Function) returns a byte instead of an int.
Thanks to Naveed Khan, Gary Gregory.
+* Fix exception message in
org.apache.commons.collections4.functors.FunctorUtils.validate(Consumer...)
Thanks to Gary Gregory.
+* Fix exception message in
org.apache.commons.collections4.iterators.UnmodifiableIterator.remove() to
match java.util.Iterator.remove(). Thanks to Gary Gregory.
+* COLLECTIONS-838: Calling SetUtils.union on multiple instances of SetView
causes JVM to hang Thanks to Piotr P. Karwasz, Joerg Budischewski.
+* COLLECTIONS-722: Improve IteratorUtils.chainedIterator() performance.
Thanks to Piotr P. Karwasz, Joerg Budischewski.
+* Fix UselessOverridingMethod in
org.apache.commons.collections4.properties.PropertiesFactory. Thanks to Gary
Gregory, PMD.
+* COLLECTIONS-693: OrderedProperties.stringPropertyNames() returns an
unordered Set. Thanks to Adam Rauch, Gary Gregory.
+* Fix SortedProperties.keySet() returned an unsorted Set. Thanks to Gary
Gregory.
+* Fix SortedProperties.propertyNames() returned an unsorted Enumeration.
Thanks to Gary Gregory.
+* Fix SortedProperties.stringPropertyNames() returned an unsorted Set. Thanks
to Gary Gregory.
+* Fix SortedProperties.forEach() called its consumer out of order. Thanks to
Gary Gregory.
+* Fix Apache RAT plugin console warnings. Thanks to Gary Gregory.
+* Add MultiValuedMap.inverted() #665. Thanks to Paul King, Gary Gregory, Sebb.
+* COLLECTIONS-885: PatriciaTrie submap and range view operations silently
mutate trie structure resulting in ConcurrentModificationException for any
iterating threads #672. Thanks to John Griffin, Gary Gregory.
+* COLLECTIONS-886: [javadoc] CompositeSet.addComposited(Set) does not throw
NullPointerException when null is passed #675. Thanks to Partha Protim Paul.
+* COLLECTIONS-887: ConcurrentReferenceHashMap.remove(key), remove(key,
value), replace(key, value), and replace(key, oldValue, newValue) throw
NullPointerException inconsistently. Thanks to Partha Paul, Gary Gregory.
+* COLLECTIONS-888: PatriciaTrie incompatible with Java 21 (JEP 431 Sequenced
Collections). Thanks to Marc Carter, Gary Gregory.
+* Reject non-positive entry count in bag/multiset doReadObject (#679). Thanks
to Dexter.k, Gary Gregory.
+* Fix most Junit 5 nested tests (#681). Thanks to Dexter.k, Gary Gregory.
+* COLLECTIONS-881: MultiMapUtils.getXXX ensure safe copy (#669). Thanks to
Suhyeon Park, Gary Gregory.
+* Re-validate entries in PredicatedMap/PredicatedCollection readObject (#682).
Thanks to Dexter.k, Gary Gregory.
+* COLLECTIONS-889: IndexedCollection.remove(Object) removes all values for a
non-unique index key. Thanks to Ruiqi Dong, Gary Gregory.
+* COLLECTIONS-890: TransformIterator throws NullPointerException when its
transformer is null. Thanks to Ruiqi Dong, Gary Gregory.
+* COLLECTIONS-892: IndexedCollection.add(Object) mutates unique indexed
collections before rejecting duplicate keys. Thanks to Ruiqi Dong, Gary
Gregory.
+* COLLECTIONS-878: MapUtils.invertMap() improves HashMap construction (#652).
Thanks to Maxim Safronov, Gary Gregory.
+* Validate order and uniqueness invariants in decorator readObject() (#684).
Thanks to Dexter.k, Gary Gregory.
+* TransformIterator now fail-fast on a null Iterator (#686). Thanks to Gary
Gregory.
+* COLLECTIONS-884: [COLLECTIONS-884] Fix JUnit 5 test discovery for Map
EntrySet and Values views (#689). Thanks to sankalp suman, Ben Manes.
+* Reject non-positive maxSize in LRUMap.doReadObject() (#690). Thanks to
Dexter.k, Gary Gregory.
+* [javadoc] Document that BloomFilter merge operations are non-atomic and a
filter that throws during a merge should be considered invalid (#695). Thanks
to Naveed Khan, Alex Herbert, Gary Gregory.
+* Fix AbstractMapBag.retainAll removing all copies when the other bag has more
(#692). Thanks to Vasiliy Mikhailov, Gary Gregory.
+* Fix integer overflow in SetOperations.cosineSimilarity (#693). Thanks to
Vasiliy Mikhailov, Gary Gregory.
+* Validate deserialized size in CircularFifoQueue.readObject (#678). Thanks to
Vasiliy Mikhailov, Gary Gregory.
+* Do not mutate the input map in SwitchTransformer.switchTransformer (#696).
Thanks to Vasiliy Mikhailov, Gary Gregory.
+* Do not mutate the input map in SwitchClosure.switchClosure,
ClosureUtils.switchMapClosure and TransformerUtils.switchMapTransformer (#700).
Thanks to Naveed Khan, Gary Gregory.
+* Fix stale size in AbstractMapMultiSet view iterator remove (#701). Thanks to
Dexter.k, Gary Gregory.
+* Stop ExtendedMessageFormat seekNonWs reading past the pattern end (#1740).
Thanks to Javid Khan, Gary Gregory.
+* Remove stale keys in OrderedProperties compute and merge (#702). Thanks to
Dexter.k, Gary Gregory.
+* COLLECTIONS-776: Fix expiration bypass in PassiveExpiringMap when wrapped
in SynchronizedMap (#694). Thanks to sankalp suman, Gary Gregory.
+* Fix MapUtils.getIntValue(Map, K, Function) returning a byte (#704). Thanks
to Dexter.k, Gary Gregory.
+* COLLECTIONS-893: Bring (Collection compliant) MultiSet family to
(non-compliant) Bag parity (#703). Thanks to Paul King, Gary Gregory.
+* AbstractMapBag and AbstractMapMultiSet.add(Object, int) overflow the size
and element count past Integer.MAX_VALUE (#705). Thanks to Naveed Khan, Gary
Gregory.
+* COLLECTIONS-894: TreeBag documentation should explicitly warn about
infinite loop as a result of concurrent writes (#707). Thanks to Paul King, Sol
Thiessen, Gary Gregory.
+* COLLECTIONS-896: Add TransformedMultiSet plus fill minor gaps for MultiSet
vs. Bags (#708). Thanks to Paul King, Gary Gregory.
+* COLLECTIONS-895: Deprecate the Bag family in favor of the MultiSet family
(#709). Thanks to Paul King, Gary Gregory.
+* CompositeCollection, CompositeSet, CompositeMap, AbstractMultiValuedMap and
AbstractMultiSet size() overflow int when the total exceeds Integer.MAX_VALUE
(#710). Thanks to Naveed Khan, Gary Gregory.
+* DualHashBidiMap, DualLinkedHashBidiMap, and DualTreeBidiMap entrySet()
Map.Entry.setValue(Object) returns the new value instead of the previous value
(#711). Thanks to Naveed Khan, Gary Gregory.
+* COLLECTIONS-714: PatriciaTrie ignores trailing null characters in keys
(#712). Thanks to sankalp suman, Gary Gregory.
+* Flat3Map entrySet().remove(Object) removes a mapping when only the key
matches, ignoring the entry value (#714). Thanks to Naveed Khan, Gary Gregory.
+* SetUniqueList and ListOrderedSet leave the backing collection inconsistent
when add(int, Object) or addAll(int, Collection) is called with an out-of-range
index. Thanks to Naveed Khan, Gary Gregory.
+* CollectionUtils.collate(Iterable, Iterable, Comparator, boolean) does not
remove duplicate null elements when includeDuplicates is false (#715). Thanks
to Naveed Khan, Gary Gregory.
+* Do not register a value collection until an add succeeds (#717). Thanks to
Naveed Khan, Gary Gregory.
+* Increment modCount after the bounds check in TreeList add and remove (#716).
Thanks to Naveed Khan, Gary Gregory.
+* Add messages when throwing NullPointerException. Thanks to Gary Gregory.
+* Reject remove on the Unmodifiable map from SplitMapUtils.readableMap (#718).
Thanks to Naveed Khan, Gary Gregory.
+* Keep OrderedProperties keySet and values in sync with the map (#719). Thanks
to Naveed Khan, Gary Gregory.
+* COLLECTIONS-859: Clarify ambiguous @return Javadoc in PredicateUtils.
Thanks to Daniele, THE_ZAID, Gary Gregory.
+* Synchronize forEach() in SynchronizedCollection (#720). Thanks to Naveed
Khan, Gary Gregory.
+
+Changes
+-------
+
+* Bump org.apache.commons:commons-parent from 81 to 103 #612, #645, #662,
#663. Thanks to Gary Gregory, Dependabot.
+* Bump com.google.guava:guava-testlib from 33.3.1-jre to 33.5.0-jre #644.
Thanks to Gary Gregory.
+* Bump PMD from 7.8.0 to 7.13.0 (now inherited from parent POM). Thanks to
Gary Gregory.
+* Bump org.easymock:easymock from 5.5.0 to 5.6.0 #617. Thanks to Gary Gregory.
+* [test] Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.20.0 #625.
Thanks to Gary Gregory.
+* [test] Bump commons-io:commons-io from 2.19.0 to 2.22.0. Thanks to Gary
Gregory.
+* Bump commons-codec:commons-codec from 1.18.0 to 1.22.1. Thanks to Gary
Gregory.
+* Bump doxia.module.markdown.version from 2.0.0 to 2.1.0. Thanks to Gary
Gregory.
+* Bump com.google.guava:guava-testlib from 33.5.0-jre to 33.6.0-jre (#680).
Thanks to Gary Gregory, Dependabot.
+
+
+For complete information on Apache Commons Collections, including instructions
on how to submit bug reports,
+patches, or suggestions for improvement, see the Apache Commons Collections
website:
+
+https://commons.apache.org/proper/commons-collections/
+
+Download page:
https://commons.apache.org/proper/commons-collections/download_collections.cgi
+
+-----------------------------------------------------------------------------
+
Apache Commons Collections 4.5.0 Release Notes
----------------------------------------------
diff --git a/pom.xml b/pom.xml
index d4a26652d..b0541f583 100644
--- a/pom.xml
+++ b/pom.xml
@@ -124,8 +124,8 @@
<commons.componentid>collections</commons.componentid>
<commons.module.name>org.apache.commons.collections4</commons.module.name>
<!-- Current 4.x release series -->
- <commons.release.version>4.5.1</commons.release.version>
- <commons.release.next>4.5.2</commons.release.next>
+ <commons.release.version>4.6.0</commons.release.version>
+ <commons.release.next>4.6.1</commons.release.next>
<commons.release.desc>(Requires Java 8 or above)</commons.release.desc>
<commons.jira.id>COLLECTIONS</commons.jira.id>
<commons.jira.pid>12310465</commons.jira.pid>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cb1f5874a..c475a2656 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -22,7 +22,7 @@
<title>Apache Commons Collections Release Notes</title>
</properties>
<body>
- <release version="4.6.0" date="YYYY-MM-DD" description="This is a feature
and maintenance release. Java 8 or later is required.">
+ <release version="4.6.0" date="2026-08-06" description="This is a feature
and maintenance release. Java 8 or later is required.">
<!-- FIX -->
<action type="fix" dev="ggregory" due-to="Gary Gregory"
issue="COLLECTIONS-776">Wrapping PassiveExpiringMap in
Collections.synchronizedMap breaks expiration.</action>
<action type="fix" dev="ggregory" due-to="Gary
Gregory">org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceEntry.toReference(ReferenceStrength,
T, int) now throws IllegalArgumentException instead of Error.</action>
diff --git a/src/changes/release-notes.vm b/src/changes/release-notes.vm
index b3355d74b..84f372494 100644
--- a/src/changes/release-notes.vm
+++ b/src/changes/release-notes.vm
@@ -15,7 +15,7 @@
## specific language governing permissions and limitations
## under the License.
${project.name} ${version} Release Notes
-------------------------------------------------
+----------------------------------------------
The ${developmentTeam} is pleased to announce the release of ${project.name}
${version}.
diff --git a/src/site/xdoc/download_collections.xml
b/src/site/xdoc/download_collections.xml
index 789da0245..9c5d3d1b3 100644
--- a/src/site/xdoc/download_collections.xml
+++ b/src/site/xdoc/download_collections.xml
@@ -115,32 +115,32 @@ limitations under the License.
</p>
</subsection>
</section>
- <section name="Apache Commons Collections 4.5.0 (Requires Java 8 or
above)">
+ <section name="Apache Commons Collections 4.6.0 (Requires Java 8 or
above)">
<subsection name="Binaries">
<table>
<tr>
- <td><a
href="[preferred]/commons/collections/binaries/commons-collections4-4.5.0-bin.tar.gz">commons-collections4-4.5.0-bin.tar.gz</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.5.0-bin.tar.gz.sha512">sha512</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.5.0-bin.tar.gz.asc">pgp</a></td>
+ <td><a
href="[preferred]/commons/collections/binaries/commons-collections4-4.6.0-bin.tar.gz">commons-collections4-4.6.0-bin.tar.gz</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.6.0-bin.tar.gz.sha512">sha512</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.6.0-bin.tar.gz.asc">pgp</a></td>
</tr>
<tr>
- <td><a
href="[preferred]/commons/collections/binaries/commons-collections4-4.5.0-bin.zip">commons-collections4-4.5.0-bin.zip</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.5.0-bin.zip.sha512">sha512</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.5.0-bin.zip.asc">pgp</a></td>
+ <td><a
href="[preferred]/commons/collections/binaries/commons-collections4-4.6.0-bin.zip">commons-collections4-4.6.0-bin.zip</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.6.0-bin.zip.sha512">sha512</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/binaries/commons-collections4-4.6.0-bin.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>
<subsection name="Source">
<table>
<tr>
- <td><a
href="[preferred]/commons/collections/source/commons-collections4-4.5.0-src.tar.gz">commons-collections4-4.5.0-src.tar.gz</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.5.0-src.tar.gz.sha512">sha512</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.5.0-src.tar.gz.asc">pgp</a></td>
+ <td><a
href="[preferred]/commons/collections/source/commons-collections4-4.6.0-src.tar.gz">commons-collections4-4.6.0-src.tar.gz</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.6.0-src.tar.gz.sha512">sha512</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.6.0-src.tar.gz.asc">pgp</a></td>
</tr>
<tr>
- <td><a
href="[preferred]/commons/collections/source/commons-collections4-4.5.0-src.zip">commons-collections4-4.5.0-src.zip</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.5.0-src.zip.sha512">sha512</a></td>
- <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.5.0-src.zip.asc">pgp</a></td>
+ <td><a
href="[preferred]/commons/collections/source/commons-collections4-4.6.0-src.zip">commons-collections4-4.6.0-src.zip</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.6.0-src.zip.sha512">sha512</a></td>
+ <td><a
href="https://downloads.apache.org/commons/collections/source/commons-collections4-4.6.0-src.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>