Skip to content

Commit c0eaf00

Browse files
Merge remote-tracking branch 'spark/master' into shuffle-spec-direct-partition
2 parents dac5b30 + f72435a commit c0eaf00

File tree

17 files changed

+648
-51
lines changed

17 files changed

+648
-51
lines changed

.github/workflows/maven_test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,11 @@ jobs:
205205
206206
if [[ "$INCLUDED_TAGS" != "" ]]; then
207207
./build/mvn $MAVEN_CLI_OPTS -pl "$TEST_MODULES" -Pyarn -Pkubernetes -Pvolcano -Phive -Phive-thriftserver -Phadoop-cloud -Pjvm-profiler -Pspark-ganglia-lgpl -Pkinesis-asl -Djava.version=${JAVA_VERSION/-ea} -Dtest.include.tags="$INCLUDED_TAGS" test -fae
208-
elif [[ "$MODULES_TO_TEST" == "connect" ]]; then
209-
./build/mvn $MAVEN_CLI_OPTS -Djava.version=${JAVA_VERSION/-ea} -pl sql/connect/client/jdbc,sql/connect/client/jvm,sql/connect/common,sql/connect/server test -fae
210208
elif [[ "$MODULES_TO_TEST" == "connect" && "$INPUT_BRANCH" == "branch-4.0" ]]; then
211209
# SPARK-53914: Remove sql/connect/client/jdbc from `-pl` for branch-4.0, this branch can be deleted after the EOL of branch-4.0.
212210
./build/mvn $MAVEN_CLI_OPTS -Djava.version=${JAVA_VERSION/-ea} -pl sql/connect/client/jvm,sql/connect/common,sql/connect/server test -fae
211+
elif [[ "$MODULES_TO_TEST" == "connect" ]]; then
212+
./build/mvn $MAVEN_CLI_OPTS -Djava.version=${JAVA_VERSION/-ea} -pl sql/connect/client/jdbc,sql/connect/client/jvm,sql/connect/common,sql/connect/server test -fae
213213
elif [[ "$EXCLUDED_TAGS" != "" ]]; then
214214
./build/mvn $MAVEN_CLI_OPTS -pl "$TEST_MODULES" -Pyarn -Pkubernetes -Pvolcano -Phive -Phive-thriftserver -Phadoop-cloud -Pjvm-profiler -Pspark-ganglia-lgpl -Pkinesis-asl -Djava.version=${JAVA_VERSION/-ea} -Dtest.exclude.tags="$EXCLUDED_TAGS" test -fae
215215
elif [[ "$MODULES_TO_TEST" == *"sql#hive-thriftserver"* ]]; then
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.spark.unsafe.types;
19+
20+
import java.io.Serializable;
21+
22+
// This class represents the physical type for the GEOGRAPHY data type.
23+
public final class GeographyVal implements Comparable<GeographyVal>, Serializable {
24+
25+
// The GEOGRAPHY type is implemented as a byte array. We provide `getBytes` and `fromBytes`
26+
// methods for readers and writers to access this underlying array of bytes.
27+
private final byte[] value;
28+
29+
// We make the constructor private. We should use `fromBytes` to create new instances.
30+
private GeographyVal(byte[] value) {
31+
this.value = value;
32+
}
33+
34+
public byte[] getBytes() {
35+
return value;
36+
}
37+
38+
public static GeographyVal fromBytes(byte[] bytes) {
39+
if (bytes == null) {
40+
return null;
41+
} else {
42+
return new GeographyVal(bytes);
43+
}
44+
}
45+
46+
// Comparison is not yet supported for GEOGRAPHY.
47+
public int compareTo(GeographyVal g) {
48+
throw new UnsupportedOperationException();
49+
}
50+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.spark.unsafe.types;
19+
20+
import java.io.Serializable;
21+
22+
// This class represents the physical type for the GEOMETRY data type.
23+
public final class GeometryVal implements Comparable<GeometryVal>, Serializable {
24+
25+
// The GEOMETRY type is implemented as a byte array. We provide `getBytes` and `fromBytes`
26+
// methods for readers and writers to access this underlying array of bytes.
27+
private final byte[] value;
28+
29+
// We make the constructor private. We should use `fromBytes` to create new instances.
30+
private GeometryVal(byte[] value) {
31+
this.value = value;
32+
}
33+
34+
public byte[] getBytes() {
35+
return value;
36+
}
37+
38+
public static GeometryVal fromBytes(byte[] bytes) {
39+
if (bytes == null) {
40+
return null;
41+
} else {
42+
return new GeometryVal(bytes);
43+
}
44+
}
45+
46+
// Comparison is not yet supported for GEOMETRY.
47+
public int compareTo(GeometryVal g) {
48+
throw new UnsupportedOperationException();
49+
}
50+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.spark.unsafe.types;
19+
20+
import org.junit.jupiter.api.Test;
21+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
22+
import static org.junit.jupiter.api.Assertions.assertNotNull;
23+
import static org.junit.jupiter.api.Assertions.assertNull;
24+
25+
public class GeographyValSuite {
26+
27+
@Test
28+
public void roundTripBytes() {
29+
// A simple byte array to test the round trip (`fromBytes` -> `getBytes`).
30+
byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6 };
31+
GeographyVal geographyVal = GeographyVal.fromBytes(bytes);
32+
assertNotNull(geographyVal);
33+
assertArrayEquals(bytes, geographyVal.getBytes());
34+
}
35+
36+
@Test
37+
public void roundNullHandling() {
38+
// A simple null byte array to test null handling for GEOGRAPHY.
39+
byte[] bytes = null;
40+
GeographyVal geographyVal = GeographyVal.fromBytes(bytes);
41+
assertNull(geographyVal);
42+
}
43+
44+
@Test
45+
public void testCompareTo() {
46+
// Comparison is not yet supported for GEOGRAPHY.
47+
byte[] bytes1 = new byte[] { 1, 2, 3 };
48+
byte[] bytes2 = new byte[] { 4, 5, 6 };
49+
GeographyVal geographyVal1 = GeographyVal.fromBytes(bytes1);
50+
GeographyVal geographyVal2 = GeographyVal.fromBytes(bytes2);
51+
try {
52+
geographyVal1.compareTo(geographyVal2);
53+
} catch (UnsupportedOperationException e) {
54+
assert(e.toString().equals("java.lang.UnsupportedOperationException"));
55+
}
56+
}
57+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.spark.unsafe.types;
19+
20+
import org.junit.jupiter.api.Test;
21+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
22+
import static org.junit.jupiter.api.Assertions.assertNotNull;
23+
import static org.junit.jupiter.api.Assertions.assertNull;
24+
25+
public class GeometryValSuite {
26+
27+
@Test
28+
public void roundTripBytes() {
29+
// A simple byte array to test the round trip (`fromBytes` -> `getBytes`).
30+
byte[] bytes = new byte[] { 1, 2, 3, 4, 5, 6 };
31+
GeometryVal geometryVal = GeometryVal.fromBytes(bytes);
32+
assertNotNull(geometryVal);
33+
assertArrayEquals(bytes, geometryVal.getBytes());
34+
}
35+
36+
@Test
37+
public void roundNullHandling() {
38+
// A simple null byte array to test null handling for GEOMETRY.
39+
byte[] bytes = null;
40+
GeometryVal geometryVal = GeometryVal.fromBytes(bytes);
41+
assertNull(geometryVal);
42+
}
43+
44+
@Test
45+
public void testCompareTo() {
46+
// Comparison is not yet supported for GEOMETRY.
47+
byte[] bytes1 = new byte[] { 1, 2, 3 };
48+
byte[] bytes2 = new byte[] { 4, 5, 6 };
49+
GeometryVal geometryVal1 = GeometryVal.fromBytes(bytes1);
50+
GeometryVal geometryVal2 = GeometryVal.fromBytes(bytes2);
51+
try {
52+
geometryVal1.compareTo(geometryVal2);
53+
} catch (UnsupportedOperationException e) {
54+
assert(e.toString().equals("java.lang.UnsupportedOperationException"));
55+
}
56+
}
57+
}

core/src/main/scala/org/apache/spark/util/Utils.scala

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3138,7 +3138,19 @@ private[spark] object Utils
31383138
/**
31393139
* Return whether we are using G1GC or not
31403140
*/
3141-
lazy val isG1GC: Boolean = {
3141+
lazy val isG1GC: Boolean = checkUseGC("UseG1GC")
3142+
3143+
/**
3144+
* Return whether we are using ZGC or not
3145+
*/
3146+
lazy val isZGC: Boolean = checkUseGC("UseZGC")
3147+
3148+
/**
3149+
* Return whether we are using ShenandoahGC or not
3150+
*/
3151+
lazy val isShenandoahGC: Boolean = checkUseGC("UseShenandoahGC")
3152+
3153+
def checkUseGC(useGCObjectStr: String): Boolean = {
31423154
Try {
31433155
val clazz = Utils.classForName("com.sun.management.HotSpotDiagnosticMXBean")
31443156
.asInstanceOf[Class[_ <: PlatformManagedObject]]
@@ -3147,9 +3159,9 @@ private[spark] object Utils
31473159
val vmOptionMethod = clazz.getMethod("getVMOption", classOf[String])
31483160
val valueMethod = vmOptionClazz.getMethod("getValue")
31493161

3150-
val useG1GCObject = vmOptionMethod.invoke(hotSpotDiagnosticMXBean, "UseG1GC")
3151-
val useG1GC = valueMethod.invoke(useG1GCObject).asInstanceOf[String]
3152-
"true".equals(useG1GC)
3162+
val useGCObject = vmOptionMethod.invoke(hotSpotDiagnosticMXBean, useGCObjectStr)
3163+
val useGC = valueMethod.invoke(useGCObject).asInstanceOf[String]
3164+
"true".equals(useGC)
31533165
}.getOrElse(false)
31543166
}
31553167

dev/deps/spark-deps-hadoop-3-hive-2.3

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -198,48 +198,48 @@ metrics-jmx/4.2.33//metrics-jmx-4.2.33.jar
198198
metrics-json/4.2.33//metrics-json-4.2.33.jar
199199
metrics-jvm/4.2.33//metrics-jvm-4.2.33.jar
200200
minlog/1.3.0//minlog-1.3.0.jar
201-
netty-all/4.2.6.Final//netty-all-4.2.6.Final.jar
202-
netty-buffer/4.2.6.Final//netty-buffer-4.2.6.Final.jar
203-
netty-codec-base/4.2.6.Final//netty-codec-base-4.2.6.Final.jar
204-
netty-codec-classes-quic/4.2.6.Final//netty-codec-classes-quic-4.2.6.Final.jar
205-
netty-codec-compression/4.2.6.Final//netty-codec-compression-4.2.6.Final.jar
206-
netty-codec-dns/4.2.6.Final//netty-codec-dns-4.2.6.Final.jar
207-
netty-codec-http/4.2.6.Final//netty-codec-http-4.2.6.Final.jar
208-
netty-codec-http2/4.2.6.Final//netty-codec-http2-4.2.6.Final.jar
209-
netty-codec-http3/4.2.6.Final//netty-codec-http3-4.2.6.Final.jar
210-
netty-codec-marshalling/4.2.6.Final//netty-codec-marshalling-4.2.6.Final.jar
211-
netty-codec-native-quic/4.2.6.Final/linux-aarch_64/netty-codec-native-quic-4.2.6.Final-linux-aarch_64.jar
212-
netty-codec-native-quic/4.2.6.Final/linux-x86_64/netty-codec-native-quic-4.2.6.Final-linux-x86_64.jar
213-
netty-codec-native-quic/4.2.6.Final/osx-aarch_64/netty-codec-native-quic-4.2.6.Final-osx-aarch_64.jar
214-
netty-codec-native-quic/4.2.6.Final/osx-x86_64/netty-codec-native-quic-4.2.6.Final-osx-x86_64.jar
215-
netty-codec-native-quic/4.2.6.Final/windows-x86_64/netty-codec-native-quic-4.2.6.Final-windows-x86_64.jar
216-
netty-codec-protobuf/4.2.6.Final//netty-codec-protobuf-4.2.6.Final.jar
217-
netty-codec-socks/4.2.6.Final//netty-codec-socks-4.2.6.Final.jar
218-
netty-codec/4.2.6.Final//netty-codec-4.2.6.Final.jar
219-
netty-common/4.2.6.Final//netty-common-4.2.6.Final.jar
220-
netty-handler-proxy/4.2.6.Final//netty-handler-proxy-4.2.6.Final.jar
221-
netty-handler/4.2.6.Final//netty-handler-4.2.6.Final.jar
222-
netty-resolver-dns/4.2.6.Final//netty-resolver-dns-4.2.6.Final.jar
223-
netty-resolver/4.2.6.Final//netty-resolver-4.2.6.Final.jar
201+
netty-all/4.2.7.Final//netty-all-4.2.7.Final.jar
202+
netty-buffer/4.2.7.Final//netty-buffer-4.2.7.Final.jar
203+
netty-codec-base/4.2.7.Final//netty-codec-base-4.2.7.Final.jar
204+
netty-codec-classes-quic/4.2.7.Final//netty-codec-classes-quic-4.2.7.Final.jar
205+
netty-codec-compression/4.2.7.Final//netty-codec-compression-4.2.7.Final.jar
206+
netty-codec-dns/4.2.7.Final//netty-codec-dns-4.2.7.Final.jar
207+
netty-codec-http/4.2.7.Final//netty-codec-http-4.2.7.Final.jar
208+
netty-codec-http2/4.2.7.Final//netty-codec-http2-4.2.7.Final.jar
209+
netty-codec-http3/4.2.7.Final//netty-codec-http3-4.2.7.Final.jar
210+
netty-codec-marshalling/4.2.7.Final//netty-codec-marshalling-4.2.7.Final.jar
211+
netty-codec-native-quic/4.2.7.Final/linux-aarch_64/netty-codec-native-quic-4.2.7.Final-linux-aarch_64.jar
212+
netty-codec-native-quic/4.2.7.Final/linux-x86_64/netty-codec-native-quic-4.2.7.Final-linux-x86_64.jar
213+
netty-codec-native-quic/4.2.7.Final/osx-aarch_64/netty-codec-native-quic-4.2.7.Final-osx-aarch_64.jar
214+
netty-codec-native-quic/4.2.7.Final/osx-x86_64/netty-codec-native-quic-4.2.7.Final-osx-x86_64.jar
215+
netty-codec-native-quic/4.2.7.Final/windows-x86_64/netty-codec-native-quic-4.2.7.Final-windows-x86_64.jar
216+
netty-codec-protobuf/4.2.7.Final//netty-codec-protobuf-4.2.7.Final.jar
217+
netty-codec-socks/4.2.7.Final//netty-codec-socks-4.2.7.Final.jar
218+
netty-codec/4.2.7.Final//netty-codec-4.2.7.Final.jar
219+
netty-common/4.2.7.Final//netty-common-4.2.7.Final.jar
220+
netty-handler-proxy/4.2.7.Final//netty-handler-proxy-4.2.7.Final.jar
221+
netty-handler/4.2.7.Final//netty-handler-4.2.7.Final.jar
222+
netty-resolver-dns/4.2.7.Final//netty-resolver-dns-4.2.7.Final.jar
223+
netty-resolver/4.2.7.Final//netty-resolver-4.2.7.Final.jar
224224
netty-tcnative-boringssl-static/2.0.74.Final/linux-aarch_64/netty-tcnative-boringssl-static-2.0.74.Final-linux-aarch_64.jar
225225
netty-tcnative-boringssl-static/2.0.74.Final/linux-x86_64/netty-tcnative-boringssl-static-2.0.74.Final-linux-x86_64.jar
226226
netty-tcnative-boringssl-static/2.0.74.Final/osx-aarch_64/netty-tcnative-boringssl-static-2.0.74.Final-osx-aarch_64.jar
227227
netty-tcnative-boringssl-static/2.0.74.Final/osx-x86_64/netty-tcnative-boringssl-static-2.0.74.Final-osx-x86_64.jar
228228
netty-tcnative-boringssl-static/2.0.74.Final/windows-x86_64/netty-tcnative-boringssl-static-2.0.74.Final-windows-x86_64.jar
229229
netty-tcnative-classes/2.0.74.Final//netty-tcnative-classes-2.0.74.Final.jar
230-
netty-transport-classes-epoll/4.2.6.Final//netty-transport-classes-epoll-4.2.6.Final.jar
231-
netty-transport-classes-io_uring/4.2.6.Final//netty-transport-classes-io_uring-4.2.6.Final.jar
232-
netty-transport-classes-kqueue/4.2.6.Final//netty-transport-classes-kqueue-4.2.6.Final.jar
233-
netty-transport-native-epoll/4.2.6.Final/linux-aarch_64/netty-transport-native-epoll-4.2.6.Final-linux-aarch_64.jar
234-
netty-transport-native-epoll/4.2.6.Final/linux-riscv64/netty-transport-native-epoll-4.2.6.Final-linux-riscv64.jar
235-
netty-transport-native-epoll/4.2.6.Final/linux-x86_64/netty-transport-native-epoll-4.2.6.Final-linux-x86_64.jar
236-
netty-transport-native-io_uring/4.2.6.Final/linux-aarch_64/netty-transport-native-io_uring-4.2.6.Final-linux-aarch_64.jar
237-
netty-transport-native-io_uring/4.2.6.Final/linux-riscv64/netty-transport-native-io_uring-4.2.6.Final-linux-riscv64.jar
238-
netty-transport-native-io_uring/4.2.6.Final/linux-x86_64/netty-transport-native-io_uring-4.2.6.Final-linux-x86_64.jar
239-
netty-transport-native-kqueue/4.2.6.Final/osx-aarch_64/netty-transport-native-kqueue-4.2.6.Final-osx-aarch_64.jar
240-
netty-transport-native-kqueue/4.2.6.Final/osx-x86_64/netty-transport-native-kqueue-4.2.6.Final-osx-x86_64.jar
241-
netty-transport-native-unix-common/4.2.6.Final//netty-transport-native-unix-common-4.2.6.Final.jar
242-
netty-transport/4.2.6.Final//netty-transport-4.2.6.Final.jar
230+
netty-transport-classes-epoll/4.2.7.Final//netty-transport-classes-epoll-4.2.7.Final.jar
231+
netty-transport-classes-io_uring/4.2.7.Final//netty-transport-classes-io_uring-4.2.7.Final.jar
232+
netty-transport-classes-kqueue/4.2.7.Final//netty-transport-classes-kqueue-4.2.7.Final.jar
233+
netty-transport-native-epoll/4.2.7.Final/linux-aarch_64/netty-transport-native-epoll-4.2.7.Final-linux-aarch_64.jar
234+
netty-transport-native-epoll/4.2.7.Final/linux-riscv64/netty-transport-native-epoll-4.2.7.Final-linux-riscv64.jar
235+
netty-transport-native-epoll/4.2.7.Final/linux-x86_64/netty-transport-native-epoll-4.2.7.Final-linux-x86_64.jar
236+
netty-transport-native-io_uring/4.2.7.Final/linux-aarch_64/netty-transport-native-io_uring-4.2.7.Final-linux-aarch_64.jar
237+
netty-transport-native-io_uring/4.2.7.Final/linux-riscv64/netty-transport-native-io_uring-4.2.7.Final-linux-riscv64.jar
238+
netty-transport-native-io_uring/4.2.7.Final/linux-x86_64/netty-transport-native-io_uring-4.2.7.Final-linux-x86_64.jar
239+
netty-transport-native-kqueue/4.2.7.Final/osx-aarch_64/netty-transport-native-kqueue-4.2.7.Final-osx-aarch_64.jar
240+
netty-transport-native-kqueue/4.2.7.Final/osx-x86_64/netty-transport-native-kqueue-4.2.7.Final-osx-x86_64.jar
241+
netty-transport-native-unix-common/4.2.7.Final//netty-transport-native-unix-common-4.2.7.Final.jar
242+
netty-transport/4.2.7.Final//netty-transport-4.2.7.Final.jar
243243
objenesis/3.4//objenesis-3.4.jar
244244
okhttp/3.12.12//okhttp-3.12.12.jar
245245
okio/1.17.6//okio-1.17.6.jar

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217
<bouncycastle.version>1.82</bouncycastle.version>
218218
<tink.version>1.16.0</tink.version>
219219
<datasketches.version>6.2.0</datasketches.version>
220-
<netty.version>4.2.6.Final</netty.version>
220+
<netty.version>4.2.7.Final</netty.version>
221221
<netty-tcnative.version>2.0.74.Final</netty-tcnative.version>
222222
<icu4j.version>77.1</icu4j.version>
223223
<junit.version>6.0.0</junit.version>

0 commit comments

Comments
 (0)