2016-09-19 6 views
-2

У меня есть проблемы со следующим методом:Почему существует различие между OpenJDK и oracleJDK

sun.security.x509.AuthorityKeyIdentifierExtension.getEncodedKeyIdentifier() 

Он существует в OpenJDK, но она не существует в oracleJDK. Я всегда думал, что, за исключением некоторых особых случаев, касающихся лицензирования, эти JDK должны быть одинаковыми ...

Хотя я могу обойти эту проблему, я боюсь, что есть другие несовместимости, о которых я, возможно, и не подозревал.

+1

Это солнечная упаковка. Я сомневаюсь, что гарантировано всегда быть доступным, как пакеты java и javax. OpenJDK, вероятно, отстает от реализации Oracle. – duffymo

+0

Существует специальное предупреждение против использования пакетов 'sun. *' В Javadoc, и он существует уже 20 лет. – EJP

ответ

0

Этот класс не является частью общедоступного Java API и поэтому не гарантируется (или даже вероятен) для существования в каждой реализации JRE, а также в каждой версии реализации одного и того же провайдера.

Если это не часть стандартных API, то вы не можете рассчитывать на это.

В то время как реализация OpenJDK и OracleJDK случается быть очень похожи, поскольку они имеют общую историю, они может расходиться (или сходиться) в любых частных API-интерфейсах или деталях реализации в любое время, просто потому, что они являются отдельными проектами.

Вместо этого вы должны использовать соответствующие API-интерфейсы реализации-агностики в java.security и javax.security для работы с сертификатами.

+1

Я знаю это, но это был не вопрос. Есть утверждения, что оба jdks строятся из одного источника и моих поисковых швов, чтобы противоречить этому. –

+1

Я решил сосредоточиться на X вашей проблемы [XY] (http://meta.stackexchange.com/a/66378/155659). – OrangeDog

+0

Фактический ответ довольно скучный (и я коснулся его в среднем абзаце) - даже если они построены из одного и того же исходного репозитория, они не выпускаются точно в одно и то же время, и нет 1-к- 1 соответствие номеров версий. – OrangeDog

0

Классы, которые не являются частью стандартных пакетов и классов, которые устарели, не могут быть частью jdk.

В вашем случае вы можете попытаться решить проблему, используя классы пакета javax.security.cert. Поиск в Google можно найти в некоторых учебниках, таких как this one.


Просто, чтобы закончить ответ, правда, «в целом» как скомпилированный код исходит из того же исходного кода в открытом JDK и в оракула JDK. Но у oracle jdk и open jdk есть разные лицензии, поэтому также мало различий. Как правило, различия не связаны с источником общих классов, а с наличием или отсутствием классов или целых пакетов. В качестве примера см. font library.

Это не единственное отличие. Как вы отметили в своем коде, пакеты безопасности отличаются друг от друга, потому что открытый jdk добавил также старую версию x509 сертификатов на солнце, а не в oracle jdk. Нет гарантии того, какие классы включены или нет, если они не входят в стандартные пакеты. Поэтому, если у вас есть проблемы с запуском вашего кода в разных средах jdk, используйте только стандартные пакеты или явно импортируйте библиотеки по мере необходимости.

+1

Я знаю это, но это был не вопрос. Есть утверждения, что оба jdks строятся из одного источника и моих поисковых швов, чтобы противоречить этому. –

+3

@SteffenHeil, если вы это знаете. Почему ты спрашиваешь? –

+0

Прочтите http://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/, а затем перечитайте мой вопрос. –

-2

Oracle JDK ранее назывался SUN JDK, и это было до поглощения Oracle. Раньше это была официальная собственная реализация языка Java. После поглощения он был назван Oracle JDK, и команда Oracle поддерживает JDK.

OpenJDK - это реализация платформы Java Standard Edition с открытым исходным кодом с поддержкой Oracle и открытым сообществом Java.

На самом деле процесс сборки Oracle JDK построен из исходного кода OpenJDK. Таким образом, нет большой технической разницы между Oracle JDK и OpenJDK.

Помимо базового кода, Oracle JDK включает в себя реализацию Oracle Java Plugin и Java WebStart. Также включает сторонние компоненты с закрытым исходным кодом и открытым исходным кодом, такие как графический растеризатор и Rhino соответственно.

Как Oracle JDK и OpenJDK хранятся в Sync: Все исправления для разработки и исправления происходят в OpenJDK, а затем они распространяются на Oracle JDK. Исправления безопасности происходят в частном лесу без общедоступных обзоров кода, в отличие от общих исправлений, затем их переносят в Oracle JDK, а затем в OpenJDK.

больше на http://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/

+1

Я знаю об этом описании, но если бы это было так, как могли бы оба заканчивать разными методами в одних и тех же классах? –

+1

@SteffenHeil Если бы вы знали это, вы должны были включить свое предыдущее исследование в вопрос. – OrangeDog

+0

@OrangeDog Почему? Само собой разумеется, что они не построены из одного и того же исходного кода, как утверждается в этом ответе. В противном случае проблема, о которой идет речь, не будет существовать. – EJP

 Смежные вопросы

  • Нет связанных вопросов^_^