测试包中的Java反射加载类

测试包中的Java反射加载类,java,gradle,reflection,Java,Gradle,Reflection,我有这样的结构: │ build.gradle └───src ├───main │ └───java │ Main.java └───test └───java Test1.java Main.java: 公共类主{ 公共静态void main(字符串[]args)引发ClassNotFoundException{ 类testClass=Class.forName(“test.Test1”

我有这样的结构:

│   build.gradle
└───src
    ├───main
    │   └───java
    │          Main.java
    └───test
        └───java
               Test1.java
Main.java:

公共类主{
公共静态void main(字符串[]args)引发ClassNotFoundException{
类testClass=Class.forName(“test.Test1”);
}
}
在main方法中,我想获取
Test1
类的元数据,该元数据放在测试包中。但是,我得到了这个错误:

Exception in thread "main" java.lang.ClassNotFoundException: test.Test1
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:377)
    at Main.main(Main.java:4)
如何访问测试包中的类

更新:

我相信这可能在Gradle(至少3.0版[年]或更高版本)中起作用

Class testClass=Thread.currentThread().getContextClassLoader()
.loadClass(“test.Test1”);
(我假设
Test1
在包
test
中,而不是如图所示在默认包中。)


当然,从生产代码访问测试代码是一种奇怪的设计选择。

在“主”类和“测试”类之间进行分离的方式是“测试”类可以访问“主”类,但不能访问其他方式。原因是“主”类对库的使用者可用,而“测试”类对库的使用者不可用。您的
Main
类应该没有理由访问
Test1
类。这是设置(相对)的问题类路径。
src.test.java.*
中可用的类的目的是单独测试您在
src.main.java.*
中实现的函数性。如果您运行测试代码,它可能会起作用。
Class<?> testClass = Thread.currentThread().getContextClassLoader()
    .loadClass("test.Test1");