You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2022/04/22 16:32:15 UTC
[bookkeeper] branch master updated: [build] make build passes on JDK17 (#3053)
This is an automated email from the ASF dual-hosted git repository.
eolivelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new f8612883c7 [build] make build passes on JDK17 (#3053)
f8612883c7 is described below
commit f8612883c7ed358e10ee2579b700ab46f48e95ba
Author: Nicolò Boschi <bo...@gmail.com>
AuthorDate: Fri Apr 22 18:32:11 2022 +0200
[build] make build passes on JDK17 (#3053)
---
.../apache/bookkeeper/bookie/BookieException.java | 4 ++
.../org/apache/bookkeeper/proto/BookieServer.java | 5 +-
.../bookkeeper/verifier/BookkeeperVerifier.java | 4 +-
.../bookie/BookieInitializationTest.java | 9 ++-
bookkeeper-stats/build.gradle | 1 +
bookkeeper-stats/pom.xml | 9 +++
.../bookkeeper/stats/CachingStatsLogger.java | 3 +
.../apache/bookkeeper/stats/NullStatsLogger.java | 3 +
.../apache/bookkeeper/stats/NullStatsProvider.java | 2 +
.../java/org/apache/bookkeeper/stats/Stats.java | 2 +
build.gradle | 1 -
.../main/resources/bookkeeper/findbugsExclude.xml | 10 +++
.../resources/distributedlog/findbugsExclude.xml | 10 +++
gradle.properties | 4 +-
microbenchmarks/build.gradle | 1 +
.../bookkeeper/stats/codahale/TimerBenchmark.java | 3 +-
pom.xml | 4 +-
stream/distributedlog/core/build.gradle | 1 +
.../impl/metadata/ZKLogStreamMetadataStore.java | 3 +-
stream/distributedlog/pom.xml | 19 ++++++
.../tests/integration/utils/MavenClassLoader.java | 75 +++++++++-------------
21 files changed, 112 insertions(+), 61 deletions(-)
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java
index 2f86052f00..2b85961cf4 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieException.java
@@ -167,6 +167,10 @@ public abstract class BookieException extends Exception {
public BookieUnauthorizedAccessException() {
super(Code.UnauthorizedAccessException);
}
+
+ public BookieUnauthorizedAccessException(String reason) {
+ super(Code.UnauthorizedAccessException, reason);
+ }
}
/**
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
index 2c1eb3a7d4..1054c17245 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
@@ -27,7 +27,6 @@ import io.netty.buffer.ByteBufAllocator;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.net.UnknownHostException;
-import java.security.AccessControlException;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.apache.bookkeeper.bookie.Bookie;
@@ -201,7 +200,7 @@ public class BookieServer {
/**
* Ensure the current user can start-up the process if it's restricted.
*/
- private void validateUser(ServerConfiguration conf) throws AccessControlException {
+ private void validateUser(ServerConfiguration conf) throws BookieException {
if (conf.containsKey(PERMITTED_STARTUP_USERS)) {
String currentUser = System.getProperty("user.name");
String[] propertyValue = conf.getPermittedStartupUsers();
@@ -215,7 +214,7 @@ public class BookieServer {
+ " Current user: " + currentUser + " permittedStartupUsers: "
+ Arrays.toString(propertyValue);
LOG.error(errorMsg);
- throw new AccessControlException(errorMsg);
+ throw new BookieException.BookieUnauthorizedAccessException(errorMsg);
}
}
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java
index 63c24578d9..5715bbf404 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/verifier/BookkeeperVerifier.java
@@ -18,7 +18,7 @@
package org.apache.bookkeeper.verifier;
import static com.google.common.base.Preconditions.checkState;
-
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -32,7 +32,6 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
-
import org.apache.bookkeeper.client.BKException;
/**
@@ -180,6 +179,7 @@ public class BookkeeperVerifier {
/**
* State required to regenerate an entry.
*/
+ @SuppressFBWarnings("DMI_RANDOM_USED_ONLY_ONCE")
class EntryInfo {
private final long entryID;
private final long seed;
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
index d919bc8d8b..a3f20a85e2 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
@@ -55,7 +55,6 @@ import java.net.BindException;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
-import java.security.AccessControlException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -579,7 +578,7 @@ public class BookieInitializationTest extends BookKeeperClusterTestCase {
new MockUncleanShutdownDetection());
fail("Bookkeeper should not have started since current user isn't in permittedStartupUsers");
- } catch (AccessControlException buae) {
+ } catch (BookieException.BookieUnauthorizedAccessException buae) {
sawException = true;
} finally {
if (bs1 != null && bs1.isRunning()) {
@@ -615,7 +614,7 @@ public class BookieInitializationTest extends BookKeeperClusterTestCase {
NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT,
new MockUncleanShutdownDetection());
bs1.start();
- } catch (AccessControlException buae) {
+ } catch (BookieException.BookieUnauthorizedAccessException buae) {
fail("Bookkeeper should have started since current user is in permittedStartupUsers");
} finally {
if (bs1 != null && bs1.isRunning()) {
@@ -632,7 +631,7 @@ public class BookieInitializationTest extends BookKeeperClusterTestCase {
NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT,
new MockUncleanShutdownDetection());
bs1.start();
- } catch (AccessControlException buae) {
+ } catch (BookieException.BookieUnauthorizedAccessException buae) {
fail("Bookkeeper should have started since current user is in permittedStartupUsers");
} finally {
if (bs1 != null && bs1.isRunning()) {
@@ -664,7 +663,7 @@ public class BookieInitializationTest extends BookKeeperClusterTestCase {
NullStatsLogger.INSTANCE, UnpooledByteBufAllocator.DEFAULT,
new MockUncleanShutdownDetection());
bs1.start();
- } catch (AccessControlException buae) {
+ } catch (BookieException.BookieUnauthorizedAccessException buae) {
fail("Bookkeeper should have started since permittedStartupUser is not specified");
} finally {
if (bs1 != null && bs1.isRunning()) {
diff --git a/bookkeeper-stats/build.gradle b/bookkeeper-stats/build.gradle
index 98784c9718..dcdd59a76a 100644
--- a/bookkeeper-stats/build.gradle
+++ b/bookkeeper-stats/build.gradle
@@ -23,6 +23,7 @@ plugins {
dependencies {
implementation depLibs.commonsConfiguration
implementation depLibs.slf4j
+ compileOnly depLibs.spotbugsAnnotations
}
jar {
diff --git a/bookkeeper-stats/pom.xml b/bookkeeper-stats/pom.xml
index 76a6cf21ce..d5718f1c88 100644
--- a/bookkeeper-stats/pom.xml
+++ b/bookkeeper-stats/pom.xml
@@ -26,6 +26,9 @@
<artifactId>bookkeeper-stats-api</artifactId>
<name>Apache BookKeeper :: Stats API</name>
<url>http://maven.apache.org</url>
+ <properties>
+ <spotbugs-annotations.version>4.6.0</spotbugs-annotations.version>
+ </properties>
<build>
<plugins>
<plugin>
@@ -55,5 +58,11 @@
</plugins>
</build>
<dependencies>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <version>${spotbugs-annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java
index d86e19a176..15725eb157 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/CachingStatsLogger.java
@@ -16,6 +16,8 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -29,6 +31,7 @@ public class CachingStatsLogger implements StatsLogger {
protected final ConcurrentMap<String, OpStatsLogger> opStatsLoggers;
protected final ConcurrentMap<String, StatsLogger> scopeStatsLoggers;
+ @SuppressFBWarnings("EI_EXPOSE_REP2")
public CachingStatsLogger(StatsLogger statsLogger) {
this.underlying = statsLogger;
this.counters = new ConcurrentHashMap<String, Counter>();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
index 3e10b20c20..f527df0b2a 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsLogger.java
@@ -16,6 +16,8 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
import java.util.concurrent.TimeUnit;
/**
@@ -24,6 +26,7 @@ import java.util.concurrent.TimeUnit;
* <p>Metrics are not recorded, making this receiver useful in unit tests and as defaults in
* situations where metrics are not strictly required.
*/
+@SuppressFBWarnings("EI_EXPOSE_REP2")
public class NullStatsLogger implements StatsLogger {
public static final NullStatsLogger INSTANCE = new NullStatsLogger();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
index 21703f725f..e9c40ca1f0 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/NullStatsProvider.java
@@ -16,11 +16,13 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.commons.configuration.Configuration;
/**
* A <i>no-op</i> stats provider implementation.
*/
+@SuppressFBWarnings("EI_EXPOSE_REP2")
public class NullStatsProvider implements StatsProvider {
final StatsLogger nullStatsLogger = new NullStatsLogger();
diff --git a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
index a3799b08e5..3f9b98d43e 100644
--- a/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
+++ b/bookkeeper-stats/src/main/java/org/apache/bookkeeper/stats/Stats.java
@@ -20,6 +20,7 @@
*/
package org.apache.bookkeeper.stats;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.configuration.Configuration;
@@ -63,6 +64,7 @@ public class Stats {
}
}
+ @SuppressFBWarnings("EI_EXPOSE_REP2")
public static StatsProvider get() {
return prov;
}
diff --git a/build.gradle b/build.gradle
index e30c984281..9ef807ad97 100644
--- a/build.gradle
+++ b/build.gradle
@@ -143,7 +143,6 @@ allprojects {
}
spotbugs {
- toolVersion = '3.1.8'
excludeFilter = file("$rootDir/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml")
reportLevel = 'high'
spotbugsTest.enabled = false
diff --git a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
index da6867c132..09daf19656 100644
--- a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
+++ b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
@@ -16,6 +16,16 @@
limitations under the License.
//-->
<FindBugsFilter>
+ <!--Global rules suppressions-->
+ <Match>
+ <Bug pattern="EI_EXPOSE_REP"/>
+ </Match>
+ <Match>
+ <Bug pattern="EI_EXPOSE_REP2"/>
+ </Match>
+ <Match>
+ <Bug pattern="MS_EXPOSE_REP"/>
+ </Match>
<!-- circe-checksum -->
<Match>
<!-- imported code -->
diff --git a/buildtools/src/main/resources/distributedlog/findbugsExclude.xml b/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
index f85686fcb7..c4ba2cd127 100644
--- a/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
+++ b/buildtools/src/main/resources/distributedlog/findbugsExclude.xml
@@ -16,6 +16,16 @@
limitations under the License.
//-->
<FindBugsFilter>
+ <!--Global rules suppressions-->
+ <Match>
+ <Bug pattern="EI_EXPOSE_REP"/>
+ </Match>
+ <Match>
+ <Bug pattern="EI_EXPOSE_REP2"/>
+ </Match>
+ <Match>
+ <Bug pattern="MS_EXPOSE_REP"/>
+ </Match>
<Match>
<!-- generated code, we can't be held responsible for findbugs in it //-->
<Class name="~org\.apache\.distributedlog\.tests\.generated.*" />
diff --git a/gradle.properties b/gradle.properties
index 58ef9bbd17..c230c3fcc9 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -21,10 +21,10 @@
protobufPluginVersion=0.8.18
apcheRatPluginVersion=0.7.0
-shadowPluginVersion=6.1.0
+shadowPluginVersion=7.1.2
licenseGradlePluginVersion=0.15.0
checkStyleVersion=6.19
-spotbugsPlugin=4.7.0
+spotbugsPlugin=5.0.5
testLogger=3.1.0
testRetry=1.0.0
owaspPlugin=6.5.3
diff --git a/microbenchmarks/build.gradle b/microbenchmarks/build.gradle
index a58eea03b7..6acc6ef070 100644
--- a/microbenchmarks/build.gradle
+++ b/microbenchmarks/build.gradle
@@ -34,6 +34,7 @@ dependencies {
compileOnly depLibs.jmhCore
compileOnly depLibs.guava
compileOnly depLibs.slf4j
+ compileOnly depLibs.spotbugsAnnotations
annotationProcessor depLibs.jmhGeneratorAnnprocess
}
diff --git a/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java b/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
index 886cd6937f..c6d568fbdc 100644
--- a/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
+++ b/microbenchmarks/src/main/java/org/apache/bookkeeper/stats/codahale/TimerBenchmark.java
@@ -16,9 +16,9 @@
*/
package org.apache.bookkeeper.stats.codahale;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
-
import org.apache.bookkeeper.stats.OpStatsLogger;
import org.apache.bookkeeper.stats.StatsLogger;
import org.openjdk.jmh.annotations.Benchmark;
@@ -71,6 +71,7 @@ public class TimerBenchmark {
private int timeIdx = 0;
@Setup(Level.Trial)
+ @SuppressFBWarnings("SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA")
public void doSetup() throws Exception {
StatsLogger logger = null;
switch (timerType) {
diff --git a/pom.xml b/pom.xml
index 6cce137fc2..42f07393f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,7 +171,7 @@
<shrinkwrap.version>3.0.1</shrinkwrap.version>
<slf4j.version>1.7.32</slf4j.version>
<snakeyaml.version>1.30</snakeyaml.version>
- <spotbugs-annotations.version>3.1.8</spotbugs-annotations.version>
+ <spotbugs-annotations.version>4.6.0</spotbugs-annotations.version>
<javax-annotations-api.version>1.3.2</javax-annotations-api.version>
<testcontainers.version>1.15.1</testcontainers.version>
<vertx.version>3.9.8</vertx.version>
@@ -205,7 +205,7 @@
<os-maven-plugin.version>1.4.1.Final</os-maven-plugin.version>
<protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
<puppycrawl.checkstyle.version>6.19</puppycrawl.checkstyle.version>
- <spotbugs-maven-plugin.version>3.1.8</spotbugs-maven-plugin.version>
+ <spotbugs-maven-plugin.version>4.6.0.0</spotbugs-maven-plugin.version>
<forkCount.variable>1</forkCount.variable>
<servlet-api.version>4.0.0</servlet-api.version>
<rxjava.version>3.0.1</rxjava.version>
diff --git a/stream/distributedlog/core/build.gradle b/stream/distributedlog/core/build.gradle
index 2af471ac7a..f8812f9a0a 100644
--- a/stream/distributedlog/core/build.gradle
+++ b/stream/distributedlog/core/build.gradle
@@ -36,6 +36,7 @@ dependencies {
implementation depLibs.guava
compileOnly depLibs.jsr305
compileOnly depLibs.lombok
+ compileOnly depLibs.spotbugsAnnotations
implementation depLibs.nettyBuffer
implementation depLibs.nettyTransportNativeEpoll
implementation depLibs.slf4j
diff --git a/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java b/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
index 17f8113b98..b1ed272c41 100644
--- a/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
+++ b/stream/distributedlog/core/src/main/java/org/apache/distributedlog/impl/metadata/ZKLogStreamMetadataStore.java
@@ -32,10 +32,10 @@ import static org.apache.distributedlog.metadata.LogMetadata.VERSION_PATH;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.net.URI;
import java.util.Collections;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -533,6 +533,7 @@ public class ZKLogStreamMetadataStore implements LogStreamMetadataStore {
}, null);
}
+ @SuppressFBWarnings("DCN_NULLPOINTER_EXCEPTION")
static LogMetadataForWriter processLogMetadatas(URI uri,
String logName,
String logIdentifier,
diff --git a/stream/distributedlog/pom.xml b/stream/distributedlog/pom.xml
index 25bcd66dd5..8e86bb9cf1 100644
--- a/stream/distributedlog/pom.xml
+++ b/stream/distributedlog/pom.xml
@@ -37,6 +37,9 @@
<module>core</module>
<module>io</module>
</modules>
+ <properties>
+ <spotbugs-annotations.version>4.6.0</spotbugs-annotations.version>
+ </properties>
<build>
<plugins>
<plugin>
@@ -87,5 +90,21 @@
</plugin>
</plugins>
</build>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <version>${spotbugs-annotations.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
</project>
diff --git a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
index 05724feae7..7c4137a6ff 100644
--- a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
+++ b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
@@ -37,8 +37,6 @@ import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -101,49 +99,38 @@ public class MavenClassLoader implements AutoCloseable {
private static MavenClassLoader createClassLoader(File[] jars) {
final ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
- URLClassLoader cl = AccessController.doPrivileged(
- new PrivilegedAction<URLClassLoader>() {
- @Override
- public URLClassLoader run() {
- /**
- * Child-first URLClassLoader.
- * This is needed because Gradle uses a different version of
- * Netty and it is placed in the System Class loader.
- */
- return new URLClassLoader(Arrays.stream(jars)
- .map((f) -> {
- try {
- return f.toURI().toURL();
- } catch (Throwable t) {
- throw new RuntimeException(t);
- }
- })
- .toArray(URL[]::new),
- systemClassLoader) {
-
- @Override
- protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
- Class<?> loadedClass = findLoadedClass(name);
- if (loadedClass == null) {
- try {
- loadedClass = findClass(name);
- } catch (ClassNotFoundException ignored) {
- }
- if (loadedClass == null) {
- try {
- loadedClass = systemClassLoader.loadClass(name);
- } catch (ClassNotFoundException e) {
- }
- }
- }
- if (resolve && loadedClass != null) {
- resolveClass(loadedClass);
- }
- return loadedClass;
- }
- };
+ URLClassLoader cl = new URLClassLoader(Arrays.stream(jars)
+ .map((f) -> {
+ try {
+ return f.toURI().toURL();
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ })
+ .toArray(URL[]::new),
+ systemClassLoader) {
+
+ @Override
+ protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ Class<?> loadedClass = findLoadedClass(name);
+ if (loadedClass == null) {
+ try {
+ loadedClass = findClass(name);
+ } catch (ClassNotFoundException ignored) {
+ }
+ if (loadedClass == null) {
+ try {
+ loadedClass = systemClassLoader.loadClass(name);
+ } catch (ClassNotFoundException e) {
+ }
}
- });
+ }
+ if (resolve && loadedClass != null) {
+ resolveClass(loadedClass);
+ }
+ return loadedClass;
+ }
+ };
return new MavenClassLoader(cl);
}