eclipseLink 2.7.0: Статическая ошибка переплетения для информации о подписывающей стороне "javax.persistence.AttributeConverter" не совпадает

При запуске задачи gradle для статического плетения в eclipseLink 2.7.0 появляется ошибка ниже.

21:50:14.206 [ОШИБКА] [system.err] Исключение Описание: Ошибка предварительной установки PersistenceUnit [по умолчанию].
21:50:14.206 [ОШИБКА] [system.err] Внутреннее исключение: java.lang.SecurityException: информация о подписчике класса "javax.persistence.AttributeConverter" не совпадает с информацией о подписывающей стороне других классов в том же пакете
21:50:14.206 [ОШИБКА] [system.err] в org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createPredeployFailedPersistenceException (EntityManagerSetupImpl.java:20 80)
21:50:14.206 [ОШИБКА] [system.err] в org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy (EntityManagerSetupImpl.java:2071)
21:50:14.206 [ОШИБКА] [system.err] Исключение Описание: Ошибка предварительной установки PersistenceUnit [по умолчанию].
21:50:14.206 [ОШИБКА] [system.err] Внутреннее исключение: java.lang.SecurityException: информация о подписчике класса "javax.persistence.AttributeConverter" не совпадает с информацией о подписывающей стороне других классов в том же пакете

Я осознаю, что эти конфликты возникают, когда на класс ссылаются разные банки.
Проверяется в тех же строках. Атрибут Convertter присутствует в javax.persistence 2.2.0, а также в eclipselink 2.7.0, вызывающем конфликт. javax.persistence 2.2.0 является обязательной зависимостью для eclipselink 2.7.0.
Я gussesing должен исключить один из jar, чтобы AttributeConverter можно было ссылаться из 1 jar. Но не уверен, как.

Есть мысли по решению этой проблемы?

3 ответа

Решение

Проблема, кажется, с подписанием банок. eclipselink 2.7.0 использует постоянство javax 2.2.0, которое подписано фондом eclipse, а eclipselink 2.7.0 - нет. AttributeConverter в моем случае упоминался, и было несоответствие подписи. Выпуск 525457 уже подан на eclipse.org
Использование javax.persistence 2.1 решило проблему.

В моем случае помогло исключение зависимости от JPA API и включение отдельной:

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa</artifactId>
        <version>2.7.0</version>
        <exclusions>
            <exclusion>
                <!-- The JPA API imported separately due to problems with JAR signature. -->
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>javax.persistence</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>

Насколько я могу судить, javax.persistence является транзитивной зависимостью в eclipselink 2.7.0.

Это означает, что нет необходимости добавлять его как отдельную зависимость.

Что-то, что мне очень помогло, это зависимость от понимания с Gradle. Он отображает различные источники, из которых получена зависимость.

dependencyInsight --dependency javax.persistence

Если вы видите в dependencyInsight, что транзитивная зависимость извлекается, а вы не хотите (например, javax.persistence из другого источника), вы можете попытаться отключить транзитивные зависимости для этой конкретной зависимости или просто исключить ее.

У меня была похожая проблема некоторое время назад. Моим быстрым решением было отключить javax.persistence в пути сборки моего корневого проекта. Вообще говоря, если у вас есть только один проект, вы можете попробовать изменить порядок, в котором используются зависимости. Вы можете найти эту настройку в вашем Java Build Path на вкладке "Порядок и экспорт" вашего проекта. (Я просто предполагаю, что вы используете Eclipse в качестве IDE)

Попробуйте переместить javax.persistence вниз в списке или снимите его.

Лично у меня только две зависимости gradle для jpa.

org.eclipse.persistence:org.eclipse.persistence.jpa
org.eclipse.persistence:eclipselink

Я отключил транзитивные зависимости на зависимости eclipselink.

Другие вопросы по тегам