问题标签 [java-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
31012 浏览

java - 如何在 Java 9 的运行时访问 javax.annotation.Resource

我有一个测试:

它试图访问javax.annotation.Resource. 在 java 8 中它可以工作,但在 java 9(我使用的是 Oracle JDK 9)中它失败并显示ClassNotFoundException. 正如Spring: @Resource injection 在 JDK9 下所解释的那样,javax.annotation.Resource默认情况下 Java 9 中的 JDK 不可用。

我正在尝试使用模块描述符访问它:

在这里,我特别请求访问java.xml.ws.annotation模块(其中包含javax.annotation.Resource)。但测试仍然失败。

当我删除该requires子句并添加包含的依赖项(作为库)javax.annotations.Resource时,它可以工作:

当我同时添加它们(pom.xml和Maven 依赖项requires java.xml.ws.annotation)时,IDEA 中的编译失败并显示以下消息:

但是 Maven 构建仍然成功!

如果我java.xml.ws.annotation通过命令行添加模块,它可以工作(没有 Maven 依赖项和with requires子句):

我的模块描述有问题吗?如何在javax.annotation.Resource没有命令行开关的情况下访问 JDK 提供的访问权限?

测试项目位于https://github.com/rpuch/test-resource-jdk9

0 投票
7 回答
18377 浏览

java - Java 9 中的 requires 和 requires 传递语句有什么区别?

模块声明中的requiresrequires 传递模块语句有什么区别?

例如:

0 投票
1 回答
5999 浏览

java - 如何从 Java 9 模块中导出所有包?

现在,对于我拥有的每个模块,我都需要明确指定要导出的包。例如:

但是,它不是很方便。我想做这样的事情:

有没有办法做到这一点?这个限制从何而来?

0 投票
1 回答
2579 浏览

java - 模块不依赖 Intellij IDEA 2017.2.5 Java 9

我刚刚在命令行中测试了我对 java 9 模块的理解。然后我转到 Intellij IDEA 2017.2.5 进行测试。那里我面临错误module is not in dependencies不知道为什么 intellij 显示错误。

我只是在module-info.javaasexportsrequires.

然后我使用 Intellij 智能通过 IDEA 自行解决错误。只需 ALT+ENTER 然后我单击Add dependency on module 'module-name-here'. 但我不知道 Intellij 在幕后做了什么。有什么想法吗?

0 投票
3 回答
9874 浏览

java - 模块和 JAR 文件有什么区别?

我正在从What's New in Java9 中了解 Java 9 ,讨论中的热门话题之一是The Modular JDK

JAR 文件是模块吗?

模块与 JAR 文件有何不同?

0 投票
1 回答
302 浏览

java - 在 Java 9 的 JShell 中创建模块

只是探索 Java 的新版本,它的新模块系统,以及使用 jshell。可能我的问题没有太多意义,但我只是好奇。

所以我想出了一个问题:有没有办法在 jshell 中创建一个模块?或者模块只能在module-info.java?

0 投票
2 回答
4350 浏览

java - 模块声明中的requires和requires static有什么区别

模块声明中的requiresrequires 静态模块语句有什么区别?

例如:

0 投票
0 回答
400 浏览

java - 编译 Java 9 模块时的包冲突

我正在尝试编译一个具有单个直接依赖项的简单模块,并且我收到许多关于从 2 个库中读取的包的错误。
我正在使用最新的稳定版本的库,我看到包在它们之间是分开的。

有没有什么方法可以解决这个问题,而无需等待新版本的包未拆分的库?

模块信息.java:

构建.gradle:

Java版本:9+181
gradle版本:4.2

./gradlew Abc:compileJava

任务:Abc:compileJava
错误:未命名模块从功能区和ribbon.transport读取包com.netflix.ribbon
错误:未命名模块从ribbon.httpclient 和ribbon.loadbalancer 读取包com.netflix.loadbalancer
错误:未命名模块从 jcl.over.slf4j 和 commons.logging 读取包 org.apache.commons.logging
错误:未命名的模块从 jcl.over.slf4j 和 commons.logging 读取包 org.apache.commons.logging.impl
错误:未命名模块从ribbon.httpclient 和ribbon.core 读取包com.netflix.client.http
错误:未命名模块从ribbon.loadbalancer 和ribbon.core 读取包com.netflix.client
错误:模块 spring.cloud.starter.archaius 从功能区和ribbon.transport 读取包 com.netflix.ribbon
错误:模块 spring.cloud.starter.archaius 从 jcl.over.slf4j 读取包 org.apache.commons.logging和 commons.logging
错误:模块 spring.cloud.starter.archaius 从 jcl.over.slf4j 和 commons.logging 读取包 org.apache.commons.logging.impl
错误:模块 spring.cloud.starter.archaius 读取包 com。来自ribbon.httpclient 和ribbon.loadbalancer 的netflix.loadbalancer
...
100 错误

0 投票
2 回答
2736 浏览

java - Java 9:模块路径上可能有 2 个同名模块

模块路径上是否可以有 2 个具有完全相同名称(但内容略有不同)的模块?

据我所知,Java 9 编译器并没有抱怨它。我有 2 个模块声明如下:

两者都包含com.dj.helper包装,但包装内的内容不同。然后在我的主应用程序中,我希望导入这个模块:

同名的两个模块都在我的模块路径上。

我希望在编译我的com.dj模块时,编译器会抱怨同一个模块存在两次,但事实并非如此。这是否实际上意味着您的模块路径上可能有同一个 jar 的 2 个版本,而 Java 将不知道该使用哪一个?

0 投票
1 回答
453 浏览

java - Java 9 中的拆分包和引导 Jar

似乎在 Java 9 中不允许有所谓的拆分包,即在两个不同的模块中定义同一个包。这导致我的迁移过程出现问题:(Gradle)项目包含一个名为 的 Jar 文件,bootstrap.jar其结构如下:

src目录包含一个com.example.Bar依赖于的类Foo以及一个模块定义,对于com.example. 该bootstrap.jar文件不包含模块信息,因为它是在 Java 9 之前编译的,因此它使用一个名为bootstrap. 问题是现在包com.example在两个模块中都定义了,com.example并且bootstrap.

首先,有这个bootstrap.jar文件的原因如下:

src/com/example文件夹实际上包含Bar.javaBaz.java和另一个文件,Foo.dyvil。后者是用基于 JVM 的编程语言编写的。所以依赖链看起来像这样:

在构建过程中,它被编译为Foo.class,然后被放置在一个新的 Jar 文件中,该文件稍后会替换bootstrap.jar. 放置所有这些文件的原因是 Java 和 Dyvil 编译器都无法处理其他语言文件,因此它们需要对先前构建中的已编译类进行一些访问。这就是为什么存在bootstrap.jar.

现在解决实际问题:由于 Java 9 中不允许拆分包,有没有办法使用我的项目中描述和使用的“bootstrap”jar 文件来实现“拆分构建”?或者还有其他方法吗?