JDK & OpenJDK
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
JDK & OpenJDK
Часто спрашивают (меня спрашивают, форумы спрашивают):
- почему не ладится с 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).
- почему не ладится с 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 писал(а): Где взять JDK? (вот сам обновлялся - снова столкнулся)
Вот: http://www.oracle.com/technetwork/java/ ... index.html
Об этом здесь: http://www.java.com/en/about/javanaming.jsp
http://www.base.vingrad.ru/view/118-CHt ... a-SE-EE-ME :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
Вопрос: Что такое Java SE/EE/ME?
Ответ:
Это разные редакции Java
Java Standart Edition (SE) - это стандартная редакция Java, используемая для разработки простых Java приложений. Используя данную редакцию можно создавать аплеты, консольные приложения, приложения с графическим интерфейсом пользователя.
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: JDK & OpenJDK
Вопрос: Чего это я дотошно взялся за JDK?Olej писал(а): Где взять JDK? (вот сам обновлялся - снова столкнулся)
Вот: http://www.oracle.com/technetwork/java/ ... index.html
Ответ: Потому, что я в разные годы боролся с этой проблемой - а). взять и установить JDK/JRE (что именно взять? как наименее безболезненно установить?) + б). да так, чтобы OpenJDK не сносить + в). чтоб легко можно было переключиться какой JDK использовать (переменными окружения - необходимыми и достаточными).
А ещё потому, что сам язык Java, как и любой другой C, C++, Perl и все-все..., большинству народа, занимающегося каждый своими проблемами - не нужен и даром (если он не прирождённый программист).
Но разница состоит в том, что:
- на Java написано множество целевых проектов (практически все многоплатформенные), вот которые уже пользователю нужны...
- в отличие от других языков на которых сделан проект, Java-проекту нужно для выполнения наличие виртуальной машины Java (JVM)...
- и часто приложение хочет ту версию JVM, которую он считает родной.
И каждый раз детали этого процесса (доведение JVM до использования) проделываются и забываются ... до следующего раза.
А в обсуждениях и описаниях этого процесса я до сих пор читаю массовую чушь, тыкание наугад...
Вот и решил детально для себя выписать: какие минимально телодвижения необходимы, а что остальное - от Лукавого .
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: JDK & OpenJDK
1. Сначала удостоверимся что, где и как у нас исходно стоит в свежем Linux:
Здесь всё понятно: стоит стандартно OpenJDK.
2. берём JDK, но можно и JRE
Я уже сказал выше (?), что у Oracle есть 2 формы JDK: .rpm & .tar.gz
Вот что-то из этого и берём
3. Редакции Java SE (думаю) более чем достаточно для выполнения локальных приложений
Именно так устанавливают в большинстве описаний установок (а Oracle не сильно щедрится на описания деталей инсталляций ).
Но меня как-раз это менее интересует ... да и как быть для установки в другие дистрибутивы?
А вот с .tar.gz - веселее, после его разархивирования получается дерево:
Утверждается (в некоторых текстах), что достаточно:
1. откопировать это дерево в произвольное удобное место
2. грамотно установить целый набор переменных окружения
3. и этого достаточно для подмены JRE.
Вот это я и буду проверять.
Код: Выделить всё
[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
1. С сайта Oracle, если вариант SE, то отсюда: http://www.oracle.com/technetwork/java/ ... index.htmlOlej писал(а):что именно взять?
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
Вот что-то из этого и берём
3. Редакции Java SE (думаю) более чем достаточно для выполнения локальных приложений
С .rpm - понятно.Olej писал(а):как наименее безболезненно установить?
Именно так устанавливают в большинстве описаний установок (а 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
1. отдавая должное владельцу JDK ...
2. в каталоге /opt (куда и ставится дефаултно всё от Sun, Oracle, Google,...)
3. сделаю каталог oracle
- главная моя цель здесь: отсюда точно случайным образом не произойдёт запуск...
4. куда откопирую 2 продукта oracle (ничего в них не затрагивая):
5. дальше работаем с переменными окружения: Установка переменных окружения при работе с Java...
- критически переосмысливаем то, что написано в этой эту статье
- дописываем (для начала, попробовать - чтоб не начудить) в $HOME/.bashrc (предварительно скопировав .bashrc в .bashrc.0 на всякий случай)...
- ... или если такого файла нет (в зависимости от дистрибутива), то можно прописать в .bash_profile ... но я люблю .bashrc , тогда его можно создать (пригодится!), но т.к. это скрытый файл .*, то это не так просто: $ touch .bashrc , или $ cp zzz .bashrc - номер не пройдёт , но можно сделать так:
- дописываю содержимое .bashrc так:
6. запускаем новый терминал (обязательно! - для того, чтобы загрузился новый экземпляр bash с новым окружением)
хотя можете и просто запустить новый экземпляр bash:
7. проверяем, что установки сработали правильно:
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
- критически переосмысливаем то, что написано в этой эту статье
- дописываем (для начала, попробовать - чтоб не начудить) в $HOME/.bashrc (предварительно скопировав .bashrc в .bashrc.0 на всякий случай)...
- ... или если такого файла нет (в зависимости от дистрибутива), то можно прописать в .bash_profile ... но я люблю .bashrc , тогда его можно создать (пригодится!), но т.к. это скрытый файл .*, то это не так просто: $ touch .bashrc , или $ cp zzz .bashrc - номер не пройдёт , но можно сделать так:
Код: Выделить всё
[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
Код: Выделить всё
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
хотя можете и просто запустить новый экземпляр bash:
Код: Выделить всё
[olej@notebook alternatives]$ sh
sh-4.2$
Код: Выделить всё
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 писал(а): Вот это я и буду проверять.
Код: Выделить всё
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
Это при том, что OpenJDK остался неизменным на месте, и "лёгким движением руки"(с) может быть восстановлен.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: JDK & OpenJDK
Некоторые приложения могут потребовать для себя установки специальных переменных окружения. Например: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
2. что-то требует NetBeans для указания ему какой JDK использовать ... но мне что-то это не попадается на глаза (позже допишу).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: JDK & OpenJDK
Переменная CLASSPATH, вообще то говоря, нужна только программистам, для указания где (список путей) их программа должна искать скомпилированные классы Java.Olej писал(а):Код: Выделить всё
... CLASSPATH=$JRE_HOME/lib/rt.jar:. export CLASSPATH
Но лучше её установить, чтоб потом при случае не заморачиваться.
Проверяем работоспособность всего навороченного изготовлением простейшего примера на Java:
1. редактируем файл HelloWorld.java :
Код: Выделить всё
bash-4.2$ cat HelloWorld.java
class HelloWorld {
public static void main ( String args[] ) {
System.out.println( "Hello, World!" );
}
}
Код: Выделить всё
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
Код: Выделить всё
bash-4.2$ java HelloWorld
Hello, World!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: JDK & OpenJDK
В принципе, мест куда окончательно (после проверки) лучше бы дописать установку окружения - достаточно много: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
К вопросу о Java и для любителей Java ... (не хотелось новой темой пачкать) ... но, собственно, это и связано с JVM:
Очень любопытное учебное руководство (как они его называют) на сайте IBM Developer Works
Изучение альтернативных языков для платформы Java
Очень любопытное учебное руководство (как они его называют) на сайте IBM Developer Works
Изучение альтернативных языков для платформы Java
Как "учебное руководство" это ... спорно, но для ознакомления - очень интересно!:сам язык Java становится все сложнее и до некоторой степени ограничен собственными абстракциями. Современные языки для JVM предлагают простой синтаксис, поддержку широкого диапазона парадигм программирования (объектной ориентации, динамического контроля типов, функционального программирования и метапограммирования), совместимость с кодом Java и, в некоторых случаях, лучшие подходы к параллельности. Корпоративные разработчики, стремящиеся изучать новые языки для платформы Java, могут с выгодой использовать наиболее подходящие для своих целей инструменты программирования.
2. Современные динамические языки: Groovy, JRuby и Jython
3. Функциональное программирование (и кое-что еще): Clojure и Scala
4. PHP на платформе Java с помощью WebSphere sMash
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость