update dependency

This commit is contained in:
Looly 2025-10-12 03:52:50 +08:00
parent 0668337338
commit e52ce85042
22 changed files with 78 additions and 257 deletions

View File

@ -25,8 +25,6 @@ import cn.hutool.v7.core.lang.Assert;
import cn.hutool.v7.core.lang.Validator; import cn.hutool.v7.core.lang.Validator;
import cn.hutool.v7.core.lang.mutable.Mutable; import cn.hutool.v7.core.lang.mutable.Mutable;
import cn.hutool.v7.core.lang.mutable.MutableObj; import cn.hutool.v7.core.lang.mutable.MutableObj;
import cn.hutool.v7.core.map.MapUtil;
import cn.hutool.v7.core.reflect.method.MethodUtil;
import cn.hutool.v7.core.text.StrUtil; import cn.hutool.v7.core.text.StrUtil;
import java.util.*; import java.util.*;
@ -244,37 +242,6 @@ public class ReUtil {
} }
return result; return result;
} }
/**
* 根据给定正则查找字符串中的匹配项返回所有匹配的分组名对应分组值<br>
* <pre>
* pattern: (?&lt;year&gt;\\d+)-(?&lt;month&gt;\\d+)-(?&lt;day&gt;\\d+)
* content: 2021-10-11
* result : year: 2021, month: 10, day: 11
* </pre>
*
* <p>jdk9+之后此方法无效</p>
*
* @param pattern 匹配的正则
* @param content 被匹配的内容
* @return 命名捕获组key为分组名value为对应值
* @since 5.7.15
*/
public static Map<String, String> getAllGroupNames(final Pattern pattern, final CharSequence content) {
if (null == content || null == pattern) {
return null;
}
final Matcher m = pattern.matcher(content);
final Map<String, String> result = MapUtil.newHashMap(m.groupCount());
if (m.find()) {
// 通过反射获取 namedGroups 方法
final Map<String, Integer> map =
//MethodHandleUtil.invokeSpecial(pattern, "namedGroups");
MethodUtil.invoke(pattern, "namedGroups");
map.forEach((key, value) -> result.put(key, m.group(value)));
}
return result;
}
// endregion // endregion
// region ----- extractMulti // region ----- extractMulti
@ -943,7 +910,7 @@ public class ReUtil {
if (result) { if (result) {
final Set<String> varNums = findAll(PatternPool.GROUP_VAR, replacementTemplate, 1, final Set<String> varNums = findAll(PatternPool.GROUP_VAR, replacementTemplate, 1,
new TreeSet<>(StrLengthComparator.INSTANCE.reversed())); new TreeSet<>(StrLengthComparator.INSTANCE.reversed()));
final StringBuffer sb = new StringBuffer(); final StringBuilder sb = new StringBuilder();
do { do {
String replacement = replacementTemplate; String replacement = replacementTemplate;
for (final String var : varNums) { for (final String var : varNums) {
@ -1003,7 +970,7 @@ public class ReUtil {
} }
final Matcher matcher = pattern.matcher(str); final Matcher matcher = pattern.matcher(str);
final StringBuffer buffer = new StringBuffer(); final StringBuilder buffer = new StringBuilder();
while (matcher.find()) { while (matcher.find()) {
matcher.appendReplacement(buffer, replaceFun.apply(matcher)); matcher.appendReplacement(buffer, replaceFun.apply(matcher));
} }

View File

@ -24,8 +24,6 @@ import cn.hutool.v7.core.util.ObjUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.lang.annotation.*; import java.lang.annotation.*;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -191,17 +189,6 @@ public class AnnotationUtilTest {
Assertions.assertFalse(AnnotationUtil.isInherited(MetaAnnotationForTest.class)); Assertions.assertFalse(AnnotationUtil.isInherited(MetaAnnotationForTest.class));
} }
@Test
@EnabledForJreRange(max = JRE.JAVA_8)
public void testSetValue() {
// jdk9+中抛出异常须添加`--add-opens=java.base/java.lang=ALL-UNNAMED`启动参数
final AnnotationForTest annotation = ClassForTest.class.getAnnotation(AnnotationForTest.class);
final String newValue = "is a new value";
Assertions.assertNotEquals(newValue, annotation.value());
AnnotationUtil.setValue(annotation, "value", newValue);
assertEquals(newValue, annotation.value());
}
@Test @Test
public void testGetAnnotationAlias() { public void testGetAnnotationAlias() {
final MetaAnnotationForTest annotation = AnnotationUtil.getAnnotation(AnnotationForTest.class, MetaAnnotationForTest.class); final MetaAnnotationForTest annotation = AnnotationUtil.getAnnotation(AnnotationForTest.class, MetaAnnotationForTest.class);

View File

@ -18,7 +18,6 @@ package cn.hutool.v7.core.func;
import cn.hutool.v7.core.collection.ListUtil; import cn.hutool.v7.core.collection.ListUtil;
import cn.hutool.v7.core.exception.ExceptionUtil; import cn.hutool.v7.core.exception.ExceptionUtil;
import cn.hutool.v7.core.reflect.ConstructorUtil;
import cn.hutool.v7.core.reflect.lookup.LookupUtil; import cn.hutool.v7.core.reflect.lookup.LookupUtil;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
@ -26,8 +25,8 @@ import lombok.Setter;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import java.lang.invoke.*; import java.lang.invoke.*;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@ -37,7 +36,6 @@ import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -46,6 +44,7 @@ import java.util.function.Supplier;
*/ */
public class LambdaFactoryTest { public class LambdaFactoryTest {
@SuppressWarnings("CatchMayIgnoreException")
@Test @Test
public void testMethodNotMatch() { public void testMethodNotMatch() {
try { try {
@ -87,7 +86,8 @@ public class LambdaFactoryTest {
* *
* @author nasodaengineer * @author nasodaengineer
*/ */
public static class PerformanceTest { @Nested
class PerformanceTest {
public int count; public int count;
@ -312,7 +312,7 @@ public class LambdaFactoryTest {
public String format() { public String format() {
final TimeUnit timeUnit = TimeUnit.NANOSECONDS; final TimeUnit timeUnit = TimeUnit.NANOSECONDS;
return String.format("%-10s 运行%d次耗时 %d %s", name, count, timeUnit.convert(cost, TimeUnit.NANOSECONDS), timeUnit.name()); return String.format("%-10s 运行%d次耗时 %d %s", name, count, cost, timeUnit.name());
} }
} }
@ -330,17 +330,4 @@ public class LambdaFactoryTest {
} }
} }
} }
@SuppressWarnings("unchecked")
@Test
@EnabledForJreRange(max = org.junit.jupiter.api.condition.JRE.JAVA_8)
public void buildStringTest() {
final char[] a = "1234".toCharArray();
// JDK8下无此构造方法
final Constructor<String> constructor = ConstructorUtil.getConstructor(String.class, char[].class, boolean.class);
final BiFunction<char[], Boolean, String> function = LambdaFactory.build(BiFunction.class, constructor);
final String apply = function.apply(a, true);
Assertions.assertEquals(apply, new String(a));
}
} }

View File

@ -16,16 +16,14 @@
package cn.hutool.v7.core.func; package cn.hutool.v7.core.func;
import cn.hutool.v7.core.lang.tuple.Tuple;
import cn.hutool.v7.core.reflect.method.MethodUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import cn.hutool.v7.core.lang.tuple.Tuple;
import cn.hutool.v7.core.reflect.method.MethodUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -193,19 +191,6 @@ public class LambdaUtilTest {
Assertions.assertEquals(3L, (long) bean.getId()); Assertions.assertEquals(3L, (long) bean.getId());
} }
@Test
@EnabledForJreRange(max = JRE.JAVA_8)
void buildSetterWithPrimitiveTest() {
// 原始类型参数在jdk9+中构建setter异常
final Bean bean = new Bean();
bean.setId(2L);
bean.setFlag(false);
final BiConsumer<Bean, Object> setter = LambdaUtil.buildSetter(Bean.class, "flag");
setter.accept(bean, Boolean.TRUE);
Assertions.assertTrue(bean.isFlag());
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Test @Test
public void lambdaTest() { public void lambdaTest() {

View File

@ -20,8 +20,6 @@ import cn.hutool.v7.core.io.resource.ClassPathResource;
import cn.hutool.v7.core.text.StrUtil; import cn.hutool.v7.core.text.StrUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.IOException; import java.io.IOException;
import java.util.Properties; import java.util.Properties;
@ -40,26 +38,6 @@ public class ClassPathResourceTest {
Assertions.assertTrue(StrUtil.isNotEmpty(content)); Assertions.assertTrue(StrUtil.isNotEmpty(content));
} }
@Test()
@EnabledForJreRange(max = JRE.JAVA_8)
public void readStringTest2() {
// JDK9+中因为模块的加入根路径读取可能为空
// 读取classpath根目录测试
final ClassPathResource resource = new ClassPathResource("/");
final String content = resource.readUtf8Str();
Assertions.assertTrue(StrUtil.isNotEmpty(content));
}
@Test()
@EnabledForJreRange(min = JRE.JAVA_9)
public void readStringTestForJdk9() {
// JDK9+中因为模块的加入根路径读取可能为空
// 读取classpath根目录测试
final ClassPathResource resource = new ClassPathResource("/");
final String content = resource.readUtf8Str();
Assertions.assertNotNull(content);
}
@Test @Test
public void readTest() throws IOException { public void readTest() throws IOException {
final ClassPathResource resource = new ClassPathResource("test.properties"); final ClassPathResource resource = new ClassPathResource("test.properties");

View File

@ -23,8 +23,6 @@ import cn.hutool.v7.core.util.SystemUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.io.File; import java.io.File;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -220,20 +218,6 @@ public class FileUtilTest {
Assertions.assertEquals("", subPath); Assertions.assertEquals("", subPath);
} }
@Test
@EnabledForJreRange(max = JRE.JAVA_8)
public void listFileNamesTest() {
// JDK9+由于模块化问题获取的classoath路径非项目下而是junit下的
List<String> names = FileUtil.listFileNames("classpath:");
assertTrue(names.contains("hutool.jpg"));
names = FileUtil.listFileNames("");
assertTrue(names.contains("hutool.jpg"));
names = FileUtil.listFileNames(".");
assertTrue(names.contains("hutool.jpg"));
}
@Test @Test
@Disabled @Disabled
public void listFileNamesInJarTest() { public void listFileNamesInJarTest() {
@ -379,15 +363,6 @@ public class FileUtilTest {
Assertions.assertEquals("tar.xz", mainName); Assertions.assertEquals("tar.xz", mainName);
} }
@Test
@EnabledForJreRange(max = JRE.JAVA_8)
public void getWebRootTest() {
// JDK9+环境中由于模块问题junit获取的classpath路径和实际不同
final File webRoot = FileUtil.getWebRoot();
Assertions.assertNotNull(webRoot);
Assertions.assertEquals("hutool-core", webRoot.getName());
}
@Test @Test
public void getMimeTypeTest() { public void getMimeTypeTest() {
String mimeType = FileUtil.getMimeType("test2Write.jpg"); String mimeType = FileUtil.getMimeType("test2Write.jpg");

View File

@ -38,7 +38,6 @@ public class SingletonTest {
*/ */
@SuppressWarnings("resource") @SuppressWarnings("resource")
@Test @Test
@DisabledOnJre(JRE.JAVA_8)
public void getTest(){ public void getTest(){
// 此测试中使用1000个线程获取单例对象其间对象只被创建一次 // 此测试中使用1000个线程获取单例对象其间对象只被创建一次
ThreadUtil.concurrencyTest(1000, ()-> Singleton.get(TestBean.class)); ThreadUtil.concurrencyTest(1000, ()-> Singleton.get(TestBean.class));

View File

@ -18,14 +18,12 @@ package cn.hutool.v7.core.map;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
public class Issue2349Test { public class Issue2349Test {
@Test @Test
@EnabledForJreRange(min = org.junit.jupiter.api.condition.JRE.JAVA_9)
public void issue11986ForJava17Test() { public void issue11986ForJava17Test() {
// https://github.com/apache/dubbo/issues/11986 // https://github.com/apache/dubbo/issues/11986
final ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); final ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();

View File

@ -18,9 +18,8 @@ package cn.hutool.v7.core.math;
import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.lang.Console;
import cn.hutool.v7.core.text.StrUtil; import cn.hutool.v7.core.text.StrUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
@ -274,43 +273,43 @@ public class NumberUtilTest {
@Test @Test
public void roundStrTest() { public void roundStrTest() {
final String roundStr = NumberUtil.roundStr(2.647, 2); final String roundStr = NumberUtil.roundStr(2.647, 2);
assertEquals(roundStr, "2.65"); assertEquals("2.65", roundStr);
final String roundStr1 = NumberUtil.roundStr(0, 10); final String roundStr1 = NumberUtil.roundStr(0, 10);
assertEquals(roundStr1, "0.0000000000"); assertEquals("0.0000000000", roundStr1);
} }
@Test @Test
public void roundHalfEvenTest() { public void roundHalfEvenTest() {
String roundStr = NumberUtil.roundHalfEven(4.245, 2).toString(); String roundStr = NumberUtil.roundHalfEven(4.245, 2).toString();
assertEquals(roundStr, "4.24"); assertEquals("4.24", roundStr);
roundStr = NumberUtil.roundHalfEven(4.2450, 2).toString(); roundStr = NumberUtil.roundHalfEven(4.2450, 2).toString();
assertEquals(roundStr, "4.24"); assertEquals("4.24", roundStr);
roundStr = NumberUtil.roundHalfEven(4.2451, 2).toString(); roundStr = NumberUtil.roundHalfEven(4.2451, 2).toString();
assertEquals(roundStr, "4.25"); assertEquals("4.25", roundStr);
roundStr = NumberUtil.roundHalfEven(4.2250, 2).toString(); roundStr = NumberUtil.roundHalfEven(4.2250, 2).toString();
assertEquals(roundStr, "4.22"); assertEquals("4.22", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2050, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2050, 2).toString();
assertEquals(roundStr, "1.20"); assertEquals("1.20", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2150, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2150, 2).toString();
assertEquals(roundStr, "1.22"); assertEquals("1.22", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2250, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2250, 2).toString();
assertEquals(roundStr, "1.22"); assertEquals("1.22", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2350, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2350, 2).toString();
assertEquals(roundStr, "1.24"); assertEquals("1.24", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2450, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2450, 2).toString();
assertEquals(roundStr, "1.24"); assertEquals("1.24", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2550, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2550, 2).toString();
assertEquals(roundStr, "1.26"); assertEquals("1.26", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2650, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2650, 2).toString();
assertEquals(roundStr, "1.26"); assertEquals("1.26", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2750, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2750, 2).toString();
assertEquals(roundStr, "1.28"); assertEquals("1.28", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2850, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2850, 2).toString();
assertEquals(roundStr, "1.28"); assertEquals("1.28", roundStr);
roundStr = NumberUtil.roundHalfEven(1.2950, 2).toString(); roundStr = NumberUtil.roundHalfEven(1.2950, 2).toString();
assertEquals(roundStr, "1.30"); assertEquals("1.30", roundStr);
} }
@Test @Test
@ -773,12 +772,9 @@ public class NumberUtilTest {
} }
@Test @Test
@EnabledForJreRange(max = JRE.JAVA_8) void numberFormatTest() throws ParseException {
void numberFormatTest() { final Number naN = NumberFormat.getInstance().parse("NaN");
// JDK8下NaN解析报错JDK9+中返回0 Assertions.assertEquals(0, naN.intValue());
assertThrows(ParseException.class, ()->{
NumberFormat.getInstance().parse("NaN");
});
} }
@Test @Test

View File

@ -18,9 +18,7 @@ package cn.hutool.v7.core.reflect;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -80,32 +78,6 @@ public class ModifierUtilTest {
private static void ddd() { private static void ddd() {
} }
@Test
@EnabledForJreRange(max = org.junit.jupiter.api.condition.JRE.JAVA_8)
void removeFinalModifyTest() {
final String fieldName = "DIALECTS";
final Field field = FieldUtil.getField(JdbcDialects.class, fieldName);
ModifierUtil.removeFinalModify(field);
}
@Test
@EnabledForJreRange(max = org.junit.jupiter.api.condition.JRE.JAVA_8)
public void setFinalFieldValueTest() {
final String fieldName = "DIALECTS";
final List<Number> dialects =
Arrays.asList(
1,
2,
3,
99
);
final Field field = FieldUtil.getField(JdbcDialects.class, fieldName);
ModifierUtil.removeFinalModify(field);
FieldUtil.setFieldValue(JdbcDialects.class, fieldName, dialects);
Assertions.assertEquals(dialects, FieldUtil.getFieldValue(JdbcDialects.class, fieldName));
}
@SuppressWarnings("unused") @SuppressWarnings("unused")
public static class JdbcDialects { public static class JdbcDialects {
private static final List<Number> DIALECTS = private static final List<Number> DIALECTS =

View File

@ -21,11 +21,9 @@ import cn.hutool.v7.core.lang.Console;
import cn.hutool.v7.core.text.StrUtil; import cn.hutool.v7.core.text.StrUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@ -213,17 +211,6 @@ public class ReUtilTest {
assertEquals("11", day); assertEquals("11", day);
} }
@Test
@EnabledForJreRange(max = org.junit.jupiter.api.condition.JRE.JAVA_8)
public void getAllGroupNamesTest() {
final String content = "2021-10-11";
final String regex = "(?<year>\\d+)-(?<month>\\d+)-(?<day>\\d+)";
final Map<String, String> map = ReUtil.getAllGroupNames(PatternPool.get(regex, Pattern.DOTALL), content);
assertEquals(map.get("year"), "2021");
assertEquals(map.get("month"), "10");
assertEquals(map.get("day"), "11");
}
@Test @Test
public void issuesI5TQDRTest(){ public void issuesI5TQDRTest(){
final Pattern patternIp = Pattern.compile("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})\\.((2(5[0-5]|[0-4]\\d))" final Pattern patternIp = Pattern.compile("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})\\.((2(5[0-5]|[0-4]\\d))"

View File

@ -50,6 +50,7 @@
<dependency> <dependency>
<groupId>org.quartz-scheduler</groupId> <groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId> <artifactId>quartz</artifactId>
<!-- 2.5.0有bug只能使用2.4.0https://github.com/quartz-scheduler/quartz/issues/1298 -->
<version>2.4.0</version> <version>2.4.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>

View File

@ -2,6 +2,7 @@ package cn.hutool.v7.cron.pattern;
import cn.hutool.v7.core.date.DateTime; import cn.hutool.v7.core.date.DateTime;
import cn.hutool.v7.core.date.DateUtil; import cn.hutool.v7.core.date.DateUtil;
import cn.hutool.v7.core.text.StrUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.quartz.CronExpression; import org.quartz.CronExpression;
@ -123,9 +124,9 @@ public class Issue4056Test {
final CronPattern hutoolCorn = new CronPattern(cron); final CronPattern hutoolCorn = new CronPattern(cron);
final CronExpression quartzCorn = new CronExpression(cron); final CronExpression quartzCorn = new CronExpression(cron);
for (final DateTime judgeTime : judgeTimes) { for (final DateTime judgeTime : judgeTimes) {
final Date quartzDate = quartzCorn.getNextValidTimeAfter(judgeTime); final Date quartzDate = DateUtil.date(quartzCorn.getNextValidTimeAfter(judgeTime));
final Date hutoolDate = CronPatternUtil.nextDateAfter(hutoolCorn, judgeTime); final Date hutoolDate = CronPatternUtil.nextDateAfter(hutoolCorn, judgeTime);
Assertions.assertEquals(quartzDate, hutoolDate); Assertions.assertEquals(quartzDate, hutoolDate, StrUtil.format("cron:{}, judgeTime:{}", cron, judgeTime.toString()));
} }
} }
} }

View File

@ -35,12 +35,12 @@
<properties> <properties>
<Automatic-Module-Name>cn.hutool.v7.db</Automatic-Module-Name> <Automatic-Module-Name>cn.hutool.v7.db</Automatic-Module-Name>
<!-- versions --> <!-- versions -->
<c3p0.version>0.10.1</c3p0.version> <c3p0.version>0.11.2</c3p0.version>
<dbcp2.version>2.12.0</dbcp2.version> <dbcp2.version>2.13.0</dbcp2.version>
<tomcat-jdbc.version>11.0.6</tomcat-jdbc.version> <tomcat-jdbc.version>11.0.12</tomcat-jdbc.version>
<druid.version>1.2.23</druid.version> <druid.version>1.2.27</druid.version>
<hikariCP.version>6.3.0</hikariCP.version> <hikariCP.version>7.0.2</hikariCP.version>
<sqlite.version>3.46.0.0</sqlite.version> <sqlite.version>3.50.3.0</sqlite.version>
<hsqldb.version>2.7.4</hsqldb.version> <hsqldb.version>2.7.4</hsqldb.version>
</properties> </properties>
@ -78,12 +78,6 @@
<groupId>com.zaxxer</groupId> <groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId> <artifactId>HikariCP</artifactId>
<version>${hikariCP.version}</version> <version>${hikariCP.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -95,7 +89,7 @@
<dependency> <dependency>
<groupId>com.github.chris2018998</groupId> <groupId>com.github.chris2018998</groupId>
<artifactId>beecp</artifactId> <artifactId>beecp</artifactId>
<version>4.1.3</version> <version>5.0.0</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
@ -127,13 +121,13 @@
<dependency> <dependency>
<groupId>com.mysql</groupId> <groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId> <artifactId>mysql-connector-j</artifactId>
<version>9.3.0</version> <version>9.4.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
<version>2.3.232</version> <version>2.4.240</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
@ -145,19 +139,19 @@
<dependency> <dependency>
<groupId>com.oracle.database.jdbc</groupId> <groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId> <artifactId>ojdbc8</artifactId>
<version>23.6.0.24.10</version> <version>23.9.0.25.07</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.oceanbase</groupId> <groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId> <artifactId>oceanbase-client</artifactId>
<version>2.4.12</version> <version>2.4.15</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.sap.cloud.db.jdbc</groupId> <groupId>com.sap.cloud.db.jdbc</groupId>
<artifactId>ngdbc</artifactId> <artifactId>ngdbc</artifactId>
<version>2.24.7</version> <version>2.26.6</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -37,38 +37,39 @@
<!-- template versions --> <!-- template versions -->
<velocity.version>2.4.1</velocity.version> <velocity.version>2.4.1</velocity.version>
<beetl.version>3.19.1.RELEASE</beetl.version> <beetl.version>3.19.2.RELEASE</beetl.version>
<rythm.version>1.4.2</rythm.version> <rythm.version>1.4.2</rythm.version>
<freemarker.version>2.3.34</freemarker.version> <freemarker.version>2.3.34</freemarker.version>
<enjoy.version>5.2.2</enjoy.version> <enjoy.version>5.2.5</enjoy.version>
<thymeleaf.version>3.1.3.RELEASE</thymeleaf.version> <thymeleaf.version>3.1.3.RELEASE</thymeleaf.version>
<jte.version>3.2.0</jte.version> <jte.version>3.2.1</jte.version>
<!-- 保持2.1.10关联的antlr4与Beetl有兼容问题 -->
<jetbrick-template.version>2.1.10</jetbrick-template.version> <jetbrick-template.version>2.1.10</jetbrick-template.version>
<pebble.version>3.2.4</pebble.version> <pebble.version>3.2.4</pebble.version>
<wit-core.version>2.6.0</wit-core.version> <wit-core.version>2.6.0</wit-core.version>
<!-- mail versions --> <!-- mail versions -->
<mail-api.version>2.1.3</mail-api.version> <mail-api.version>2.1.5</mail-api.version>
<jakarta.mail.version>2.0.3</jakarta.mail.version> <jakarta.mail.version>2.0.5</jakarta.mail.version>
<!-- ssh versions --> <!-- ssh versions -->
<jsch.version>0.2.21</jsch.version> <jsch.version>2.27.3</jsch.version>
<sshj.version>0.40.0</sshj.version> <sshj.version>0.40.0</sshj.version>
<sshd.version>2.15.0</sshd.version> <sshd.version>2.16.0</sshd.version>
<ganymed-ssh2.version>262</ganymed-ssh2.version> <ganymed-ssh2.version>262</ganymed-ssh2.version>
<net.version>3.11.1</net.version> <net.version>3.11.1</net.version>
<emoji-java.version>5.1.1</emoji-java.version> <emoji-java.version>5.1.1</emoji-java.version>
<spring-boot.version>3.5.3</spring-boot.version> <spring-boot.version>3.5.3</spring-boot.version>
<oshi.version>6.8.1</oshi.version> <oshi.version>6.9.0</oshi.version>
<byte-buddy.version>1.17.5</byte-buddy.version> <byte-buddy.version>1.17.8</byte-buddy.version>
<commons-compress.version>1.27.1</commons-compress.version> <commons-compress.version>1.28.0</commons-compress.version>
<smartcn.version>8.11.4</smartcn.version> <smartcn.version>8.11.4</smartcn.version>
<jaxb-runtime.version>3.0.2</jaxb-runtime.version> <jaxb-runtime.version>4.0.6</jaxb-runtime.version>
<!-- mq client versions --> <!-- mq client versions -->
<kafka.version>4.0.0</kafka.version> <kafka.version>4.1.0</kafka.version>
<rabbitmq.version>5.25.0</rabbitmq.version> <rabbitmq.version>5.26.0</rabbitmq.version>
<rocketmq.version>5.3.3</rocketmq.version> <rocketmq.version>5.3.3</rocketmq.version>
<activemq.version>6.1.7</activemq.version> <activemq.version>6.1.7</activemq.version>
</properties> </properties>
@ -189,10 +190,6 @@
<artifactId>jetbrick-template</artifactId> <artifactId>jetbrick-template</artifactId>
<version>${jetbrick-template.version}</version> <version>${jetbrick-template.version}</version>
<exclusions> <exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion> <exclusion>
<artifactId>antlr4-runtime</artifactId> <artifactId>antlr4-runtime</artifactId>
<groupId>org.antlr</groupId> <groupId>org.antlr</groupId>
@ -467,14 +464,14 @@
<dependency> <dependency>
<groupId>jakarta.validation</groupId> <groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId> <artifactId>jakarta.validation-api</artifactId>
<version>3.1.0</version> <version>3.1.1</version>
<scope>compile</scope> <scope>compile</scope>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate.validator</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
<version>8.0.2.Final</version> <version>9.0.1.Final</version>
<scope>test</scope> <scope>test</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
@ -520,7 +517,7 @@
<dependency> <dependency>
<groupId>jakarta.xml.bind</groupId> <groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId> <artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version> <version>4.0.4</version>
<scope>provided</scope> <scope>provided</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>

View File

@ -16,17 +16,14 @@
package cn.hutool.v7.extra.spring.cglib; package cn.hutool.v7.extra.spring.cglib;
import lombok.Data;
import cn.hutool.v7.core.convert.ConvertUtil; import cn.hutool.v7.core.convert.ConvertUtil;
import lombok.Data;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledForJreRange;
import org.junit.jupiter.api.condition.JRE;
public class CglibUtilTest { public class CglibUtilTest {
@Test @Test
@EnabledForJreRange(max = JRE.JAVA_8)
public void copyTest() { public void copyTest() {
final SampleBean bean = new SampleBean(); final SampleBean bean = new SampleBean();
OtherSampleBean otherBean = new OtherSampleBean(); OtherSampleBean otherBean = new OtherSampleBean();

View File

@ -34,12 +34,12 @@
<properties> <properties>
<Automatic-Module-Name>cn.hutool.v7.http</Automatic-Module-Name> <Automatic-Module-Name>cn.hutool.v7.http</Automatic-Module-Name>
<httpclient5.version>5.5</httpclient5.version> <httpclient5.version>5.5.1</httpclient5.version>
<httpclient4.version>4.5.14</httpclient4.version> <httpclient4.version>4.5.14</httpclient4.version>
<okhttp.version>5.0.0-alpha.14</okhttp.version> <okhttp.version>5.2.1</okhttp.version>
<undertow.version>2.3.18.Final</undertow.version> <undertow.version>2.3.18.Final</undertow.version>
<jetty.version>12.0.19</jetty.version> <jetty.version>12.1.2</jetty.version>
<tomcat.version>11.0.8</tomcat.version> <tomcat.version>11.0.12</tomcat.version>
<smartboot.version>1.4.3</smartboot.version> <smartboot.version>1.4.3</smartboot.version>
<jakarta.servlet-api.version>6.1.0</jakarta.servlet-api.version> <jakarta.servlet-api.version>6.1.0</jakarta.servlet-api.version>
<jakarta.xml.soap-api.version>3.0.2</jakarta.xml.soap-api.version> <jakarta.xml.soap-api.version>3.0.2</jakarta.xml.soap-api.version>

View File

@ -35,10 +35,10 @@
<properties> <properties>
<Automatic-Module-Name>cn.hutool.v7.json</Automatic-Module-Name> <Automatic-Module-Name>cn.hutool.v7.json</Automatic-Module-Name>
<!-- versions --> <!-- versions -->
<jjwt.version>0.12.6</jjwt.version> <jjwt.version>0.13.0</jjwt.version>
<jackson.version>2.19.1</jackson.version> <jackson.version>2.20.0</jackson.version>
<fastjson2.version>2.0.53</fastjson2.version> <fastjson2.version>2.0.59</fastjson2.version>
<gson.version>2.13.1</gson.version> <gson.version>2.13.2</gson.version>
<moshi.version>1.15.2</moshi.version> <moshi.version>1.15.2</moshi.version>
</properties> </properties>

View File

@ -36,7 +36,7 @@
<Automatic-Module-Name>cn.hutool.v7.log</Automatic-Module-Name> <Automatic-Module-Name>cn.hutool.v7.log</Automatic-Module-Name>
<!-- versions --> <!-- versions -->
<slf4j.version>2.0.17</slf4j.version> <slf4j.version>2.0.17</slf4j.version>
<logback.version>1.5.18</logback.version> <logback.version>1.5.19</logback.version>
<log4j.version>1.2.17</log4j.version> <log4j.version>1.2.17</log4j.version>
<log4j2.version>2.25.0</log4j2.version> <log4j2.version>2.25.0</log4j2.version>
<commons-logging.version>1.3.5</commons-logging.version> <commons-logging.version>1.3.5</commons-logging.version>

View File

@ -57,7 +57,7 @@
<dependency> <dependency>
<groupId>org.ofdrw</groupId> <groupId>org.ofdrw</groupId>
<artifactId>ofdrw-full</artifactId> <artifactId>ofdrw-full</artifactId>
<version>2.3.6</version> <version>2.3.7</version>
<scope>compile</scope> <scope>compile</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>

View File

@ -34,7 +34,7 @@
<properties> <properties>
<Automatic-Module-Name>cn.hutool.v7.setting</Automatic-Module-Name> <Automatic-Module-Name>cn.hutool.v7.setting</Automatic-Module-Name>
<snakeyaml.version> 2.4</snakeyaml.version> <snakeyaml.version> 2.5</snakeyaml.version>
</properties> </properties>
<dependencies> <dependencies>

View File

@ -56,10 +56,10 @@
<!-- versions --> <!-- versions -->
<compile.version>17</compile.version> <compile.version>17</compile.version>
<junit.version>5.13.1</junit.version> <junit.version>6.0.0</junit.version>
<lombok.version>1.18.38</lombok.version> <lombok.version>1.18.42</lombok.version>
<kotlin-version>2.1.20</kotlin-version> <kotlin-version>2.2.20</kotlin-version>
<bouncycastle.version>1.80</bouncycastle.version> <bouncycastle.version>1.82</bouncycastle.version>
</properties> </properties>
<dependencies> <dependencies>