2016-09-19 2 views
-2

ich Probleme mit dem folgenden Verfahren haben:Warum gibt es Unterschiede zwischen openJDK und oracleJDK

sun.security.x509.AuthorityKeyIdentifierExtension.getEncodedKeyIdentifier() 

Es existiert in openJDK aber es existiert nicht in oracleJDK. Ich dachte immer, dass abgesehen von einigen speziellen Fällen in Bezug auf Lizenzierung diese JDKs die gleichen sein sollten ...

Während ich dieses Problem umgehen kann, fürchte ich, es gibt andere Inkompatibilitäten, die ich nicht bewusst sein könnte.

+1

Das ist ein Sonnenpaket. Ich bezweifle, dass es garantiert immer verfügbar ist wie Java und Java Pakete. OpenJDK liegt wahrscheinlich hinter der Implementierung von Oracle zurück. – duffymo

+0

Es gibt eine spezielle Warnung vor der Verwendung von 'sun. *' Paketen im Javadoc, und das ist seit 20 Jahren dort. – EJP

Antwort

0

Diese Klasse ist nicht Teil der öffentlichen Java-API und daher nicht garantiert (oder sogar wahrscheinlich) in jeder JRE-Implementierung und nicht in jeder Version der Implementierung desselben Providers.

Wenn es nicht Teil der Standard-APIs ist, können Sie nicht darauf zählen.

Während die OpenJDK und OracleJDK Implementierungen zufällig sehr ähnlich, da sie eine gemeinsame Geschichte bieten, sie - alle JDKs sollten diese

  • Java Enterprise Edition 7 bieten Sie können jederzeit in privaten APIs oder Implementierungsdetails divergieren (oder konvergieren), einfach weil es sich um separat ausgeführte Projekte handelt.

    Stattdessen sollten Sie die entsprechenden implementierungsunabhängigen APIs in java.security und javax.security für den Umgang mit Zertifikaten verwenden.

  • +1

    Ich weiß das, aber das war nicht die Frage. Es gibt Aussagen, dass beide jdks aus der gleichen Quelle stammen und mein Befund widerspricht dem. –

    +1

    Ich beschloss, mich auf das X Ihres [XY-Problems] zu konzentrieren (http://meta.stackexchange.com/a/66378/155659). – OrangeDog

    +0

    Die eigentliche Antwort ist ziemlich langweilig (und ich habe es im mittleren Absatz berührt) - selbst wenn sie aus genau dem gleichen Quellen-Repository erstellt wurden, geben sie nicht zur exakt gleichen Zeit frei, und es gibt keine 1-zu-eins-Lösung. 1 Übereinstimmung der Versionsnummern. – OrangeDog

    0

    Klassen, die nicht zu den Standardpaketen und veralteten Klassen gehören, können nicht Teil einer jdk sein. In Ihrem Fall können Sie versuchen, das Problem mit den Klassen des Pakets javax.security.cert zu lösen. Auf der Suche nach Google finden Sie einige Tutorials wie this one.


    einfach zu vervollständigen die Antwort richtig ist, dass „in der Regel“ beide kompilierten Code aus dem gleichen Quellcode in der offenen jdk kommen und in dem Orakel jdk. Aber Oracle JDK und Open JDK haben unterschiedliche Lizenzen, so dass es auch ein paar kleine Unterschiede gibt. Im Allgemeinen beziehen sich die Unterschiede nicht auf die Quelle gemeinsamer Klassen, sondern auf das Vorhandensein oder Fehlen von Klassen oder ganzen Paketen. Als Beispiel siehe font library.

    Dies ist nicht der einzige Unterschied. Wie Sie in Ihrem Code notiert haben, unterscheiden sich auch die Sicherheitspakete, da der offene jdk auch die alte Sun-Version von x509-Zertifikatsklassen und das Oracle-jdk nicht hinzugefügt hat. Es gibt keine Garantie dafür, welche Klassen enthalten sind oder nicht, wenn sie nicht Teil der Standardpakete sind. Wenn Sie Probleme beim Ausführen Ihres Codes in verschiedenen jdk-Umgebungen haben, verwenden Sie nur Standardpakete oder importieren Sie Bibliotheken explizit nach Bedarf.

    +1

    Ich weiß das, aber das war nicht die Frage. Es gibt Aussagen, dass beide jdks aus der gleichen Quelle stammen und mein Befund widerspricht dem. –

    +3

    @SteffenHeil wenn du das weißt. Warum fragst du? –

    +0

    Lesen Sie http://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/ und lesen Sie dann meine Frage erneut. –

    -2

    Oracle JDK hieß früher SUN JDK und das war vor der Übernahme durch Oracle. Früher war es die offizielle proprietäre Implementierung der Java-Sprache. Nach der Übernahme wurde es als Oracle JDK bezeichnet und das Oracle-Team unterhält das JDK.

    OpenJDK ist eine Open-Source-Implementierung der Java Standard Edition-Plattform mit Unterstützung von Oracle und einer offenen Java-Community.

    Tatsächlich baut Oracle JDK Build-Prozess von OpenJDK-Quellcode. Es gibt also keinen großen technischen Unterschied zwischen Oracle JDK und OpenJDK.

    Neben dem Basiscode enthält Oracle JDK die Implementierung von Java Plug-in und Java WebStart von Oracle. Enthält auch Closed-Source- und Open-Source-Komponenten von Drittanbietern wie Graphics Rasterizer bzw. Rhino.

    Wie Oracle JDK und OpenJDK in Synchronisation gehalten wird: Alle Entwicklung und Bugfixes passiert in OpenJDK und dann werden sie an das Oracle JDK weitergegeben. Sicherheitsupdates werden in der privaten Gesamtstruktur ohne öffentliche Codeüberprüfungen im Gegensatz zu allgemeinen Fixes durchgeführt. Anschließend werden sie an Oracle JDK und dann an OpenJDK weitergeleitet.

    mehr auf http://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/

    +1

    Ich weiß über diese Beschreibung, aber wenn es wahr wäre, wie könnten beide mit verschiedenen Methoden in den gleichen Klassen enden? –

    +1

    @SteffenHeil Wenn Sie das wüssten, sollten Sie Ihre früheren Recherchen in die Frage aufgenommen haben. – OrangeDog

    +0

    @OrangeDog Warum? Es ist selbstverständlich, dass die beiden nicht aus dem gleichen Quellcode bestehen, wie in dieser Antwort behauptet. Sonst würde das gestellte Problem nicht existieren. – EJP

    Verwandte Themen