我们使用maven并拥有依赖于其他内部工件的工件.我正在迁移到java-9,并且打算首先将所有内容迁移到Java 9而不模块化代码(即在未命名的模块中).
我遇到的问题是我们依赖java.xml.bind,现在不包含在默认模块中.是否有一种"正确"的方式来表达对java.xml.bindMaven的依赖?
在我的@Configuration课堂上,我有如下的家属:
@Configuration
public class MyConfig {
@Resource(name = "firstDataSource")
private DataSource firstDataSource;
// more code
}
Run Code Online (Sandbox Code Playgroud)
在Oracle JDK 8:firstDataSource字段中工作的依赖项注入已成功注入非null值.
现在我尝试在JDK 9中运行应用程序(没有修改).结果是@Resource不再触发依赖注入:使用此注释注释的所有内容仍然存在null.
什么可能是@Resource停止工作的原因?
在项目中使用Spring 4.0.9.
这是一个测试项目,展示了这个问题:https://github.com/rpuch/test-spring-injection-jdk9
它包含一个测试:MainTest我从IDE运行.当我使用JDK 8时,它会输出
??? 29, 2017 10:45:13 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5f8ed237: startup date [Fri Sep 29 22:45:13 SAMT 2017]; root of context hierarchy
OK
Run Code Online (Sandbox Code Playgroud)
但是在JDK 9下,它会在启动期间抛出异常,这是由以下原因造成的:
Caused by: java.lang.IllegalStateException: bean1 is not injected
at Bean2.<init>(Bean2.java:7)
at Config2.bean2(Config2.java:16)
Run Code Online (Sandbox Code Playgroud)
当没有注入依赖时会发生这种情况.
所以我尝试将我的项目迁移到Java 9,但这个过程似乎并不像我想象的那么容易.我不断得到一些关于隐形包的错误,我可以用我的pom中的以下参数修复:
<compilerArgs>
<arg>--add-modules</arg>
<arg>java.se.ee</arg>
</compilerArgs>
Run Code Online (Sandbox Code Playgroud)
但我仍然得到以下错误:
cannot find symbol
[ERROR] symbol: class Priority
[ERROR] location: package javax.annotation
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激
我将我的项目使用的SDK升级到Java 10.以下import语句导致错误:
import javax.annotation.PostConstruct;
包'javax.annotation'在模块'java.xml.ws.annotation'中声明,但模块'application'不读取它
点击ALT + ENTER让Intellij修复它,我收到了以下选项:
我选择Add Maven Dependency...了以下依赖项添加到pom.xml中.
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
看着新添加的JAR的MANIFEST.MF,我注意到模块的名称是java.annotation.
所以我添加requires java.annotation到module-info.java.
module application {
requires java.annotation;
}
Run Code Online (Sandbox Code Playgroud)
当我按CTRL +点击时requires java.annotation:
Intellij正确导航到JAR:
所以看起来我的模块名称正确并且javax.annotation:javax.annotation-api我的模块可以使用.不幸的是,错误import javax.annotation.PostConstruct并没有消失.为了确认我的模块描述符是否正常工作,我添加了其他指令,并且一切正常.我还添加了指令requires java.xml.ws.annotation,
这导致import语句错误消失但当然,这不是一个令人满意的解决方案,因为java.xml.ws.annotation已被弃用并标记为要删除.
有关如何解决此问题的任何想法?我需要能够将模块java.annotation提供给模块,application并且从我在这里和这里以及此处和此处阅读的方法来实现它是通过向模块路径添加JAR,以及我在这里阅读的新内容必须通过module-info.java中的指令引用添加的模块.
java module intellij-idea java-platform-module-system java-9
java ×4
java-9 ×4
java-platform-module-system ×2
maven ×2
java-module ×1
jaxb ×1
module ×1
spring ×1