Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
将Javax嵌入java9_Java_Hibernate_Java 9 - Fatal编程技术网

将Javax嵌入java9

将Javax嵌入java9,java,hibernate,java-9,Java,Hibernate,Java 9,我花了几个小时试图解决这个问题,我需要帮助: 这不是一个未知的问题,javax不是java9的一部分,如果没有下面的exeption,我想不出如何运行它: Exception in thread "main" org.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 0 and column 0 in FILE C:\Users\Miles\W

我花了几个小时试图解决这个问题,我需要帮助:

这不是一个未知的问题,javax不是java9的一部分,如果没有下面的exeption,我想不出如何运行它:

Exception in thread "main" org.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 0 and column 0 in FILE C:\Users\Miles\Workspace\Projekte\SpringProjekte\RestForFun\resources\hibernate.cfg.xml. Message: null
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:133)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:65)
at org.hibernate.boot.cfgxml.internal.ConfigLoader.loadConfigXmlFile(ConfigLoader.java:76)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.configure(StandardServiceRegistryBuilder.java:167)
at org.hibernate.cfg.Configuration.configure(Configuration.java:300)
at noobz.teamz.RestForFun.RestForFunApplication.main(RestForFunApplication.java:31)
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:122)
... 5 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
... 9 more
这是我的例子:

import org.hibernate.cfg.Configuration;
import java.io.*;


public class RestForFunApplication {


    public static void main(String[] args) {


        RestForFunApplication rsf = new RestForFunApplication();

        File file = new File("resources\\hibernate.cfg.xml");
        if (!file.exists())
            System.out.println("no hibernate.cfg.xml");
        Configuration sessionFactory = new Configuration();
        sessionFactory.configure(file);
    }
}
这是我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>noobz.teamz</groupId>
<artifactId>RestForFun</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>RestForFun</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.1.4</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.2.12.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.7.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search</artifactId>
        <version>5.8.2.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.2</version>
            <configuration>
                <release>9</release>
                <compilerArgs>
                    <arg>--add-modules</arg>
                    <arg>javax.xml.bind</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

以intellij idea编译器设置,并尝试通过控制台运行


什么都不管用,我还是有例外。我最想哭的是,我非常渴望得到这份工作。

这是个好问题。但是它可以简化为一个非常简短的示例,因此您不需要使用
spring
hibernate
依赖关系来打扰读者。下面是简短的代码:

public static void main(String[] args) throws Exception {
    JAXBContext jaxbContext = JAXBContext.newInstance(Foo.class);
}
将导致问题(请考虑
Foo
be any POJO)

事实上,所有关于S.O.的现有解决方案都不能正常工作(例如,这个“规范”问题:)。我不知道这是最近的JavaJDK(9.0.1)更新的结果,还是我做错了。然而。我个人认为玩
--addmodule
属性不是一种干净的方式。我相信,正确的方法是只使用maven依赖项。我已经找到了这个需要的最小列表,它是:

<dependencies>
    <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>
</dependencies>
当您使用Java-9时

我已找到(并检查)下一组依赖项:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>javax.activation-api</artifactId>
    <version>1.2.0</version>
</dependency>

javax.xml.bind

更新:对于Java 11,这就足够了:

    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.4.0-b180830.0438</version>
    </dependency>

org.glassfish.jaxb

我建议首先尝试从命令行使用Maven。您的pom称为javax.xml.bind,但该模块称为java.xml.bind(java后面没有x)。尽管这会导致另一个错误……但异常看起来确实像是加载了java.xml.bind。否则,
JAXBException
将不可用-也许?您可以将对
org.glassfish.jaxb:jaxb-core:2.3.0
的依赖替换为对
com.sun.xml.bind:jaxb-core:2.3.0
javax.activation:javax.activation-api:1.2.0
?我认为这些是JAXB实现的正确坐标(您拥有JAXB API的正确坐标)。您还可以在使用独立版本时,从POM中删除
--添加模块
。没错,这项更改付出了巨大的努力!非常感谢。现在,如果我更改回代码并启动它,那么会有一个以java.lang.NoClassDefFoundError结尾的长调试列表:javax/validation/ClockProvider。我找不到合适的依赖关系(真丢脸)。你有什么提示吗?我想在做正确的标记之前取得成功。泰:)你试过这个依赖关系吗?但无论如何,这个问题超出了你最初问题的范围。如果我帮助你解决了这个特殊的问题,那么接受这个答案将是公平的,因为这个依赖解决了它!请将其添加到下一个问题的答案中。非常感谢。不仅要找到答案,还要找到正确的依赖关系!谢谢,在其他地方尝试了许多其他建议后,这对我来说非常有效。如果可以的话,我会投两次票!
<dependencies>
    <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>
</dependencies>
<java.version>1.8</java.version>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</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>
        <version>2.4.0-b180830.0438</version>
    </dependency>