diff --git a/README.md b/README.md
index b538b968..64cb3d8f 100644
--- a/README.md
+++ b/README.md
@@ -5,10 +5,8 @@
-
-
@@ -36,7 +34,7 @@
- [🔧 功能](#-%E5%8A%9F%E8%83%BD)
- [关于`CompletableFuture`](#%E5%85%B3%E4%BA%8Ecompletablefuture)
- [👥 User Guide](#-user-guide)
- - [1. `cffu`的三种使用方式](#1-cffu%E7%9A%84%E4%B8%89%E7%A7%8D%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F)
+ - [1. `cffu`的使用方式](#1-cffu%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F)
- [2. `cffu`功能介绍](#2-cffu%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D)
- [2.1 返回多个`CF`的整体运行结果](#21-%E8%BF%94%E5%9B%9E%E5%A4%9A%E4%B8%AAcf%E7%9A%84%E6%95%B4%E4%BD%93%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C)
- [2.2 支持设置缺省的业务线程池并封装携带](#22-%E6%94%AF%E6%8C%81%E8%AE%BE%E7%BD%AE%E7%BC%BA%E7%9C%81%E7%9A%84%E4%B8%9A%E5%8A%A1%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%B9%B6%E5%B0%81%E8%A3%85%E6%90%BA%E5%B8%A6)
@@ -59,46 +57,49 @@
# 🔧 功能
-提供的功能有:
-
-- ☘️ **补全业务使用中缺失的功能**
- - 🏪 更方便的功能,如
- - 支持返回多个`CF`的运行结果,而不是不返回`CF`的运行结果(`allOf`)
- 如方法`allResultsFailFastOf` / `allResultsOf` / `mSupplyFailFastAsync` / `thenMApplyFailFastAsync`
- - 支持返回多个不同类型的`CF`结果,而不是同一类型
- 如方法`allTupleFailFastOf` / `allTupleOf` / `mSupplyTupleFailFastAsync` / `thenMApplyTupleFailFastAsync`
- - 支持直接运行多个`Action`,而不是要先包装成`CompletableFuture`
- 如方法`mSupplyTupleFailFastAsync` / `mSupplyMostSuccessAsync` / `thenMApplyTupleFailFastAsync` / `thenMRunFailFastAsync`
- - 支持处理指定异常类型的`catching`方法,而不是处理所有异常`Throwable`(`exceptionally`)
- - 🚦 更高效灵活的并发执行策略,如
- - `AllFailFast`策略:当输入的多个`CF`有失败时快速失败返回,而不再于事无补地等待所有`CF`运行完成(`allOf`)
- - `AnySuccess`策略:返回首个成功的`CF`结果,而不是首个完成(但可能失败)的`CF`(`anyOf`)
- - `AllSuccess`策略:返回多个`CF`中成功的结果,对于失败的`CF`返回指定的缺省值
- - `MostSuccess`策略:指定时间内返回多个`CF`中成功的结果,对于失败或超时的`CF`返回指定的缺省值
- - `All(Complete)` / `Any(Complete)`策略:这2个是`CompletableFuture`已有支持的策略
- - 🦺 更安全的使用方式,如
- - 支持设置缺省的业务线程池并封装携带,`CffuFactory#builder(executor)`方法
- - 支持超时的`join`的方法,`join(timeout, unit)`方法
- - 超时执行安全的`cffuOrTimeout` / `cffuCompleteOnTimeout`方法
- - 一定不会修改`CF`结果的`peek`处理方法
- (`whenComplete`方法可能会修改`CF`的结果,返回的`CF`与输入`CF`并不一定一致)
- - 支持禁止强制篡改,`CffuFactoryBuilder#forbidObtrudeMethods`方法
- - 在类方法附加完善的代码质量注解,在编码时`IDE`能尽早提示出问题
- 如`@NonNull`、`@Nullable`、`@CheckReturnValue`、`@Contract`等
- - 🧩 缺失的基础基本功能,除了上面面向安全而新实现方法(如`join(timeout, unit)` / `cffuOrTimeout` / `peek`),还有
- - 异步异常完成,`completeExceptionallyAsync`方法
- - 非阻塞地获取成功结果,如果`CF`失败或还在运行中则返回指定的缺省值,`getSuccessNow`方法
- - 解包装`CF`异常成业务异常,`unwrapCfException`方法
-- 💪 **已有功能的增强**,如
- - `anyOf`方法:返回具体类型`T`(类型安全),而不是返回`Object`(`CompletableFuture#anyOf`)
- - `allof` / `anyOf`方法:输入更宽泛的`CompletionStage`参数类型,而不是`CompletableFuture`类(`CompletableFuture#allOf/anyOf`)
-- ⏳ **`Backport`支持`Java 8`**,`Java 9+`高版本的所有`CF`新功能方法在`Java 8`低版本直接可用,如
- - 超时控制:`orTimeout` / `completeOnTimeout`
- - 延迟执行:`delayedExecutor`
- - 工厂方法:`failedFuture` / `completedStage` / `failedStage`
- - 处理操作:`completeAsync` / `exceptionallyAsync` / `exceptionallyCompose` / `copy`
- - 非阻塞读:`resultNow` / `exceptionNow` / `state`
-- 🍩 **一等公民支持`Kotlin`**
+☘️ **补全业务使用中缺失的功能**
+
+- 🏪 更方便的功能,如
+ - 支持返回多个`CF`的运行结果,而不是不返回`CF`的运行结果(`CompletableFuture#allOf`)
+ 如方法`allResultsFailFastOf` / `allResultsOf` / `mSupplyFailFastAsync` / `thenMApplyFailFastAsync`
+ - 支持返回多个不同类型的`CF`结果,而不是同一类型
+ 如方法`allTupleFailFastOf` / `allTupleOf` / `mSupplyTupleFailFastAsync` / `thenMApplyTupleFailFastAsync`
+ - 支持直接运行多个`Action`,而不是要先包装成`CompletableFuture`
+ 如方法`mSupplyTupleFailFastAsync` / `mSupplyMostSuccessAsync` / `thenMApplyTupleFailFastAsync` / `thenMRunFailFastAsync`
+ - 支持处理指定异常类型的`catching`方法,而不是处理所有异常`Throwable`(`CompletableFuture#exceptionally`)
+- 🚦 更高效灵活的并发执行策略,如
+ - `AllFailFast`策略:当输入的多个`CF`有失败时快速失败返回,而不再于事无补地等待所有`CF`运行完成(`CompletableFuture#allOf`)
+ - `AnySuccess`策略:返回首个成功的`CF`结果,而不是首个完成但可能失败的`CF`(`CompletableFuture#anyOf`)
+ - `AllSuccess`策略:返回多个`CF`中成功的结果,对于失败的`CF`返回指定的缺省值
+ - `MostSuccess`策略:指定时间内返回多个`CF`中成功的结果,对于失败或超时的`CF`返回指定的缺省值
+ - `All(Complete)` / `Any(Complete)`策略:这2个是`CompletableFuture`已有支持的策略
+- 🦺 更安全的使用方式,如
+ - 支持设置缺省的业务线程池并封装携带,`CffuFactory#builder(executor)`方法
+ - 支持超时的`join`的方法,`join(timeout, unit)`方法
+ - 超时执行安全的`orTimeout` / `completeOnTimeout`新实现
+ `CF#orTimeout` / `CF#completeOnTimeout`方法在超时使用内部的单线程`ScheduledThreadPoolExecutor`来触发业务逻辑执行,会导致`CF`的超时与延迟执行基础功能失效❗️
+ - 一定不会修改`CF`结果的`peek`处理方法
+ `whenComplete`方法可能会修改`CF`的结果,返回的`CF`与输入`CF`并不一定一致
+ - 支持禁止强制篡改,`CffuFactoryBuilder#forbidObtrudeMethods`方法
+ - 在类方法附加完善的代码质量注解,在编码时`IDE`能尽早提示出问题
+ 如`@NonNull`、`@Nullable`、`@CheckReturnValue`、`@Contract`等
+- 🧩 缺失的基本功能,除了上面面向安全而新实现的方法,还有
+ - 异步异常完成,`completeExceptionallyAsync`方法
+ - 非阻塞地获取成功结果,如果`CF`失败或还在运行中则返回指定的缺省值,`getSuccessNow`方法
+ - 解包装`CF`异常成业务异常,`unwrapCfException`方法
+
+💪 **已有功能的增强**,如
+
+- `anyOf`方法:返回具体类型`T`(类型安全),而不是返回`Object`(`CompletableFuture#anyOf`)
+- `allof` / `anyOf`方法:输入更宽泛的`CompletionStage`参数类型,而不是`CompletableFuture`类(`CompletableFuture#allOf/anyOf`)
+
+⏳ **`Backport`支持`Java 8`**,`Java 9+`高版本的所有`CF`新功能方法在`Java 8`低版本直接可用,如
+
+- 超时控制:`orTimeout` / `completeOnTimeout`
+- 延迟执行:`delayedExecutor`
+- 工厂方法:`failedFuture` / `completedStage` / `failedStage`
+- 处理操作:`completeAsync` / `exceptionallyAsync` / `exceptionallyCompose` / `copy`
+- 非阻塞读:`resultNow` / `exceptionNow` / `state`
更多`cffu`的使用方式与功能说明详见 [User Guide](#-user-guide)。
@@ -135,29 +136,51 @@
# 👥 User Guide
-## 1. `cffu`的三种使用方式
-
-`cffu`支持三种使用方式:
-
-- 🦝 1) **使用`Cffu`类**
- - 项目使用`Java`语言时,推荐这种使用方式
- - 直接使用`CompletableFuture`类的代码可以比较简单的迁移到`Cffu`类,包含2步修改:
- - 在类型声明地方,由`CompletableFuture`改成`Cffu`
- - 在`CompletableFuture`静态方法调用的地方,类名`CompletableFuture`改成`cffuFactory`实例
- - 更多参见[如何从直接使用`CompletableFuture`类迁移到`Cffu`类](#3-%E5%A6%82%E4%BD%95%E4%BB%8E%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8completablefuture%E7%B1%BB%E8%BF%81%E7%A7%BB%E5%88%B0cffu%E7%B1%BB)
- - 依赖`io.foldright:cffu`库
-- 🛠️️ 2) **使用`CompletableFutureUtils`工具类**
- - 如果你不想在项目中引入新类(`Cffu`类)、觉得这样增加了复杂性的话,
- - 完全可以把`cffu`库作为一个工具类来用
- - 优化`CompletableFuture`使用的工具方法在业务项目中很常见,`CompletableFutureUtils`提供了一系列实用可靠高效安全的工具方法
- - 这种使用方式有些`cffu`功能没有提供(也没有想到实现方案) 😔
- 如支持设置缺省的业务线程池、禁止强制篡改
- - 依赖`io.foldright:cffu`库
-- 🍩 3) **使用`Kotlin`扩展方法**
- - 项目使用`Kotlin`语言时,推荐这种使用方式
- - 要依赖`io.foldright:cffu-kotlin`库
-
-更多参见`cffu`三种使用方式的[示例代码](docs/usage-mode-demo.md)。 🎪
+## 1. `cffu`的使用方式
+
+- 🦝 **使用`Cffu`类**
+- 🔧 **使用`CompletableFutureUtils`工具类**
+
+推荐`Cffu`类的使用方式: 🌟
+
+- 相比`CompletableFutureUtils`的静态方法,新功能方法以类实例方法的方式自然方便调用(就像使用`CompletableFuture`一样)
+- `Java`语言不支持在已有类上扩展方法,所以需要一个新的包装类
+
+如果你不想在项目中引入新类(`Cffu`类)、觉得这样增加了复杂性的话,完全可以把`cffu`库作为一个工具类来用:
+
+- 优化`CompletableFuture`使用的工具方法在业务项目中很常见,`CompletableFutureUtils`提供了一系列实用可靠高效安全的工具方法
+- 这种使用方式有些`cffu`功能没有提供(也没有想到好的实现方案)
+ 如支持设置缺省的业务线程池、禁止强制篡改
+
+直接使用`CompletableFuture`类的代码可以比较简单的迁移到`Cffu`类,包含2步修改:
+
+- 在类型声明地方,由`CompletableFuture`改成`Cffu`
+- 在`CompletableFuture`静态方法调用的地方,类名`CompletableFuture`改成`cffuFactory`实例
+- 更多参见[如何从直接使用`CompletableFuture`类迁移到`Cffu`类](#3-%E5%A6%82%E4%BD%95%E4%BB%8E%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8completablefuture%E7%B1%BB%E8%BF%81%E7%A7%BB%E5%88%B0cffu%E7%B1%BB)
+
+库依赖(包含[`Java CompletableFuture`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html)的增强`CompletableFutureUtils`):
+
+- For `Maven` projects:
+
+ ```xml
+
+ io.foldright
+ cffu
+ 1.0.0-Alpha29
+
+ ```
+- For `Gradle` projects:
+
+ ```groovy
+ // Gradle Kotlin DSL
+ implementation("io.foldright:cffu:1.0.0-Alpha29")
+ ```
+ ```groovy
+ // Gradle Groovy DSL
+ implementation 'io.foldright:cffu:1.0.0-Alpha29'
+ ```
+
+> `cffu`也支持`Kotlin`扩展方法的使用方式,参见[`cffu-kotlin/README.md`](cffu-kotlin/README.md);使用方式的对比示例参见[`docs/usage-mode-demo.md`](docs/usage-mode-demo.md)。
## 2. `cffu`功能介绍
@@ -515,17 +538,14 @@ public class MultipleActionsDemo {
可以参见:
-- `API`文档
- - [`Java API`文档](https://foldright.io/api-docs/cffu/)
- - [`Kotlin API`文档](https://foldright.io/api-docs/cffu-kotlin/)
+- [`Java API`文档](https://foldright.io/api-docs/cffu/)
- 实现源码
- - `cffu`:[`Cffu.java`](cffu-core/src/main/java/io/foldright/cffu/Cffu.java)、[`CffuFactory.java`](cffu-core/src/main/java/io/foldright/cffu/CffuFactory.java)
- - `CompletableFuture utils`:[`CompletableFutureUtils.java`](cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java)、[`ListenableFutureUtils.java`](cffu-core/src/main/java/io/foldright/cffu/ListenableFutureUtils.java)
- - `Kotlin extensions`:[`CffuExtensions.kt`](cffu-kotlin/src/main/java/io/foldright/cffu/kotlin/CffuExtensions.kt)、[`CompletableFutureExtensions.kt`](cffu-kotlin/src/main/java/io/foldright/cffu/kotlin/CompletableFutureExtensions.kt)、[`ListenableFutureExtensions.kt`](cffu-kotlin/src/main/java/io/foldright/cffu/kotlin/ListenableFutureExtensions.kt)
+ - [`Cffu.java`](cffu-core/src/main/java/io/foldright/cffu/Cffu.java)、[`CffuFactory.java`](cffu-core/src/main/java/io/foldright/cffu/CffuFactory.java)
+ - [`CompletableFutureUtils.java`](cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java)
## 3. 如何从直接使用`CompletableFuture`类迁移到`Cffu`类
-为了使用`cffu`增强功能,可以迁移已有直接使用`CompletableFuture`类的代码到`Cffu`类。包含2步修改:
+为了方便地使用`cffu`的增强功能与方法,可以迁移直接使用`CompletableFuture`类的已有代码到`Cffu`类:
- 在类型声明地方,`CompletableFuture`类改成`Cffu`类
- 在`CompletableFuture`静态方法调用的地方,类名`CompletableFuture`改成`cffuFactory`实例
@@ -538,7 +558,6 @@ public class MultipleActionsDemo {
# 🔌 API Docs
- 当前版本的`Java API`文档: https://foldright.io/api-docs/cffu/
-- 当前版本的`Kotlin API`文档: https://foldright.io/api-docs/cffu-kotlin/
代码示例:
@@ -553,38 +572,18 @@ public class MultipleActionsDemo {
io.foldright
cffu
- 1.0.0-Alpha28
-
- ```
- - For `Gradle` projects:
-
- ```groovy
- // Gradle Kotlin DSL
- implementation("io.foldright:cffu:1.0.0-Alpha28")
- ```
- ```groovy
- // Gradle Groovy DSL
- implementation 'io.foldright:cffu:1.0.0-Alpha28'
- ```
-- `cffu Kotlin`支持库:
- - For `Maven` projects:
-
- ```xml
-
- io.foldright
- cffu-kotlin
- 1.0.0-Alpha28
+ 1.0.0-Alpha29
```
- For `Gradle` projects:
```groovy
// Gradle Kotlin DSL
- implementation("io.foldright:cffu-kotlin:1.0.0-Alpha28")
+ implementation("io.foldright:cffu:1.0.0-Alpha29")
```
```groovy
// Gradle Groovy DSL
- implementation 'io.foldright:cffu-kotlin:1.0.0-Alpha28'
+ implementation 'io.foldright:cffu:1.0.0-Alpha29'
```
- `cffu bom`:
- For `Maven` projects:
@@ -593,7 +592,7 @@ public class MultipleActionsDemo {
io.foldright
cffu-bom
- 1.0.0-Alpha28
+ 1.0.0-Alpha29
pom
import
@@ -602,11 +601,11 @@ public class MultipleActionsDemo {
```groovy
// Gradle Kotlin DSL
- implementation(platform("io.foldright:cffu-bom:1.0.0-Alpha28"))
+ implementation(platform("io.foldright:cffu-bom:1.0.0-Alpha29"))
```
```groovy
// Gradle Groovy DSL
- implementation platform('io.foldright:cffu-bom:1.0.0-Alpha28')
+ implementation platform('io.foldright:cffu-bom:1.0.0-Alpha29')
```
- [📌 `TransmittableThreadLocal(TTL)`](https://github.com/alibaba/transmittable-thread-local)的[`cffu executor wrapper SPI`实现](cffu-ttl-executor-wrapper):
- For `Maven` projects:
@@ -615,7 +614,7 @@ public class MultipleActionsDemo {
io.foldright
cffu-ttl-executor-wrapper
- 1.0.0-Alpha28
+ 1.0.0-Alpha29
runtime
```
@@ -623,11 +622,11 @@ public class MultipleActionsDemo {
```groovy
// Gradle Kotlin DSL
- runtimeOnly("io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha28")
+ runtimeOnly("io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha29")
```
```groovy
// Gradle Groovy DSL
- runtimeOnly 'io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha28'
+ runtimeOnly 'io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha29'
```
# 📚 更多资料
diff --git a/cffu-bom/pom.xml b/cffu-bom/pom.xml
index e58e7604..209a63ce 100644
--- a/cffu-bom/pom.xml
+++ b/cffu-bom/pom.xml
@@ -72,11 +72,6 @@
cffu
${project.version}
-
- io.foldright
- cffu-kotlin
- ${project.version}
-
io.foldright
cffu-ttl-executor-wrapper
diff --git a/cffu-kotlin/README.md b/cffu-kotlin/README.md
new file mode 100644
index 00000000..289ac2a3
--- /dev/null
+++ b/cffu-kotlin/README.md
@@ -0,0 +1,34 @@
+# 🦝 `Cffu` kotlin support 🍩
+
+
+
+
+
+
+
+This module provides the extension methods to leverage Kotlin language.
+
+- `Kotlin API` documentation(dokka): https://foldright.io/api-docs/cffu-kotlin/
+- `Kotlin extensions`:
+ - [`CffuExtensions.kt`](src/main/java/io/foldright/cffu/kotlin/CffuExtensions.kt)
+ - [`CompletableFutureExtensions.kt`](src/main/java/io/foldright/cffu/kotlin/CompletableFutureExtensions.kt)
+- Dependency:
+ - For `Maven` projects:
+
+ ```xml
+
+ io.foldright
+ cffu-kotlin
+ 1.0.0-Alpha29
+
+ ```
+ - For `Gradle` projects:
+
+ ```groovy
+ // Gradle Kotlin DSL
+ implementation("io.foldright:cffu-kotlin:1.0.0-Alpha29")
+ ```
+ ```groovy
+ // Gradle Groovy DSL
+ implementation 'io.foldright:cffu-kotlin:1.0.0-Alpha29'
+ ```
diff --git a/cffu-listenable-future/README.md b/cffu-listenable-future/README.md
new file mode 100644
index 00000000..d098fd49
--- /dev/null
+++ b/cffu-listenable-future/README.md
@@ -0,0 +1,30 @@
+# Guava ListenableFuture Integration with CompletableFuture
+
+
+
+
+
+
+- Sources:
+ - [`ListenableFutureUtils.java`](src/main/java/io/foldright/cffu/lf/ListenableFutureUtils.java)
+ - [`ListenableFutureExtensions.kt`](src/main/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensions.kt)
+- Dependency:
+ - For `Maven` projects:
+
+ ```xml
+
+ io.foldright
+ cffu-listenable-future
+ 1.0.0-Alpha29
+
+ ```
+ - For `Gradle` projects:
+
+ ```groovy
+ // Gradle Kotlin DSL
+ implementation("io.foldright:cffu-listenable-future:1.0.0-Alpha29")
+ ```
+ ```groovy
+ // Gradle Groovy DSL
+ implementation 'io.foldright:cffu-listenable-future:1.0.0-Alpha29'
+ ```
diff --git a/cffu-listenable-future/pom.xml b/cffu-listenable-future/pom.xml
index df8e1ae4..9652c1e2 100644
--- a/cffu-listenable-future/pom.xml
+++ b/cffu-listenable-future/pom.xml
@@ -9,7 +9,7 @@
cffu-listenable-future
- ListenableFuture Integration to CompletableFuture
+ Guava ListenableFuture Integration with CF
${project.name}
https://github.com/foldright/cffu
2023
diff --git a/cffu-listenable-future/src/main/java/io/foldright/lf/ListenableFutureUtils.java b/cffu-listenable-future/src/main/java/io/foldright/cffu/lf/ListenableFutureUtils.java
similarity index 99%
rename from cffu-listenable-future/src/main/java/io/foldright/lf/ListenableFutureUtils.java
rename to cffu-listenable-future/src/main/java/io/foldright/cffu/lf/ListenableFutureUtils.java
index 5fdab90f..5ff87014 100644
--- a/cffu-listenable-future/src/main/java/io/foldright/lf/ListenableFutureUtils.java
+++ b/cffu-listenable-future/src/main/java/io/foldright/cffu/lf/ListenableFutureUtils.java
@@ -1,4 +1,4 @@
-package io.foldright.lf;
+package io.foldright.cffu.lf;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
diff --git a/cffu-listenable-future/src/main/java/io/foldright/lf/kotlin/ListenableFutureExtensions.kt b/cffu-listenable-future/src/main/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensions.kt
similarity index 95%
rename from cffu-listenable-future/src/main/java/io/foldright/lf/kotlin/ListenableFutureExtensions.kt
rename to cffu-listenable-future/src/main/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensions.kt
index 8ddf8426..e397dbca 100644
--- a/cffu-listenable-future/src/main/java/io/foldright/lf/kotlin/ListenableFutureExtensions.kt
+++ b/cffu-listenable-future/src/main/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensions.kt
@@ -1,10 +1,10 @@
-package io.foldright.lf.kotlin
+package io.foldright.cffu.lf.kotlin
import com.google.common.util.concurrent.ListenableFuture
import com.google.common.util.concurrent.MoreExecutors
import io.foldright.cffu.Cffu
import io.foldright.cffu.CffuFactory
-import io.foldright.lf.ListenableFutureUtils
+import io.foldright.cffu.lf.ListenableFutureUtils
import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executor
diff --git a/cffu-listenable-future/src/test/java/io/foldright/lf/ListenableFutureUtilsTest.java b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/ListenableFutureUtilsTest.java
similarity index 99%
rename from cffu-listenable-future/src/test/java/io/foldright/lf/ListenableFutureUtilsTest.java
rename to cffu-listenable-future/src/test/java/io/foldright/cffu/lf/ListenableFutureUtilsTest.java
index 44cfc69f..e07fa57b 100644
--- a/cffu-listenable-future/src/test/java/io/foldright/lf/ListenableFutureUtilsTest.java
+++ b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/ListenableFutureUtilsTest.java
@@ -1,4 +1,4 @@
-package io.foldright.lf;
+package io.foldright.cffu.lf;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -13,7 +13,7 @@
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
-import static io.foldright.lf.ListenableFutureUtils.*;
+import static io.foldright.cffu.lf.ListenableFutureUtils.*;
import static io.foldright.test_utils.TestUtils.*;
import static io.foldright.test_utils.TestingConstants.*;
import static io.foldright.test_utils.TestingExecutorUtils.testCffuFac;
diff --git a/cffu-listenable-future/src/test/java/io/foldright/lf/kotlin/ListenableFutureExtensionsTest.kt b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensionsTest.kt
similarity index 91%
rename from cffu-listenable-future/src/test/java/io/foldright/lf/kotlin/ListenableFutureExtensionsTest.kt
rename to cffu-listenable-future/src/test/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensionsTest.kt
index f159cf5c..f731acb1 100644
--- a/cffu-listenable-future/src/test/java/io/foldright/lf/kotlin/ListenableFutureExtensionsTest.kt
+++ b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/kotlin/ListenableFutureExtensionsTest.kt
@@ -1,10 +1,10 @@
-package io.foldright.lf.kotlin
+package io.foldright.cffu.lf.kotlin
import com.google.common.util.concurrent.Futures
import io.foldright.cffu.CompletableFutureUtils.failedFuture
-import io.foldright.lf.kotlin.toCffu
-import io.foldright.lf.kotlin.toCompletableFuture
-import io.foldright.lf.kotlin.toListenableFuture
+import io.foldright.cffu.lf.kotlin.toCffu
+import io.foldright.cffu.lf.kotlin.toCompletableFuture
+import io.foldright.cffu.lf.kotlin.toListenableFuture
import io.foldright.test_utils.n
import io.foldright.test_utils.rte
import io.foldright.test_utils.testCffuFac
diff --git a/cffu-listenable-future/src/test/java/io/foldright/lf/study/ListenableFutureUsageStudyCaseTest.kt b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/study/ListenableFutureUsageStudyCaseTest.kt
similarity index 98%
rename from cffu-listenable-future/src/test/java/io/foldright/lf/study/ListenableFutureUsageStudyCaseTest.kt
rename to cffu-listenable-future/src/test/java/io/foldright/cffu/lf/study/ListenableFutureUsageStudyCaseTest.kt
index 66fb06a5..3d6442d7 100644
--- a/cffu-listenable-future/src/test/java/io/foldright/lf/study/ListenableFutureUsageStudyCaseTest.kt
+++ b/cffu-listenable-future/src/test/java/io/foldright/cffu/lf/study/ListenableFutureUsageStudyCaseTest.kt
@@ -1,4 +1,4 @@
-package io.foldright.lf.study
+package io.foldright.cffu.lf.study
import com.google.common.util.concurrent.Futures
import com.google.common.util.concurrent.ListenableFuture
diff --git a/cffu-ttl-executor-wrapper/README.md b/cffu-ttl-executor-wrapper/README.md
index c9ee2726..86d8fdab 100644
--- a/cffu-ttl-executor-wrapper/README.md
+++ b/cffu-ttl-executor-wrapper/README.md
@@ -18,7 +18,7 @@ For `Maven` projects:
io.foldright
cffu-ttl-executor-wrapper
runtime
- 1.0.0-Alpha28
+ 1.0.0-Alpha29
```
@@ -26,12 +26,12 @@ For `Gradle` projects:
```groovy
// Gradle Kotlin DSL
-runtimeOnly("io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha28")
+runtimeOnly("io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha29")
```
```groovy
// Gradle Groovy DSL
-runtimeOnly 'io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha28'
+runtimeOnly 'io.foldright:cffu-ttl-executor-wrapper:1.0.0-Alpha29'
```
`cffu-ttl-executor-wrapper` has published to maven central, find the latest version at
diff --git a/scripts/bump_cffu_version.sh b/scripts/bump_cffu_version.sh
index 44a259f1..9df89527 100755
--- a/scripts/bump_cffu_version.sh
+++ b/scripts/bump_cffu_version.sh
@@ -4,29 +4,20 @@ set -eEuo pipefail
SELF_PATH=$(realpath -- "$0")
readonly SELF_PATH SELF_DIR=${SELF_PATH%/*}
# cd to script dir
-cd "$SELF_DIR"
+cd "$SELF_DIR"/..
-source "$PWD/bash-buddy/lib/trap_error_info.sh"
-source "$PWD/bash-buddy/lib/common_utils.sh"
-source "$PWD/bash-buddy/lib/java_utils.sh"
-source "$PWD/bash-buddy/lib/maven_utils.sh"
-
-readonly newline=$'\n'
+source "$SELF_DIR/bash-buddy/lib/trap_error_info.sh"
+source "$SELF_DIR/bash-buddy/lib/common_utils.sh"
+source "$SELF_DIR/bash-buddy/lib/java_utils.sh"
+source "$SELF_DIR/bash-buddy/lib/maven_utils.sh"
# shellcheck disable=SC2154
-[ $# -ne 1 ] && cu::die "need only 1 argument for version!$newline${newline}usage:$newline $0 x.y.z"
-readonly new_version="$1"
-
-bump_cffu_version() {
- mvu::mvn_cmd \
- org.codehaus.mojo:versions-maven-plugin:2.15.0:set \
- -DgenerateBackupPoms=false \
- -DprocessAllModules=true \
- -DnewVersion="$new_version"
-}
+[ $# -ne 2 ] && cu::die "need only 2 argument for old and new versions!"
-cd ..
-bump_cffu_version
+readonly old_version="$1"
+readonly new_version="$2"
-cd demos
-bump_cffu_version
+# shellcheck disable=SC2046
+sed -i "s/1.0.0-Alpha29/$new_version/g" $(rg 1.0.0-Alpha29 -l)
+# shellcheck disable=SC2046
+sed -i "s/$old_version/$new_version/g" $(rg "$old_version" -l)