![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Bodro |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Добрый день!
Подскажите, пожалуйста, как мне определить версию установленной JAVA из программы (JAR). Возможно ли это? Проблема такая. Есть ПО в виде jar-файла. Работает под java 1.6:
Но не у всех пользователей установлена именно версия 1.6. На более ранних падает:
Возожно ли каким-либо образом при запуске jar определить, какая версия установлена и внятно пользователю сообщить о необходимости установить последнюю версию? Принимаются любые идеи! Спасибо большое! |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пишешь маленький jar который будет проверять версию JDK (проверить можно через System.getProperty("java.version")).
Далее если с версией все ОК, то запускаешь саму программу, иначе выдаешь сообщение об ошибке. P.S. Запускальщик конечно надо собирать под самой старой JDK. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Добавлено через 1 минуту лсд опередил |
|||
|
||||
| Bodro |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Да, я думал над запускальщиком. Идея хорошая. Но проблема в том, что сборка всех проектов ведётся на одной машине и там установлена только одна версия и собирать можно на ней. Вряд ли получится собрать под более старой версией.
А если создать запускальщик на этой же версии? Только сделать его примитивным. Старые версии подцепят его? Нет там никаких различий в магических числах файлов и прочим? Неужели никак нельзя из самого приложения определеить? Ну как нибудь там ClassLoader перегрузить или ещё что? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это как раз не проблема. У компилятора есть опция которая позволяет генерировать код под более ранние версии JDK. Главное не использовать API которого не было в этих версиях (тег Since в помощь Проблема в том, что старые версии JDK не могут читать формат классов от более новых. А раз так, то они не могут вообще выполнить ни один класс из твоего приложения. 1. Переопределить bootstrap class loader практически нереально. 2. Для этого надо модифицировать JRE. Как ты это собираешься делать? 3. Это гораздо сложнее чем написать стартер. Есть ещё вариант нативного запускальщика, например exe4j или JSmooth. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Bodro |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Спасибо огромное!
Пожалуй, это действительно лучшее решение. А не знаешь ли каких-либо программ, которые помогли бы реализовать подобное, но только не exe, а jar? Ну или хотя бы exe и ещё elf? Например, для создания EXE-файлов существует программа Launch4j. Это помимо тех, которые ты написал. Она позволяет запихать в себя jar-файл и берёт на себя задачу по определению версии jre и прочее. Но мне надо чтобы была кросплатформенность или поддержка хотя бы Windows и Linux. Дело в том что решение использовать Java было принято по трём причинам: простота и удобство разработки, реализация в виде апплета и кростплатформенность. Если с апплетом всё понятно, то вот с standalone tool проблема. Необходимо проверить версию при запуске. Это сообщение отредактировал(а) Bodro - 18.3.2009, 16:40 |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Дык Launch4j же поддерживает:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Bodro |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Да не, ты не понял. Launch4j поддерживает платформы сам. Т.е. он написан на Java, поэтому запускается на них на всех, но на выходе я получу только файл PE EXE. А мне нужно получить на выходе или JAR или PE EXE, ELF, a.out и т.п.
Не знаешь такой софт? |
|||
|
||||
| SoulKeeper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Так не покатит? |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Попробуй Java Service Wrapper.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Bodro |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Спасибо огромное всем за советы! Учёл всё!
Начальник сказал делать загрузчик при этом соблюдая кроссплатформенность, т.е. загрузчик писать на Java. Но небольшая трудность в том, что мы используем в проекте One-Jar (подробности тут: http://one-jar.sourceforge.net/). Так что сейчас пишу загрузчик, пытаюсь всё это собрать с помощью проекта One-Jar (чтобы в результате по прежнему был один файл, но была проверка на версию, которая должна сработать до OneJar). Результаты обязательно выложу и опишу. Это сообщение отредактировал(а) Bodro - 20.3.2009, 13:31 |
|||
|
||||
| Bodro |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
В общем, загрузчик готов. Выложу только основную часть:
Теперь поясняю работу всего проекта в целом (механизм загрузки): есть проект, который выполняет основную работу. Он подразумевался использоваться как апплет. Поэтому ant скрипт был написано таким образом, чтобы генерить множество jar файлов (проект большой, много библиотек). Затем возникла потребность сделать из проекта так же standalone tool. Переделки в коде минимальные. Но проблема во множестве jar файлов. Архив поставлять нельзя, дистрибутив, если это действительно удобный дистрибутив, писать долго и сложно. Была задача собрать один jar файл. Я думал и в итоге решил использовать проект OneJar (http://one-jar.sourceforge.net/). Суть его такова: пишется специальный ant-скрипт, расширенный с помощью OneJar. Указываются какие необходимо кидать jar и указывается точка входа. Затем, при запуске скрипта, он собирает один jar файл, в котором точка входа, это метод main в загрузчике OneJar. И этот загрузчик загружает проект. Проект работает исключительно под JRE 1.6.0 и выше. Значит, неоходимо определить, какая версия JRE установлена и в случае несоответствия, предупредить пользователя. Проблема описана вверху. Спасибо всем на фруме. Объяснил начальству все варианты, какие мог придумать. Решено было сохранить кроссплатформенное приложение. Т.е. задача встала такая - писать загрузчик под наиболее низкую версию:
Суть такая. Есть готовый jar файл, собранный с помощью OneJar. Я собираю загрузчик под старую версию JRE, интегрирую его в jar-файл. При запуске этого jar сначала запускается мой загрузчик. Он проверяет версию и в случае неудачи выводит окно с сообщением о необходимости загрузить новую версию. Иначе запускает приложение. Как это происходит. Передаётся управление на загрузчик OneJar. Тот загружает основной проект. Есть какие нибудь дополнения, вопросы? Это сообщение отредактировал(а) Bodro - 20.3.2009, 13:32 |
||||
|
|||||
| Bodro |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 27.1.2006 Где: Россия, г. Рязань Репутация: 1 Всего: 4 |
Всем спасибо!
Вопрос решён! Тема закрыта! |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |