diff --git a/.gitignore b/.gitignore
index d6dda2c..6b351ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/jctools-2.0.2.tar.gz
+SOURCES/JCTools-4.0.2.tar.gz
diff --git a/.jctools.metadata b/.jctools.metadata
index e69d8c2..545a1df 100644
--- a/.jctools.metadata
+++ b/.jctools.metadata
@@ -1 +1 @@
-35969e3255117fcfe1b66fb601f886cad3d4b743 SOURCES/jctools-2.0.2.tar.gz
+a186f3dc6b37393a0a397c165718c05e2be9ebae SOURCES/JCTools-4.0.2.tar.gz
diff --git a/SPECS/jctools.spec b/SPECS/jctools.spec
index 69b0ea7..7bc3e25 100644
--- a/SPECS/jctools.spec
+++ b/SPECS/jctools.spec
@@ -1,21 +1,26 @@
-%global namedreltag %nil
-%global namedversion %{version}%{?namedreltag}
+%bcond_with bootstrap
+%global srcname JCTools
-Name: jctools
-Version: 2.0.2
-Release: 2%{?dist}
-Summary: Java Concurrency Tools for the JVM
-License: ASL 2.0
-URL: http://jctools.github.io/JCTools/
-Source0: https://github.com/JCTools/JCTools/archive/v%{namedversion}/%{name}-%{namedversion}.tar.gz
+Name: jctools
+Version: 4.0.2
+Release: 12%{?dist}
+Summary: Java Concurrency Tools for the JVM
+License: Apache-2.0
+URL: https://github.com/JCTools/JCTools
+BuildArch: noarch
+ExclusiveArch: %{java_arches} noarch
-BuildRequires: maven-local
-BuildRequires: mvn(junit:junit)
-BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
-BuildRequires: mvn(org.hamcrest:hamcrest-all)
-BuildRequires: mvn(org.ow2.asm:asm-all)
+Source0: %{url}/archive/v%{version}/%{srcname}-%{version}.tar.gz
-BuildArch: noarch
+%if %{with bootstrap}
+BuildRequires: javapackages-bootstrap
+%else
+BuildRequires: maven-local
+BuildRequires: mvn(com.google.guava:guava-testlib)
+BuildRequires: mvn(junit:junit)
+BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
+BuildRequires: mvn(org.hamcrest:hamcrest-all)
+%endif
%description
This project aims to offer some concurrent data structures
@@ -29,90 +34,169 @@ currently missing from the JDK:
° Low contention stats counters
° Executor
-%package experimental
-Summary: JCTools Experimental implementations
-
-%description experimental
-Experimental implementations for the
-Java Concurrency Tools Library.
-
%package javadoc
-Summary: Javadoc for %{name}
+Summary: API documentation for %{name}
%description javadoc
-This package contains javadoc for %{name}.
-
-%package parent
-Summary: JCTools Parent POM
-
-%description parent
-JCTools Parent POM.
+API documentation for %{name}.
%prep
-%setup -q -n JCTools-%{namedversion}
-# Cleanup
-find . -name '*.class' -print -delete
-find . -name '*.jar' -print -delete
+%autosetup -p1 -n %{srcname}-%{version}
-%pom_xpath_set pom:project/pom:version %{namedversion}
-%pom_xpath_set -r pom:parent/pom:version %{namedversion} %{name}-core %{name}-experimental
+# drop some failure-prone tests (race conditions?)
+rm jctools-core/src/test/java/org/jctools/queues/MpqSanityTestMpscCompound.java
-# Prevent build failure
+# set correct version in all pom.xml files
+%pom_xpath_set pom:project/pom:version %{version}
+%pom_xpath_set pom:parent/pom:version %{version} jctools-{build,core,channels,experimental}
+
+# remove plugins unnecessary for RPM builds
+%pom_remove_plugin :coveralls-maven-plugin jctools-core
+%pom_remove_plugin :jacoco-maven-plugin jctools-core
%pom_remove_plugin :maven-enforcer-plugin
+%pom_remove_plugin :maven-source-plugin jctools-core
+%pom_remove_plugin :maven-javadoc-plugin jctools-core
-# Unavailable deps
-%pom_disable_module %{name}-benchmarks
-%pom_disable_module %{name}-concurrency-test
+# remove tests with additional kotlin dependencies
+rm -r jctools-core/src/test/java/org/jctools/maps/linearizability_test/
-# This dep is unused and unneeded
-%pom_remove_dep "com.google.guava:guava-testlib" jctools-experimental
+# disable unused modules with unavailable dependencies
+%pom_disable_module jctools-benchmarks
+%pom_disable_module jctools-concurrency-test
-# Not available
-%pom_remove_plugin :cobertura-maven-plugin %{name}-core
+# incompatible with Java 11 and unused in fedora:
+# https://github.com/JCTools/JCTools/issues/254
+%pom_disable_module jctools-channels
+%pom_disable_module jctools-experimental
-# Useless tasks
-%pom_remove_plugin :maven-source-plugin %{name}-core
-%pom_xpath_remove "pom:plugin[pom:artifactId = 'maven-javadoc-plugin']/pom:executions" %{name}-core
+%pom_disable_module jctools-build
+%pom_remove_plugin :exec-maven-plugin jctools-core
-# Add OSGi support
-for mod in core experimental; do
- %pom_xpath_set "pom:project/pom:packaging" bundle %{name}-${mod}
- %pom_add_plugin org.apache.felix:maven-bundle-plugin:2.3.7 %{name}-${mod} '
- true
-
-
- bundle-manifest
- process-classes
-
- manifest
-
-
-
-
- true
- '
-done
+# do not install internal build tools
+%mvn_package :jctools-build __noinstall
+
+# do not install unused parent POM
+%mvn_package :jctools-parent __noinstall
%build
-
-%mvn_build -s
+# Tests time out in Koji
+%mvn_build -s -f
%install
%mvn_install
-%files -f .mfiles-%{name}-core
+%files -f .mfiles-jctools-core
%doc README.md
%license LICENSE
-%files experimental -f .mfiles-%{name}-experimental
-
%files javadoc -f .mfiles-javadoc
%license LICENSE
-%files parent -f .mfiles-%{name}-parent
-%license LICENSE
-
%changelog
+* Fri Nov 29 2024 Mikolaj Izdebski - 4.0.2-9
+- Update javapackages test plan to f42
+
+* Thu Jul 18 2024 Fedora Release Engineering - 4.0.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Tue Feb 27 2024 Jiri Vanek - 4.0.2-3
+- Rebuilt for java-21-openjdk as system jdk
+
+* Fri Feb 23 2024 Jiri Vanek - 4.0.2-2
+- bump of release for for java-21-openjdk as system jdk
+
+* Thu Feb 01 2024 Mikolaj Izdebski - 4.0.2-1
+- Update to upstream version 4.0.2
+
+* Wed Jan 24 2024 Fedora Release Engineering - 4.0.1-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Sat Jan 20 2024 Fedora Release Engineering - 4.0.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Sep 01 2023 Mikolaj Izdebski - 4.0.1-4
+- Convert License tag to SPDX format
+
+* Tue Aug 15 2023 Mikolaj Izdebski - 4.0.1-3
+- Build with default JDK 17
+
+* Thu Jul 20 2023 Fedora Release Engineering - 4.0.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Fri Jul 14 2023 Paul Wouters - 3.3.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Thu Jul 21 2022 Fedora Release Engineering - 3.3.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Wed Apr 27 2022 Mikolaj Izdebski - 3.3.0-4
+- Build with OpenJDK 8
+- Disable jctools-build module
+
+* Sat Feb 05 2022 Jiri Vanek - 3.3.0-3
+- Rebuilt for java-17-openjdk as system jdk
+
+* Thu Jan 20 2022 Fedora Release Engineering - 3.3.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Tue Aug 10 2021 Sérgio Basto - 3.3.0-1
+- Update to 3.3.0
+
+* Thu Jul 22 2021 Fedora Release Engineering - 3.2.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Tue Feb 02 2021 Fabio Valentini - 3.2.0-1
+- Update to version 3.2.0.
+
+* Tue Jan 26 2021 Fedora Release Engineering - 3.1.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Fri Sep 04 2020 Mat Booth - 3.1.0-1
+- Update to latest upstream version
+- Obsolete sub-packages that cannot be built on JDK 11
+
+* Tue Jul 28 2020 Mat Booth - 2.1.2-10
+- Patch for javaparser API changes
+
+* Tue Jul 28 2020 Fedora Release Engineering - 2.1.2-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jul 10 2020 Jiri Vanek - 2.1.2-8
+- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11
+
+* Fri Jun 26 2020 Roland Grunberg - 2.1.2-7
+- Force Java 8 as we cannot build with Java 11 due to upstream bug.
+
+* Wed Jan 29 2020 Fedora Release Engineering - 2.1.2-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Dec 19 2019 Mat Booth - 2.1.2-5
+- Skip problematic NonBlockingHashMapTest
+
+* Mon Sep 09 2019 Fabio Valentini - 2.1.2-4
+- Disable another failure-prone unreliable test.
+
+* Mon Sep 09 2019 Fabio Valentini - 2.1.2-3
+- Disable failure-prone unreliable test.
+
+* Thu Jul 25 2019 Fedora Release Engineering - 2.1.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Wed Feb 13 2019 Mat Booth - 2.1.2-1
+- Update to latest upstream release
+
+* Fri Feb 01 2019 Fedora Release Engineering - 2.0.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Fri Jul 13 2018 Fedora Release Engineering - 2.0.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed Feb 07 2018 Fedora Release Engineering - 2.0.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Sun Sep 17 2017 Mat Booth - 2.0.2-2
- Drop unneeded dep on guava-testlib