JDK & OpenJDK

Программные средства разработки

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 15:18

Часто спрашивают (меня спрашивают, форумы спрашивают):
- почему не ладится с Java ...
- где взять JDK etc.

Здесь есть определённая путаница:
- дистрибутивы (репозитарии) Linux комплектуются реализацией для Java - OpenJDK.
- многие проекты (особенно портированные в Linux) могут хотеть JDK, но считают не кошерным OpenJDK.
- оригинальный JDK разработки Sun Microsystems можно свободно взять на сайте Oracle (нынешний владелец Java & JDK).
- OpenJDK и JDK могут стоять в Linux одновременно и параллельно (там ещё и Java от GCC может стоять) - сносить не надо.
- кто будет использоваться определяется переменными окружения (вами).
- для выполнения приложений с Java не обязательно JDK (Java Devlopment Kit), достаточно и JRE (Java Runtime Environment) - он в разы меньше, JDK включает в свой состав JRE и нужен он для разработки на Java.

Это то, что я помню из своего опыта и проверял в разное время.
Если я в чём-то допустил неточность - пусть товарищи меня поправят.

Где взять JDK? (вот сам обновлялся - снова столкнулся)
Вот: http://www.oracle.com/technetwork/java/ ... index.html

Хотя на сайте NetBeans рекомендуют Java JRE взять с: http://java.com/en/download/manual.jsp?locale=en (тот же 7.05).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 17:31

Olej писал(а): Где взять JDK? (вот сам обновлялся - снова столкнулся)
Вот: http://www.oracle.com/technetwork/java/ ... index.html
Некоторое замешательство там вызывает разнообразие имён и вариантов.
Об этом здесь: http://www.java.com/en/about/javanaming.jsp
It's very simple. With the versions of the platform shipped early 2006, the Java name lost the "2", and the "dot zero".

J2SE 6.0 became Java SE 6, and J2SE 7.0 will become Java SE 7.
J2EE 5.0 became Java EE 5.
J2ME became Java ME as of June 2005, because it does not have a version number.
Java Card is not affected by this name change.
The following terms should always be used at first reference:
Java™ Platform, Standard Edition 6
Java™ Platform, Enterprise Edition 5
Java™ Platform, Micro Edition
http://www.base.vingrad.ru/view/118-CHt ... a-SE-EE-ME :
Вопрос: Что такое Java SE/EE/ME?

Ответ:
Это разные редакции Java

Java Standart Edition (SE) - это стандартная редакция Java, используемая для разработки простых Java приложений. Используя данную редакцию можно создавать аплеты, консольные приложения, приложения с графическим интерфейсом пользователя.
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 18:06

Olej писал(а): Где взять JDK? (вот сам обновлялся - снова столкнулся)
Вот: http://www.oracle.com/technetwork/java/ ... index.html
Вопрос: Чего это я дотошно взялся за JDK?

Ответ: Потому, что я в разные годы боролся с этой проблемой - а). взять и установить JDK/JRE (что именно взять? как наименее безболезненно установить?) + б). да так, чтобы OpenJDK не сносить + в). чтоб легко можно было переключиться какой JDK использовать (переменными окружения - необходимыми и достаточными).

А ещё потому, что сам язык Java, как и любой другой C, C++, Perl и все-все..., большинству народа, занимающегося каждый своими проблемами - не нужен и даром (если он не прирождённый программист).
Но разница состоит в том, что:
- на Java написано множество целевых проектов (практически все многоплатформенные), вот которые уже пользователю нужны...
- в отличие от других языков на которых сделан проект, Java-проекту нужно для выполнения наличие виртуальной машины Java (JVM)...
- и часто приложение хочет ту версию JVM, которую он считает родной.

И каждый раз детали этого процесса (доведение JVM до использования) проделываются и забываются ... до следующего раза.
А в обсуждениях и описаниях этого процесса я до сих пор читаю массовую чушь, тыкание наугад...

Вот и решил детально для себя выписать: какие минимально телодвижения необходимы, а что остальное - от Лукавого ;-) .

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 18:45

1. Сначала удостоверимся что, где и как у нас исходно стоит в свежем Linux:

Код: Выделить всё

[olej@notebook jdk1.7.0_05]$  java -version
java version "1.7.0_03-icedtea"
OpenJDK Runtime Environment (fedora-2.2.1.fc17.8-i386)
OpenJDK Server VM (build 23.0-b21, mixed mode)
[olej@notebook jdk1.7.0_05]$ which java
/usr/bin/java
[olej@notebook jvm]$ javac -version
javac 1.7.0_03
Здесь всё понятно: стоит стандартно OpenJDK.
Olej писал(а):что именно взять?
1. С сайта Oracle, если вариант SE, то отсюда: http://www.oracle.com/technetwork/java/ ... index.html

2. берём JDK, но можно и JRE

Код: Выделить всё

[olej@notebook Java]$ ls -l j*-7u5*
-rw-rw-r--. 1 olej olej 67218147 июля  31 15:25 jdk-7u5-linux-i586.rpm
-rw-rw-r--. 1 olej olej 82947286 июля  31 15:26 jdk-7u5-linux-i586.tar.gz
-rw-rw-r--. 1 olej olej 34374469 июля  31 17:00 jre-7u5-linux-i586.tar.gz
Я уже сказал выше (?), что у Oracle есть 2 формы JDK: .rpm & .tar.gz
Вот что-то из этого и берём ;-)

3. Редакции Java SE (думаю) более чем достаточно для выполнения локальных приложений
Olej писал(а):как наименее безболезненно установить?
С .rpm - понятно.
Именно так устанавливают в большинстве описаний установок (а Oracle не сильно щедрится на описания деталей инсталляций ;-) ).
Но меня как-раз это менее интересует ... да и как быть для установки в другие дистрибутивы?

А вот с .tar.gz - веселее, после его разархивирования получается дерево:

Код: Выделить всё

[olej@notebook Java]$ ls jdk1.7.0_05 
bin  COPYRIGHT  db  include  jre  lib  LICENSE  man  README.html  release  src.zip  THIRDPARTYLICENSEREADME.txt
[olej@notebook Java]$ du -sh jdk1.7.0_05 
192M	jdk1.7.0_05
Утверждается (в некоторых текстах), что достаточно:
1. откопировать это дерево в произвольное удобное место
2. грамотно установить целый набор переменных окружения
3. и этого достаточно для подмены JRE.

Вот это я и буду проверять.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 23:09

1. отдавая должное владельцу JDK ;-) ...

2. в каталоге /opt (куда и ставится дефаултно всё от Sun, Oracle, Google,...)

3. сделаю каталог oracle
- главная моя цель здесь: отсюда точно случайным образом не произойдёт запуск...

4. куда откопирую 2 продукта oracle (ничего в них не затрагивая):

Код: Выделить всё

[olej@notebook opt]$ ls -l /opt/oracle
итого 8
drwxr-xr-x.  8 olej olej 4096 июня  27 10:39 jdk1.7.0_05
drwxr-xr-x. 11 olej olej 4096 нояб. 16  2011 solarisstudio12.3
5. дальше работаем с переменными окружения: Установка переменных окружения при работе с Java...
- критически переосмысливаем то, что написано в этой эту статье
- дописываем (для начала, попробовать - чтоб не начудить) в $HOME/.bashrc (предварительно скопировав .bashrc в .bashrc.0 на всякий случай)...
- ... или если такого файла нет (в зависимости от дистрибутива), то можно прописать в .bash_profile ... но я люблю .bashrc ;-), тогда его можно создать (пригодится!), но т.к. это скрытый файл .*, то это не так просто: $ touch .bashrc , или $ cp zzz .bashrc - номер не пройдёт :shock: , но можно сделать так:

Код: Выделить всё

[olej@notebook ~]$ touch xxx
[olej@notebook ~]$ mv xxx .bashrc
mv: попытаться перезаписать «.bashrc», несмотря на права доступа 0644 (rw-r--r--)? y

Код: Выделить всё

и будет лучше привести в соответствие флаги как у нормальных .bash*: 
[olej@notebook ~]$ ls -al .bash_profile
-rw-r--r--. 1 olej olej 193 апр.  23 17:06 .bash_profile
[olej@notebook ~]$ chmod 0644 .bashrc
[olej@notebook ~]$ ls -al .bashrc
-rw-r--r--. 1 olej olej 0 июля  31 19:03 .bashrc
- дописываю содержимое .bashrc так:

Код: Выделить всё

bash-4.2$ cat .bashrc
JAVA_HOME=/opt/oracle/jdk1.7.0_05
export JAVA_HOME
JDK_HOME=$JAVA_HOME
export JAVA_HOME
JRE_HOME=$JAVA_HOME/jre
export JRE_HOME
PATH=$JDK_HOME/bin:$JRE_HOME/bin:$PATH
export PATH
CLASSPATH=$JRE_HOME/lib/rt.jar:.
export CLASSPATH
6. запускаем новый терминал (обязательно! - для того, чтобы загрузился новый экземпляр bash с новым окружением)
хотя можете и просто запустить новый экземпляр bash:

Код: Выделить всё

[olej@notebook alternatives]$ sh
sh-4.2$ 
7. проверяем, что установки сработали правильно:

Код: Выделить всё

bash-4.2$ echo $PATH
/opt/oracle/jdk1.7.0_05/bin:/opt/oracle/jdk1.7.0_05/jre/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/olej/.local/bin:/home/olej/bin
bash-4.2$ env | grep _HOME
JRE_HOME=/opt/oracle/jdk1.7.0_05/jre
JAVA_HOME=/opt/oracle/jdk1.7.0_05
bash-4.2$ echo $CLASSPATH
/opt/oracle/jdk1.7.0_05/jre/lib/rt.jar:.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 31 июл 2012, 23:12

Olej писал(а): Вот это я и буду проверять.

Код: Выделить всё

bash-4.2$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) Server VM (build 23.1-b03, mixed mode)
bash-4.2$ which java
/opt/oracle/jdk1.7.0_05/bin/java
bash-4.2$ which javac
/opt/oracle/jdk1.7.0_05/bin/javac
Используемый JDK полностью сменился.
Это при том, что OpenJDK остался неизменным на месте, и "лёгким движением руки"(с) может быть восстановлен.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 01 авг 2012, 00:04

Olej писал(а):5. дальше работаем с переменными окружения
Некоторые приложения могут потребовать для себя установки специальных переменных окружения. Например:

1. IDE IntelIDEA предупреждает при старте:
please validate either IDEA_JDK, JDK_HOME, or JAVA_HOME environment variable points to valid Oracle (Sun) JDK installation.
Для этого приложения, возможно, лучше подстраховаться:

Код: Выделить всё

IDEA_HOME=$HOME/idea-IC-117.798
export IDEA_HOME
IDEA_JDK=$JAVA_HOME
export IDEA_JDK
(это у меня так, у вас, возможно, каталог idea-* расположен совсем в другом месте)

2. что-то требует NetBeans для указания ему какой JDK использовать ... но мне что-то это не попадается на глаза (позже допишу).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 01 авг 2012, 00:44

Olej писал(а):

Код: Выделить всё

...
CLASSPATH=$JRE_HOME/lib/rt.jar:.
export CLASSPATH
Переменная CLASSPATH, вообще то говоря, нужна только программистам, для указания где (список путей) их программа должна искать скомпилированные классы Java.
Но лучше её установить, чтоб потом при случае не заморачиваться.

Проверяем работоспособность всего навороченного изготовлением простейшего примера на Java:

1. редактируем файл HelloWorld.java :

Код: Выделить всё

bash-4.2$ cat HelloWorld.java 
class HelloWorld {
   public static void main ( String args[] ) {
      System.out.println( "Hello, World!" );
   }
}
2. компиляция:

Код: Выделить всё

bash-4.2$ javac HelloWorld.java 
bash-4.2$ ls -l
итого 8
-rw-rw-r--. 1 olej olej 427 авг.   1 00:36 HelloWorld.class
-rw-rw-r--. 1 olej olej 282 авг.   1 00:36 HelloWorld.java
3. выполнение:

Код: Выделить всё

bash-4.2$ java HelloWorld
Hello, World!
Всё ОК! ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 02 авг 2012, 10:45

Olej писал(а): - дописываем (для начала, попробовать - чтоб не начудить) в $HOME/.bashrc (предварительно скопировав .bashrc в .bashrc.0 на всякий случай)...
В принципе, мест куда окончательно (после проверки) лучше бы дописать установку окружения - достаточно много:

1. $HOME/.bashrc
- но это только для этого пользователя + устанавливается только при старте bash

2. /etc/bashrc
- это для всех пользователей при старте bash, но это большой скрипт и его портить? ...

3. подходящее место было многие годы в UNIX - /etc/rc.d/rc.local
- но это для системы инициализации SYSV, а у меня Fedora 17, где systemd ...

4. в /etc/profile ... но это тоже большой скрипт, который портить не хочется, гораздо лучше создать в /etc/profile.d новый свой файл:

Код: Выделить всё

$ sudo touch /etc/profile.d/JDK.sh
и туда уже всё прописать:

Код: Выделить всё

bash-4.2$ cat /etc/profile.d/JDK.sh 
JAVA_HOME=/opt/oracle/jdk1.7.0_05
export JAVA_HOME

JDK_HOME=$JAVA_HOME
export JAVA_HOME

JRE_HOME=$JAVA_HOME/jre
export JRE_HOME

PATH=$JDK_HOME/bin:$JRE_HOME/bin:$PATH
export PATH

CLASSPATH=$JRE_HOME/lib/rt.jar:.
export CLASSPATH
И тогда сразу после загрузки системы:

Код: Выделить всё

bash-4.2$ echo $CLASSPATH
/opt/oracle/jdk1.7.0_05/jre/lib/rt.jar:.
Это решение меня пока устраивает.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: JDK & OpenJDK

Непрочитанное сообщение Olej » 08 ноя 2012, 15:55

К вопросу о Java и для любителей Java ... (не хотелось новой темой пачкать) ... но, собственно, это и связано с JVM:

Очень любопытное учебное руководство (как они его называют) на сайте IBM Developer Works
Изображение Изучение альтернативных языков для платформы Java
сам язык Java становится все сложнее и до некоторой степени ограничен собственными абстракциями. Современные языки для JVM предлагают простой синтаксис, поддержку широкого диапазона парадигм программирования (объектной ориентации, динамического контроля типов, функционального программирования и метапограммирования), совместимость с кодом Java и, в некоторых случаях, лучшие подходы к параллельности. Корпоративные разработчики, стремящиеся изучать новые языки для платформы Java, могут с выгодой использовать наиболее подходящие для своих целей инструменты программирования.
Как "учебное руководство" это ... спорно, но для ознакомления - очень интересно!:
2. Современные динамические языки: Groovy, JRuby и Jython
3. Функциональное программирование (и кое-что еще): Clojure и Scala
4. PHP на платформе Java с помощью WebSphere sMash

Ответить

Вернуться в «Инструменты программирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость