问题标签 [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.
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 提供的访问权限?
java - Java 9 中的 requires 和 requires 传递语句有什么区别?
模块声明中的requires和requires 传递模块语句有什么区别?
例如:
java - 如何从 Java 9 模块中导出所有包?
现在,对于我拥有的每个模块,我都需要明确指定要导出的包。例如:
但是,它不是很方便。我想做这样的事情:
有没有办法做到这一点?这个限制从何而来?
java - 模块不依赖 Intellij IDEA 2017.2.5 Java 9
我刚刚在命令行中测试了我对 java 9 模块的理解。然后我转到 Intellij IDEA 2017.2.5 进行测试。那里我面临错误module is not in dependencies
不知道为什么 intellij 显示错误。
我只是在module-info.java
asexports
和requires
.
然后我使用 Intellij 智能通过 IDEA 自行解决错误。只需 ALT+ENTER 然后我单击Add dependency on module 'module-name-here'
. 但我不知道 Intellij 在幕后做了什么。有什么想法吗?
java - 在 Java 9 的 JShell 中创建模块
只是探索 Java 的新版本,它的新模块系统,以及使用 jshell。可能我的问题没有太多意义,但我只是好奇。
所以我想出了一个问题:有没有办法在 jshell 中创建一个模块?或者模块只能在module-info.java
?
java - 模块声明中的requires和requires static有什么区别
模块声明中的requires和requires 静态模块语句有什么区别?
例如:
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 错误
java - Java 9:模块路径上可能有 2 个同名模块
模块路径上是否可以有 2 个具有完全相同名称(但内容略有不同)的模块?
据我所知,Java 9 编译器并没有抱怨它。我有 2 个模块声明如下:
两者都包含com.dj.helper
包装,但包装内的内容不同。然后在我的主应用程序中,我希望导入这个模块:
同名的两个模块都在我的模块路径上。
我希望在编译我的com.dj
模块时,编译器会抱怨同一个模块存在两次,但事实并非如此。这是否实际上意味着您的模块路径上可能有同一个 jar 的 2 个版本,而 Java 将不知道该使用哪一个?
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.java
,Baz.java
和另一个文件,Foo.dyvil
。后者是用基于 JVM 的编程语言编写的。所以依赖链看起来像这样:
在构建过程中,它被编译为Foo.class
,然后被放置在一个新的 Jar 文件中,该文件稍后会替换bootstrap.jar
. 放置所有这些文件的原因是 Java 和 Dyvil 编译器都无法处理其他语言文件,因此它们需要对先前构建中的已编译类进行一些访问。这就是为什么存在bootstrap.jar
.
现在解决实际问题:由于 Java 9 中不允许拆分包,有没有办法使用我的项目中描述和使用的“bootstrap”jar 文件来实现“拆分构建”?或者还有其他方法吗?