我有个测试:
public class ResourceTest {
@Test
public void test() throws ClassNotFoundException {
Class.forName("javax.annotation.Resource");
}
}
module test {
requires java.xml.ws.annotation;
requires junit;
}
当我删除requires
子句并添加一个包含javax.annotations.resource
的依赖项(作为库)时,它可以工作:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
当我添加它们时(pom.xml
中的Maven依赖项和需要java.xml.ws.annotation
),IDEA中的编译失败,出现以下消息:
the unnamed module reads package javax.annotation from both java.xml.ws.annotation and java.annotation
但是Maven build仍然成功!
mvn clean test -DargLine="--add-modules java.xml.ws.annotation"
测试项目可在https://github.com/rpuch/test-resource-jdk9获得
只是为了澄清这里的一些混乱。你在问题中提出的工作方式是可供选择的,不应该像你已经看到的那样组合在一起。
未命名模块从java.xml.ws.Annotation和java.Annotation中读取包javax.Annotation。
所以它的工作方式是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>9</release>
<compilerArgs>
<arg>--add-modules</arg>
<arg>java.xml.ws.annotation</arg>
</compilerArgs>
</configuration>
</plugin>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
不,要求
只是声明的一部分。[想想看,在JDK 9之前,如果在类中使用语句import some.foo.bar;
,而该类没有作为库(类路径)添加,那么这会起作用吗?]。标记为required的模块必须位于modulepath上,您才能访问它。
更新-第一个选项在使用JDK/11或更高版本时将不再受支持,其中删除Java EE和CORBA模块的JEP是目标。
问题内容: 我有一个测试: 它尝试访问。在Java 8中,它起作用了,但是在Java 9中(我在使用Oracle JDK 9),它失败了。从JDK是默认不可用在Java中9。 我正在尝试使用模块描述符访问它: 在这里,我专门请求访问模块(包含)。但是测试仍然失败。 当我删除该子句并添加包含的依赖项(作为库)时,它会起作用: 当我(在Maven的依赖性增加他们两个和),汇编IDEA失败,出现以下消息
问题内容: 我有一个带有表的数据库,该表充满了用于检查另一个数据库的条件和错误消息。 我想运行一个循环,以便对照第二个数据库中的所有表检查所有这些条件,并生成一个给出错误的报告。 这是可能的ms访问。 例如, querycrit表 我有超过400个类似这样的不同变量的查询。 我针对其运行查询的表是 记录表 问题答案: 这是更多示例代码。它说明了两种不同类型的记录集的用法。您可能希望阅读VBA陷阱:
有没有一种方法可以在运行时访问JUnit5版本? 例如。 在JUnit4中工作得很好。 我正在寻找JUnit5的“对应物” 谢谢:-)
我想通过liquibase-maven-plugin运行一个liquibase更新,但是changeset yml文件在一个。jar中,我通过依赖项拉入这个文件。 当我用TotalCommander打开。jar时,它具有以下结构:xy.jar/changelog/changeset.yml。
通过使用命令,我发现内存中的地址contains start路径 ,并且由于C标准,此路径以 byte结尾。 所以我试着写一个简单的C程序来打印这一行(我使用了丹尼斯·尤里切夫(Denis Yurichev)的“RE初学者”一书中的一个示例 - 第24页): 但是我很失望得到了一个分段错误,而不是预期的< code >/lib 64/LD-Linux-x86-64 . so . 2 输出。 我觉得
问题内容: 我有一个正在运行的线程,但是从外面我无法绕过一个值来停止该线程。如何在内部发送false / true值或调用运行线程的公共方法?当我按下按钮1?例如: 或 跟进(校对): 问题答案: 如果您通过类而不是通过a定义它,则可以调用实例方法。 还要注意,由于多个内核具有自己的关联内存,因此您需要警告处理器该状态可能在另一个处理器上更改,并且它需要监视该更改。听起来很复杂,但只需将’vola