相关疑难解决方法(0)

如何表达maven对Java ee功能的依赖以转换到Java 9?

我们使用maven并拥有依赖于其他内部工件的工件.我正在迁移到,并且打算首先将所有内容迁移到Java 9而不模块化代码(即在未命名的模块中).

我遇到的问题是我们依赖java.xml.bind,现在不包含在默认模块中.是否有一种"正确"的方式来表达对java.xml.bindMaven的依赖?

java jaxb maven java-platform-module-system java-9

19
推荐指数
3
解决办法
1万
查看次数

Spring:@Resource注入在JDK9下停止工作

在我的@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 spring dependency-injection java-9

9
推荐指数
2
解决办法
2124
查看次数

Java 9迁移javax.annotation

所以我尝试将我的项目迁移到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)

任何帮助,将不胜感激

java maven java-9 java-module

3
推荐指数
1
解决办法
3921
查看次数

Intellij:如何为javax.annotation.PostConstruct添加java.annotation模块

我将我的项目使用的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

2
推荐指数
1
解决办法
3628
查看次数