关于java:从maven依赖包中查找所有类 | 珊瑚贝

Find all classes from package in maven dependency


我试图使用反射库从”scala”包中获取所有类,但没有成功(测试失败):

1
2
3
4
5
6
7
8
9
10
11
12
13
public static List<Class< ? >> getClassesFromPackage(String packageName) {
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
    classLoadersList.add(ClasspathHelper.contextClassLoader());
    classLoadersList.add(ClasspathHelper.staticClassLoader());
    classLoadersList.add(ClassLoader.getSystemClassLoader());

    Reflections reflections = new Reflections(new ConfigurationBuilder()
            .setScanners(new SubTypesScanner(false /* don’t exclude Object.class */), new ResourcesScanner())
            .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
            .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(packageName))));

    return reflections.getSubTypesOf(Object.class).stream().collect(Collectors.toList());
}

我的测试方法是:

1
2
3
4
5
6
7
8
@Test
public void classFinderTest() {
    String packageName =“scala”;

    List<Class< ? >> listClasses = ClassFinder.getClassesFromPackage(packageName);

    assertFalse(“the list is empty”, listClasses.isEmpty());
}

在我的 pom.xml 中声明了 scala 库依赖项:

1
2
3
4
5
<dependency>
    <groupId>org.scalalang</groupId>
    scalalibrary</artifactId>
    <version>2.11.6</version>
</dependency>

我需要使用 java 代码来做这件事。

我想以编程方式获取属于某个特定包的所有类。例如,如果 packageName 是”scala”,我想要一个包含:scala.Int、scala.Double、scala.Enumeration 等的列表。

谁能提供一些想法来找到解决方案?

  • 我不确定您到底在寻找什么,请查看此 stackoverflow.com/questions/15720822/…
  • @user Reflections 和 ClasspathHelper 类来自反射库:我在问题中指定的 code.google.com/p/reflections。
  • @user2985467 我已经看到该页面,但我不知道如何访问 scala-library.jar,因为它在我的 maven 依赖项中,所以我无法使用该页面中提供的解决方案来提供答案.


一个工作的测试类(Test.java)是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Set;

import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner ;

public class Test {
    public static Set<Class< ? >> getClassesFromPackage(String packageName) {
        Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));

        return reflections.getSubTypesOf(Object.class);
    }

    public static void main(Stringargs) {
        for ( Class c: getClassesFromPackage(“scala”) ) {
            System.out.println(c.getName());
        }
    }
}

(在类路径中包含所有必要的库)。

使用 Reflections(String prefix, Scanner… scanners)
可以简化您的代码。


来源:https://www.codenong.com/33239604/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9586.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?