Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven无法找到带有OpenJDK 11的jaxb api,即使它存在于存储库中_Java_Maven_Spring Boot_Java 11 - Fatal编程技术网

Java Maven无法找到带有OpenJDK 11的jaxb api,即使它存在于存储库中

Java Maven无法找到带有OpenJDK 11的jaxb api,即使它存在于存储库中,java,maven,spring-boot,java-11,Java,Maven,Spring Boot,Java 11,我有一台装有Windows操作系统的机器,它用于构建一些战争项目。它安装了Java8。我正在使用Maven 3.2.5构建这些战争项目。一切正常。但是,由于Java8的免费更新即将结束,它在未来将成为一个问题,所以我想升级到OpenJDK11 我下载了OpenJDK 11,但没有安装它,因为我只是想在项目开始时尝试一下。我拿起一个WAR项目来检查OpenJDK11是否有效。这个项目是使用JHipster和Spring Boot创建的。 我将这个项目的pom.xml改为使用spring-boot.

我有一台装有Windows操作系统的机器,它用于构建一些战争项目。它安装了Java8。我正在使用Maven 3.2.5构建这些战争项目。一切正常。但是,由于Java8的免费更新即将结束,它在未来将成为一个问题,所以我想升级到OpenJDK11

我下载了OpenJDK 11,但没有安装它,因为我只是想在项目开始时尝试一下。我拿起一个WAR项目来检查OpenJDK11是否有效。这个项目是使用JHipster和Spring Boot创建的。 我将这个项目的pom.xml改为使用
spring-boot.version到2.1.2
,将
java.verion改为11
,并将
jaxb api、jaxb impl、jaxb runtime
javax.activation
条目(如下所示)放在java 11中,以避免与jaxb相关的依赖性错误

在windows命令提示符下,我将
JAVA_HOME
PATH
变量设置为OpenJDK11,然后启动
mvn clean compile package
命令。正如预期的那样,所有与jaxb相关的依赖项都下载到maven存储库中,但maven仍然抛出错误
NoClassDefFoundError:javax/xml/bind/JAXBException
,而jaxb api jar仍然在maven存储库中。我试图再次发出命令,但没有成功

有人能告诉我可能的根本原因或解决方法吗

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

javax.xml.bind
jaxb api
2.3.0
com.sun.xml.bind
jaxb impl
2.3.0
org.glassfish.jaxb
jaxb运行时
2.3.0
javax.activation
激活
1.1.1

原因可能是java9之后的模块,因此您应该创建一个module-info.java文件,更多详细信息请参阅相关文档。

我在使用以下POM时得到了这个结果

<properties>
    <maven-jaxb2-plugin.version>0.14.0</maven-jaxb2-plugin.version>
</properties>

0.14.0
//


javax.servlet
javax.servlet-api
4.0.1
假如
javax.xml.bind
jaxb api
2.4.0-b180830.0359
javax.activation
激活
1.1
org.glassfish.jaxb
jaxb运行时
2.3.0-b170127.1453
//


org.springframework.boot
springbootmaven插件
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
${maven-jaxb2-plugin.version}
生成
${project.basedir}/src/main/resources/wsdl
*.wsdl

显然,在使用Java8编写的Java项目中,支持JDK11只需要对各种组件进行JAR升级。在您希望在产品中创建模块化项目并需要导入/导出模块之前,不需要模块支持

我已经升级了javaassistjar以及上面提到的那些,之后一切都开始正常工作

<javassist.version>3.24.1-GA</javassist.version>
3.24.1-GA
正如问题本身所提到的

        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
            <version>1.2.0</version>
        </dependency>

org.glassfish.jaxb
jaxb运行时
2.3.2
javax.xml.bind
jaxb api
2.3.1
com.sun.xml.bind
jaxb内核
2.2.11
com.sun.xml.bind
jaxb impl
2.2.11
javax.activation
javax.activation-api
1.2.0

我也有同样的问题,我使用spring boot和java 11。 这对我有帮助

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
</dependency>

org.glassfish.jaxb
jaxb运行时

将以下代码添加到start类中(例如SpringBootApplication):


首先使用Maven 3.6.0。我猜这可能与“拆分包”问题有关,即具有相同包名的类不能位于两个不同的jar文件中。这将导致类加载问题。编辑您的问题并将添加的依赖项发布到pom.xml中。@Michael-O将Maven更新为3.6.0,但仍然存在相同的错误。您是将库打包到WAR文件中,还是从应用程序平台导入库?因为NoClassDefFoundError通常意味着“我找到了类,但我没有访问它的权限”。在我的项目中创建module-info.java并添加:module com.abc{requires java.xml.bind;}但是运气不好,相同的问题我已经做了前两个更改,并且得到了相同的错误。第三个变化的意义是什么。对不起,我不明白这里的wsdl。这是您的示例代码位置吗?即使在完成所有提到的更改之后,我也会遇到相同的错误
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.11</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
            <version>1.2.0</version>
        </dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
</dependency>
@Bean
public TomcatServletWebServerFactory tomcatFactory() {
    return new TomcatServletWebServerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
        }
    };
}