Spring Boot 2.1 с Java 11: невозможно разрешить постоянный URL-адрес корневого модуля - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть приложение, которое использует Spring Boot и Spring Data JPA с конфигурацией на основе только аннотаций для своего уровня персистентности.Я начал переносить это приложение на последнюю версию Spring Boot (2.1.x) вместе с Java (OpenJDK) 11. После настройки дескрипторов модуля приложение запускается, но когда Spring достигает точки, где оно хочет создатьНа уровне постоянства приложение останавливается со следующим исключением:

Caused by: javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
    at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:640)
    at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.preparePersistenceUnitInfos(DefaultPersistenceUnitManager.java:462)
    at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.afterPropertiesSet(DefaultPersistenceUnitManager.java:443)
    at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:328)
    at spring.beans@5.1.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804)
    at spring.beans@5.1.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
    ... 16 common frames omitted
Caused by: java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it does not exist
    at spring.core@5.1.2.RELEASE/org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195)
    at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:636)
    ... 21 common frames omitted

Эта проблема возникает, только когда я пытаюсь запустить приложение в IntelliJ IDEA, который запускает JVM путем настройки пути к модулю вместо пути к классам (как и ожидалось).Когда я пытаюсь запустить приложение, упакованное как исполняемый файл jar, проблема исчезает, но, как я заметил, дескрипторы модуля в основном игнорируются, когда приложение запускается из исполняемого файла jar ...

Что мне удалосьобнаружение состоит в том, что org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager находит объекты, а также сохраняет их в единице постоянства, но после этого пытается определить корневой URL-адрес единицы постоянства, и в этот момент происходит сбой.Без дескрипторов модуля у приложения есть classpath, и этого достаточно для DefaultPersistenceUnitManager, оно будет использовать целевой каталог (запущенный из IDEA) или JAR модуля постоянства Maven (запущенный из исполняемого JAR).

Полагаю,в дескрипторе модуля я что-то упускаю, так что просто для справки это выглядит так:

open module leaflet.app.backend.persistence {
    requires java.persistence;
    requires java.validation;
    requires org.apache.commons.lang3;
    requires org.hibernate.orm.core;
    requires spring.beans;
    requires spring.context;
    requires spring.data.commons;
    requires spring.data.jpa;
    requires spring.tx;

    exports hu.psprog.leaflet.persistence.dao;
    exports hu.psprog.leaflet.persistence.entity;
    exports hu.psprog.leaflet.persistence.repository;
    exports hu.psprog.leaflet.persistence.repository.specification;
}

Если у кого-то есть какие-то мысли по этому поводу, пожалуйста, не стесняйтесь писать этовниз - я в основном застрял в этой точке.Заранее большое спасибо!

1 Ответ

0 голосов
/ 13 марта 2019

У меня была такая же ошибка, и мне удалось ее исправить, добавив java.xml.bind

requires java.persistence;
requires java.validation;
requires java.sql;
requires java.xml.bind;

requires spring.boot;
requires spring.boot.autoconfigure;
requires spring.beans;
requires spring.context;
requires spring.core;
requires spring.data.jpa;
requires spring.data.commons;
requires spring.tx;
requires spring.web;

requires slf4j.api;
requires lombok;
requires net.bytebuddy;
requires tomcat.embed.core;
...