如何在 Java 9 中的运行时访问 javax.annotation.Resource
我有一个测试:
public class ResourceTest {
@Test
public void test() throws ClassNotFoundException {
Class.forName("javax.annotation.Resource");
}
}
它尝试访问 。在java 8中,它有效,但在java 9中(我使用的是Oracle JDK 9),它以.正如这里所解释的 春天:@Resource注入在JDK9下停止工作,在Java 9中默认不可用。javax.annotation.Resource
ClassNotFoundException
javax.annotation.Resource
我正在尝试使用模块描述符访问它:
module test {
requires java.xml.ws.annotation;
requires junit;
}
在这里,我专门请求访问模块(其中包含)。但测试仍然失败。java.xml.ws.annotation
javax.annotation.Resource
当我删除该子句并添加一个包含 的依赖项(作为库)时,它的工作原理是:requires
javax.annotations.Resource
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
当我将它们都添加(和 中的 Maven 依赖项)时,IDEA 中的编译失败,并显示以下消息:pom.xml
requires java.xml.ws.annotation
the unnamed module reads package javax.annotation from both java.xml.ws.annotation and java.annotation
但是Maven构建仍然成功!
如果我通过命令行添加模块,它可以工作(没有Maven依赖项和子句):java.xml.ws.annotation
requires
mvn clean test -DargLine="--add-modules java.xml.ws.annotation"
我的模块描述有问题吗?如何在没有命令行开关的情况下访问 JDK 提供的访问权限?javax.annotation.Resource