Merci Stéphane - le montage à la fin de votre question m'a aidé à "fixer" le même problème. Pour quelqu'un d'autre qui frappe également - ici est une expansion de réponse. C'est ce que vous avez besoin de "réparer" les choses dans votre pom (jusqu'à Eclipse arranger les choses correctement):
<!-- See https://stackoverflow.com/q/45870753 -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.0</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.1</version>
</dependency>
Ce tire en eclipselink
, mais exclut l' javax.persistence
dépendance qu'il tente de retirer et de le remplacer par une version antérieure d' javax.persistence
qui n'ont pas la signature du problème.
De côté: javax.persistence
version 2.2.0
est explicitement tirée vers l'arrière, dans le pom fragment montré dans la question d'origine, malgré déjà une dépendance transitive d' eclipselink
.
Explication
Résumé - eclipselink
artefact dépend javax.persistence
et contiennent des classes qui sont dans le paquet javax.persistence
. Cependant, l' javax.persistence
pot est signé et que l' eclipselink
l'un ne l'est pas. Donc le Java runtime va se plaindre, lors du chargement d'une classe du package javax.persistence
dans la eclipselink
pot, que c'est l'absence de signature ne correspond pas avec les classes déjà chargés à partir du même package dans l' javax.persistence
pot.
Détails - si j'ai mis un point d'arrêt en java.util.concurrent.ConcurrentHashMap.putIfAbsent(K, V)
, avec la condition "javax.persistence".equals(arg0)
alors que je vois qu' javax.persistence
est mappé à la suite de CodeSource
valeur:
(file:/Users/georgehawkins/.m2/repository/org/eclipse/persistence/javax.persistence/2.2.0/javax.persistence-2.2.0.jar [
[
Version: V3
Subject: CN="Eclipse Foundation, Inc.", OU=IT, O="Eclipse Foundation, Inc.", L=Ottawa, ST=Ontario, C=CA
Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11
...
I. e. javax.persistence-2.2.0.jar
est signé par la Fondation Eclipse et contient des classes dans le package javax.persistence
. Ce pot est tiré lors d'une partie de ma demande (en fait quelque chose de profond au Printemps logique) essaie de charger javax.persistence.EntityManagerFactory
.
Si je puis placer un point d'arrêt en java.lang.ClassLoader.checkCerts(String, CodeSource)
sur le throw new SecurityException
ligne je vois ensuite qu'il rencontre cette ligne quand passé en CodeSource
est:
(file:/Users/georgehawkins/.m2/repository/org/eclipse/persistence/eclipselink/2.7.0/eclipselink-2.7.0.jar <no signer certificates>)
I. e. eclipselink-2.7.0.jar
également contenir des classes qui sont dans l' javax.persistence
package, mais il n'est pas signé si un choc se produit qui entraîne une SecurityException
d'être jeté. Cela se produit lorsque quelque chose (aussi profond au Printemps logique) essaie de charger javax.persistence.PersistenceUtil
.
Si je regarde la sortie de l' mvn dependency:tree
je vois que cette différence semble être en panne d' eclipselink
lui - même: il est en tirant en org.eclipse.persistence:javax.persistence:jar:2.2.0
lui-même. I. e. ce n'est pas un clash avec quelques autres de la dépendance:
[INFO] | \- org.eclipse.persistence:eclipselink:jar:2.7.0:compile
[INFO] | +- org.eclipse.persistence:javax.persistence:jar:2.2.0:compile
[INFO] | +- org.eclipse.persistence:commonj.sdo:jar:2.1.1:compile
[INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | \- org.glassfish:javax.json:jar:1.0.4:compile
J'ai enregistré ce maintenant au bugs.eclipse.org - voir le bug 525457.