代码之家  ›  专栏  ›  技术社区  ›  Sam Tatty

eclipseLink 2.7.0:“javax.persistence.AttributeConverter”的签名者信息不匹配[重复]

  •  3
  • Sam Tatty  · 技术社区  · 7 年前

    在eclipseLink 2.7.0中运行静态编织的gradle任务时,会出现以下错误。

    21:50:14.206[错误][系统.错误]异常描述:PersistenceUnit[默认值]的预部署失败。
    21:50:14.206[错误][system.err]内部异常:java。lang.SecurityException:class“javax.persistence.AttributeConverter”的签名者信息与签名者信息不匹配
    21:50:14.206[错误][system.err]位于组织。日食坚持不懈内部的jpa。EntityManagerSetupImpl。createPredeployFailedPersistenceException(EntityManagerSetupImpl.java:20


    21:50:14.206[错误][系统.错误]内部异常: Java语言lang.SecurityException:class“javax.persistence.AttributeConverter”的签名者信息与签名者信息不匹配 同一包中其他类的格式

    我知道,当类被不同的JAR引用时,这些冲突就会出现。
    javax。eclipselink 2.7.0需要依赖持久性2.2.0。
    我必须排除其中一个jar,以便可以从1个jar中引用AttributeConverter。但不知道怎么做。

    3 回复  |  直到 7 年前
        1
  •  4
  •   MaDa    7 年前

    在我的例子中,排除捆绑的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>
    
        2
  •  1
  •   Sam Tatty    7 年前

    问题似乎与JAR的签署有关。 eclipselink 2.7.0使用javax persistence 2.2.0,该版本由eclipse基金会签署,而eclipselink 2.7.0不是。 Issue 525457 已向eclipse提交。组织
    使用javax。持久性2.1解决了这个问题。

        3
  •  0
  •   thaasoph    7 年前

    据我所知,javax。持久性是eclipselink 2.7.0中的一个可传递依赖项。

    这意味着不需要将其作为单独的依赖项添加。

    dependencyInsight --dependency javax.persistence
    

    如果您在dependencyInsight中看到,一个可传递的依赖项被拉入您不想拉入的状态(例如,来自另一个源的javax.persistence),您可以尝试禁用该特定依赖项的可传递依赖项,或者只是将其排除。

    一般来说,如果只有一个项目,可以尝试切换依赖项的使用顺序。 您可以在项目的“订单和导出”选项卡中的Java构建路径中找到该设置。(我只是假设您使用Eclipse作为IDE)

    尝试移动javax。在列表中向下保留或取消选中它。

    就我个人而言,jpa只有两个gradle依赖项。

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