You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2018/08/10 20:40:06 UTC
[geode] branch develop updated: GEODE-5535: Upgrade
FastClasspathScanner to 4.0.6 (#2290)
This is an automated email from the ASF dual-hosted git repository.
jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new c2d3c1e GEODE-5535: Upgrade FastClasspathScanner to 4.0.6 (#2290)
c2d3c1e is described below
commit c2d3c1e16c49aac021a26dca65b57996be7d94a2
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Fri Aug 10 13:39:58 2018 -0700
GEODE-5535: Upgrade FastClasspathScanner to 4.0.6 (#2290)
---
LICENSE | 2 ++
geode-assembly/build.gradle | 2 +-
.../src/test/resources/expected_jars.txt | 2 +-
geode-core/build.gradle | 3 +-
.../InternalConfigurationPersistenceService.java | 2 +-
.../internal/cli/util/ClasspathScanLoadHelper.java | 33 +++++++++-------------
.../internal/deployment/FunctionScanner.java | 18 +++++-------
...nternalConfigurationPersistenceServiceTest.java | 2 +-
gradle/dependency-versions.properties | 2 +-
9 files changed, 29 insertions(+), 37 deletions(-)
diff --git a/LICENSE b/LICENSE
index 0dc431d..a243c40 100644
--- a/LICENSE
+++ b/LICENSE
@@ -257,6 +257,8 @@ The MIT License (http://opensource.org/licenses/mit-license.html)
Apache Geode bundles the following files under the MIT license:
+ - ClassGraph v4.0.6 (https://github.com/classgraph/classgraph), Copyright (c)
+ 2015 Luke Hutchison
- HTML5 Shiv vpre3.5 (https://github.com/aFarkas/html5shiv), Copyright
(c) 2014 Alexander Farkas (aFarkas)
- JavaScript InfoVis Toolkit v2.0.1 (http://philogb.github.io/jit/),
diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index 6c7dc88..8b54c8b 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -191,13 +191,13 @@ def cp = {
// depedencies from geode-core
it.contains('antlr') ||
it.contains('commons-io') ||
+ it.contains('classgraph') ||
it.contains('commons-collections') ||
it.contains('commons-lang') ||
it.contains('commons-logging') ||
it.contains('commons-validator') ||
it.contains('commons-beanutils') ||
it.contains('commons-codec') ||
- it.contains('fast-classpath-scanner') ||
it.contains('fastutil') ||
it.contains('jackson-annotations') ||
it.contains('jackson-core') ||
diff --git a/geode-assembly/src/test/resources/expected_jars.txt b/geode-assembly/src/test/resources/expected_jars.txt
index 6418396..480c12c 100644
--- a/geode-assembly/src/test/resources/expected_jars.txt
+++ b/geode-assembly/src/test/resources/expected_jars.txt
@@ -2,6 +2,7 @@ activation
antlr
aopalliance
byte-buddy
+classgraph
classmate
commons-beanutils
commons-codec
@@ -13,7 +14,6 @@ commons-lang
commons-logging
commons-modeler
commons-validator
-fast-classpath-scanner
fastutil
findbugs-annotations
gfsh-dependencies.jar
diff --git a/geode-core/build.gradle b/geode-core/build.gradle
index a9deec6..560b23f 100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@ -133,8 +133,7 @@ dependencies {
compile 'org.apache.shiro:shiro-core:' + project.'shiro.version'
- // https://mvnrepository.com/artifact/io.github.lukehutch/fast-classpath-scanner
- compile 'io.github.lukehutch:fast-classpath-scanner:' + project.'fast-classpath-scanner.version'
+ compile 'io.github.classgraph:classgraph:' + project.'classgraph.version'
compile 'com.healthmarketscience.rmiio:rmiio:' + project.'rmiio.version'
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index fae9b74..f4d19b9 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -190,7 +190,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
protected String[] getPackagesToScan() {
String sysProperty = SystemPropertyHelper.getProperty(SystemPropertyHelper.PACKAGES_TO_SCAN);
- String[] packages = {""};
+ String[] packages = {"org.apache.geode"};
if (sysProperty != null) {
packages = sysProperty.split(",");
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
index 08e1170..7acad82 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
@@ -16,12 +16,11 @@ package org.apache.geode.management.internal.cli.util;
import static java.util.stream.Collectors.toSet;
-import java.lang.reflect.Modifier;
-import java.util.HashSet;
import java.util.Set;
-import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
-
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
/**
* Utility class to scan class-path & load classes.
@@ -31,26 +30,22 @@ import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
public class ClasspathScanLoadHelper {
public static Set<Class<?>> scanPackagesForClassesImplementing(Class<?> implementedInterface,
String... packagesToScan) {
- Set<Class<?>> classesImplementing = new HashSet<>();
- new FastClasspathScanner(packagesToScan)
- .matchClassesImplementing(implementedInterface, classesImplementing::add).scan();
+ ScanResult scanResult = new ClassGraph().whitelistPackages(packagesToScan).enableClassInfo()
+ .enableAnnotationInfo().scan();
+
+ ClassInfoList classInfoList = scanResult.getClassesImplementing(implementedInterface.getName())
+ .filter(ci -> !ci.isAbstract() && !ci.isInterface() && ci.isPublic());
- return classesImplementing.stream().filter(ClasspathScanLoadHelper::isInstantiable)
- .collect(toSet());
+ return classInfoList.loadClasses().stream().collect(toSet());
}
public static Set<Class<?>> scanClasspathForAnnotation(Class<?> annotation,
String... packagesToScan) {
- Set<Class<?>> classesWithAnnotation = new HashSet<>();
- new FastClasspathScanner(packagesToScan)
- .matchClassesWithAnnotation(annotation, classesWithAnnotation::add).scan();
- return classesWithAnnotation;
- }
+ ScanResult scanResult = new ClassGraph().whitelistPackages(packagesToScan).enableClassInfo()
+ .enableAnnotationInfo().scan();
+ ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(annotation.getName());
- private static boolean isInstantiable(Class<?> klass) {
- int modifiers = klass.getModifiers();
-
- return !Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers)
- && Modifier.isPublic(modifiers);
+ return classInfoList.loadClasses().stream().collect(toSet());
}
+
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java b/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
index 3e4ec66..9108390 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
@@ -16,14 +16,12 @@ package org.apache.geode.management.internal.deployment;
import java.io.File;
import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
-import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
-import io.github.lukehutch.fastclasspathscanner.scanner.ScanResult;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ScanResult;
import org.apache.geode.cache.execute.Function;
import org.apache.geode.cache.execute.FunctionAdapter;
@@ -31,16 +29,14 @@ import org.apache.geode.cache.execute.FunctionAdapter;
public class FunctionScanner {
public Collection<String> findFunctionsInJar(File jarFile) throws IOException {
- URLClassLoader urlClassLoader =
- new URLClassLoader(new URL[] {jarFile.getCanonicalFile().toURL()});
- FastClasspathScanner fastClasspathScanner = new FastClasspathScanner("-dir:")
- .removeTemporaryFilesAfterScan(true).overrideClassLoaders(urlClassLoader);
- ScanResult scanResult = fastClasspathScanner.scan();
+ ClassGraph fastClasspathScanner = new ClassGraph().disableDirScanning()
+ .removeTemporaryFilesAfterScan().overrideClasspath(jarFile.getAbsolutePath());
+ ScanResult scanResult = fastClasspathScanner.enableClassInfo().scan();
Set<String> functionClasses = new HashSet<>();
- functionClasses.addAll(scanResult.getNamesOfClassesImplementing(Function.class));
- functionClasses.addAll(scanResult.getNamesOfSubclassesOf(FunctionAdapter.class));
+ functionClasses.addAll(scanResult.getClassesImplementing(Function.class.getName()).getNames());
+ functionClasses.addAll(scanResult.getSubclasses(FunctionAdapter.class.getName()).getNames());
return functionClasses;
}
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
index 6dbf018..82c5937 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
@@ -193,7 +193,7 @@ public class InternalConfigurationPersistenceServiceTest {
public void getPackagesToScanWithoutSystemProperty() {
String[] packages = service.getPackagesToScan();
assertThat(packages).hasSize(1);
- assertThat(packages[0]).isEqualTo("");
+ assertThat(packages[0]).isEqualTo("org.apache.geode");
}
@Test
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index d9a1ae6..48ad4d5 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -21,6 +21,7 @@ bcel.version = 6.0
catch-exception.version = 1.4.4
catch-throwable.version = 1.4.4
cglib.version = 3.2.4
+classgraph.version = 4.0.6
commons-beanutils.version = 1.9.3
commons-collections.version = 3.2.2
commons-configuration.version = 1.10
@@ -35,7 +36,6 @@ commons-validator.version = 1.6
HikariCP.version = 3.2.0
derby.version = 10.13.1.1
dom4j.version = 1.6.1
-fast-classpath-scanner.version=2.21
fastutil.version = 8.2.1
google-gson.version=2.8.5
guava.version = 25.1-jre