OpenJDK - как работать с разными версиями?

Автор su16, 27 сентября 2015, 01:47:46

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

su16

Доброго времени!

Вопрос простой - как поставить OpenJDK 6, 7, 8 в /opt, не подтягивая зависимостей в основную систему, как это у оракловой версии?
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

su16

Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

GRAY_BW

#2
Лучше поздно, чем никогда.  ::)

Если есть любой установленный дистрибутив (даже в виртуальной машине) можно упаковать для себя эти jdk из /usr/lib/jvm/** или из бинарных пакетов.
Иногда JDK и JRE отдельными каталогами. Тогда из JDK нужно удалить symlink на JRE, JRE скопировать в JDK и переименовать, например, из openjdk-7-jre-headless в jre.
Если это нужно для серверных приложений, полезно не забывать создавать правильное окружение для приложения.
Можно прямо в запускающем скрипте (для начала).
Нужно заметить, всё что касается обработки шрифтов и картинок на стороне сервера наверняка будет глючить из за недоустановленных зависимостей.

На примере catalina.sh от TomCat, в самом начале скрипта:


JAVA_HOME=/opt/openjdk-7-jdk ; export JAVA_HOME
#JRE_HOME=/opt/openjdk-7-jre-headless ; export JRE_HOME ## если jre отдельным каталогом
PATH=$JAVA_HOME/bin:$PATH; export PATH


Модный "головняк" PermGen для начинающих;
Java6 и Java7 флаг -XX:MaxPermSize=192m (у меня в примере 192m от фонаря, поставьте своё значение)
Java8 -XX:MaxMetaspaceSize=192m

Java6 и Java7 по умолчанию выделяют 64m (по моему, или вообще 32) и приложение будет вываливаться по OutOfMemory (недостаточно памяти).
В Java8 на Metaspace безлимит, и если вы сделаете MemoryLeak (утечка памяти), а начинающему это очень легко, то будет съедена память всей системы.

Java6 и Java7 с флагом -XX:MaxMetaspaceSize не запустятся.

Для разработки удобнее использовать SDKMAN http://sdkman.io/index.html
Ничего не устанавливает в корень системы, устанавливается в учётную запись пользователя обычным скриптом, окружения создаются в ~/.bashrc . Каталоги компонентов будут в каталоге ~/.sdkman/**

Если делать серьёзнее, тогда можно воспользоваться пакетом от webupd8-team для Ubuntu.
Подробности тут https://debianforum.ru/index.php?topic=5407.0

ах, да! Совсем забыл. Если совсем серьёзно нужно, гляньте вот сюда, там есть для Debian.
http://www.azul.com/downloads/zulu/


Ещё одна "модная" мантра для Java в Linux, если начнёт вдруг жутко тупить на развёртывании приложений и старте серверов добавляйте вот этот флажок
-Djava.security.egd=file:/dev/./urandom

Простого, дефолтного /dev/urandom мало, мякотка в точке между /dev/ и /urandom

Успехов вам!

su16

#3
поздно только "никогда".
спасибо, интересная инфа.

Честно говоря, разархивирование деб пакетов в /opt, из моего опыта, ни к чему хорошему не приводило.
поломаные зависимости могут обернуться гейзенбагами при отладке.

Я поизучал вопрос, и если не упираться в религию, то с техноческой точки зрения разницы между оракловым и открытым пакетом нет никакой.
у меня была другая идея - установить разные версии OpenJDK в разные чруты, а мой код шарить между ними... но я как-то забил и просто поставил несколько стенделон оракловых жаб в /opt.

ссылки ваши весьма любопытны, покурю их на досуге.  ;)
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/