Как получить исполняемый файл java-приложения?
Я новичок в мире Java, но так как знаком c C++, то и тут немного уже ориентируюсь. Я создал простое диалоговое приложение в среде IDEA и сразу вопрос: как мне получить исполняемый файл .app (работаю в OS X) своего приложения. Или если быть более конкретным — как мне запустить программу на другой машине? Моя программа:
import javax.swing.*; import java.awt.event.*; public class Dialog extends JDialog < private JPanel contentPane; private JButton buttonOK; private JButton buttonCancel; public Dialog() < setContentPane(contentPane); setModal(true); getRootPane().setDefaultButton(buttonOK); buttonOK.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < onOK(); >>); buttonCancel.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < onCancel(); >>); // call onCancel() when cross is clicked setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent e) < onCancel(); >>); // call onCancel() on ESCAPE contentPane.registerKeyboardAction(new ActionListener() < public void actionPerformed(ActionEvent e) < onCancel(); >>, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); > private void onOK() < // add your code here dispose(); >private void onCancel() < // add your code here if necessary dispose(); >public static void main(String[] args) < System.out.println("Start"); Dialog dialog = new Dialog(); dialog.pack(); dialog.setVisible(true); System.exit(0); >>
Отслеживать
4,278 1 1 золотой знак 25 25 серебряных знаков 33 33 бронзовых знака
задан 6 янв 2014 в 1:59
Adam Shakhabov Adam Shakhabov
3,837 8 8 золотых знаков 34 34 серебряных знака 85 85 бронзовых знаков
Сборка и выполнение Java программ
Сборка (англ. assembly) — двоичный файл, содержащий исполняемый код программы или (реже) другой подготовленный для использования информационный продукт.
Автоматизация сборки — этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:
- компиляция исходного кода в бинарный код
- сборка бинарного кода
- выполнение тестов
- разворачивание программы на производственной платформе
- написание сопроводительной документации или описание изменений новой версии
Для автоматизации сборки проектов традиционно используют системы сборки, такие как make на Unix подобных системах и nmake для компилятора Microsoft. Также традиционно написание файлов для сборки проекта под эти системы является задачей нетривиальной. Конечно, пользуясь только Mictosoft Visual Studio можно даже не подозревать о существовании этих файлов, так как интегрированная среда разработки достаточно удобно скрывает всю схему работы, оставляя снаружи несколько диалоговых окон и кнопку Build. Но для сложных проектов использующих массу сторонних библиотек и кроссплатформенных проектов такой подход часто оказывается неприемлемым.
Принципы сборки в java
1. Как работает java компилятор
Текст программы — это исходный код программы на языке java.
Дополнения — это классы, которые необходимо учитывать во время сборки (библиотеки).
В итоге мы получаем набор файлов с расширением class. То есть, если мы используем сторонние библиотеки – мы должны указать их при сборке. Это могут быть скомпилированные классы или собранные подсистемы.
Не всегда для компиляции необходимо указывать дополнительные библиотеки (к примеру, если у нас программа в 1 программный файл). Но если всё же это необходимо, то для этого компилятор java необходимо запустить с аргументом «-cp» (сокращение от –classpath). После этого аргумента идёт список библиотек (jar файлов или файлов class) разделённых символом разделителем файлов (в *nix это «:», в windows это «;»).
Пример компиляции программы из одного файла:
javacHelloWorld.java
Пример компиляции программы c дополнительными библиотеками «myLib» и «my2ndLib»:
javac -cp myLib.jar:my2ndLib.jar NotStandartHelloWorld.java
В java нет разграничения между собранной библиотекой, исполняемым приложением или же подсистемой. Что имеется в виду, что если вы хотите создать самостоятельную сущность в едином файле, вы создаёте jar файл. К примеру, если вы создаёте библиотеку, то это будет jar файл с набором классов, который могут быть использованный другими разработчиками, если это подсистема, то это часть функционала (набор классов) вынесенная за рамки основного модуля, но используемая в нём (что то вроде частной библиотеки), и т.д..
2. Выполнение java-программы.
Выполнение классов работает схожим образом с компиляцией (используются даже те же аргументы).
Если после компиляции у нас получилось 10 классов, то выполняем только класс который содержит функцию main, остальные классы должны быть представлены как библиотеки.
К примеру, запуск программы c дополнительными библиотекой «sout», которая находиться в папку «lib» выглядеть так:
java -cp lib/sout.jar HelloWorld
По умолчанию, все классы в текущем каталоги включены в пути (-cp для классов в текущем каталоге указывать не надо). Что имеется в виду, если мы скомпилировали программу, и в итоге получили множество классов в одной папке, то мы можем запускать только лишь главный класс, остальные классы java попробует найти сама в текущем каталоге (Даже если они находятся во вложенных папках, java и туда заглянет).
Такой подход допустим, когда у нас немного классов, но при больших системах перечисление всех классов не возможно (их количество может превышать тысячи …). Поэтому можно выполнять не класс, а специально собранный jar-файл. Для этого необходимо указать аргументы -jar.
java -cp lib.jar -jar myApp.jar
3. Jar-файл
Jar-файл — это ZIP архив (то есть вы можете разархивировать его). Jar-файл должен в себе содержать набор классов и файл META-INF/MANIFEST.MF, в котором описаны характеристики данного jar-файла.
Основной вариант создания Jar-файла:
jar cf jar-file input-file(s)
Jar – это утилита и набора утилит которые вы получаете при установке java.
Программа jar принимает аргументы в old-UNIX стиле: вначале идут ключи потом аргументы программы, ключ с аргументом указывается последним, не указывать «-» перед аргументами, группировать короткие аргументы («cf» значит «-c -f »).
- Опция c — говорит о том, что вы хотите создать (create) jar-файл.
- Опция f — говорит о том, что вы хотите создать файл (file) с определённым именем (при выполнении данного примера создастся файл с именем «jar-file.jar»).
- Аргумент input-file(s) является разделенный пробеламисписок из одного или нескольких файлов, которые вы хотите включить в ваш JAR-файл. input-file(s) аргумент может содержать символ «*». Если любой из входных является каталогом, содержимое этих каталогов добавляются в архив JAR рекурсивно.
Когда вы создаете JAR-файл, он автоматически получает файл манифеста по умолчанию (если вы его не указали во входных файлах – он будет создан автоматически). В jar-файле может быть только один файл манифеста с указанным путём:
Общая структура манифеста имеет вид:
Заголовок: значение |
Все символы пробелов (\n, \r, \t, …) в «значении» будут удалены, к примеру, манифест:
Manifest-Version: 1.0Созданная-By: 1.6.0 (Sun Microsystems Inc) |
Когда вы создаете JAR-файл, по умолчанию файл манифеста просто содержит следующее:
Manifest-Version: 1.0Созданная-By: 1.6.0 (Sun Microsystems Inc) |
Эти строки показывают, что элементы манифеста имеют форму “заголовок: значение” пар. Имя заголовка отделяется от ее значения двоеточием. Манифест по умолчанию соответствует версии 1.0 спецификации манифест и был создан 1.6.0 версии JDK.
Манифест также могут содержать информацию о других файлах, которые не упакованы в архив (внешние библиотеки который необходимы для функционирования, об этом будет сказано более подробно дальше). Именно то, что информацию о jar-файле должна быть записаны в манифесте зависит от того, как вы собираетесь использовать JAR-файл. Манифест по умолчанию не делает никаких предположений о том, какую информацию он должен записать о других файлах.
Чтоб создать jar-файл с манифестом:
jar cfm jar-file manifest-addition input-file(s)
Ключ «f» и «m» оба требуют аргументов, поэтому мы вначале указываем ключи, а потом в том же порядке указываем (если это необходимо) недостающее аргументы. В начале мы указали аргумент «f», а потом «m», поэтому первый аргумент будет имя выходного файла, а второй это имя (и путь) к манифесту.
Если в написанном вами манифесте не будет одной из выше указанных опций, то они будут добавлены автоматически (то есть, ну указать манифест или указать пустой файл, это одно и то же, это часто применимо в начале разработки…). То, есть если ваш манифест выглядит следующим образом:
Main-Class: Main |
То, в итоговом jar-файле он будет представлен в виде:
Manifest-Version: 1.0Созданная-By: 1.6.0 (Sun Microsystems Inc)Main-Class: Main |
Если вы разрабатываете приложение, которое поставляется в JAR-файл, необходимо каким-то образом указать, какой класс в JAR-файле является входной точкой приложения (который содержит функцию main). Вы предоставляете эту информацию с Main-Class заголовка в манифесте, который имеет общий вид:
Main-Class: имя класса |
Значение имени класса является именем класса, который является входной точкой приложения.
После того как вы установите Main-Class заголовка в манифесте, вы запустите файл JAR с помощью следующей формы Java команду:
java -jar JAR-file
Не указав главного класса в манифесте вам придаться выполнять вашу программу так:
java -cp JAR-file.jar MainClass
Если вы хотите указать лишь главный класс в манифесте, то вам не нужно создавать весь манифест, вы можете указать, необходимы параметр при вызове jar:
jar cfe app.jar MyApp MyApp.class
Опция e — говорит о точки входа в программу (entrypoint).
Вам придется ссылаться на классы в другие файлы JAR из JAR-файла (если вы используете сторонние библиотеки в своем приложении). Для этого вам необходимо включить следующие поля в манифест:
Class-Path: jar1-name jar2-name directory-name/jar3-name |
Данный путь указывается относительно расположению выполняемого jar файла. К примеру, Netbeans складывает все библиотеки в папку lib, которую помещает рядом с собранным приложением, и соответственно указывает путь к библиотекам.
Рассмотрим конечный пример манифеста, для исполняемого jar-файла библиотеки к которому находятся рядом с ним в папке «lib»:
Как сделать исполняемый файл Java или исполняемый файл JAR
В этом уроке мы покажем вам, как создать исполняемый файл JAR — При двойном щелчке по нему запускается определенный основной класс в файле манифеста.
1. Пример AWT
Создайте простое Java-приложение AWT, просто отобразите метку и распечатайте несколько забавных символов ~
package com.csharpcoderr.awt; import java.awt.Frame; import java.awt.Label; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class AwtExample < public static void main(String[] args) < Frame f = new Frame(); f.addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent e) < System.exit(0); >>); f.add(new Label("This JAR file is executable!")); f.setSize(500, 500); f.setVisible(true); > >
2. Manifest.txt
Создать manifest.txt файл.
Main-Class: com.csharpcoderr.awt.AwtExample
Пользы Main-Class в качестве точки входа в этот файл Jar, когда вы дважды щелкните этот файл Jar, AwtExample.class Метод main () будет запущен.
Заметка
Убедитесь, что ваш файл манифеста заканчивается новой строкой, иначе ваш файл манифеста не будет проанализирован и не смог сгенерировать manifest.mf , Прочитайте это http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/jar.html
ЧИТАТЬ ТАКЖЕ: Как создать временный файл в Java
Прочитайте этот справочник jar :
« Убедитесь, что любой ранее существующий файл манифеста, который вы используете, заканчивается новой строкой. Последняя строка файла манифеста не будет проанализирована, если она не заканчивается символом новой строки. »
3. Jar файл
Создайте файл Jar, добавив « AwtExample.class а также manifest.txt Файлы вместе.
Предположим, что папка вашего проекта выглядит следующим образом:
c:testclassescommkyongawtAwtExample.class c:testclassesmanifest.txt
Вы можете выполнить следующую команду, чтобы создать AwtExample.jar ,
jar -cvfm AwtExample.jar manifest.txt com/mkyong/awt/*.class
C:testclasses>jar -cvfm AwtExample.jar manifest.txt com/mkyong/awt/*.class added manifest adding: com/mkyong/awt/AwtExample$1.class(in = 638) (out= 388)(deflated 39%) adding: com/mkyong/awt/AwtExample.class(in = 880) (out= 541)(deflated 38%)
4. Демо
Теперь AwtExample.jar », Дважды щелкните по нему, смотрите вывод:
Рекомендации
- http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/jar.html
- http://www.mkyong.com/java/how-to-add-your-manifest-into-a-jar-file/
- http://www.mkyong.com/java/the-java-archive-tool-jar-examples/
Как конвертировать Java программу в .exe файл
Часто разработчики, особенно начинающие, сталкиваются с необходимостью конвертировать java программу в исполняемый .exe файл. Это может быть полезно, например, если программа должна работать на компьютерах без установленной Java, или если требуется, чтобы программа имела свой уникальный иконку на рабочем столе.
Важно отметить, что Java программы обычно не конвертируются в .exe файлы, как это происходит с программами на C++ или C#. Вместо этого, они компилируются в .class файлы (байт-код), которые затем интерпретируются Java Virtual Machine (JVM). Однако существуют инструменты и подходы, которые позволяют «упаковать» .class файлы в .exe.
Использование Launch4j
Один из таких инструментов — это Launch4j. Это кросс-платформенный инструмент, который обертывает .jar файлы в легковесные .exe файлы. Launch4j также позволяет добавить иконку к .exe файлу, указать версию JVM для запуска и многое другое.
Пример использования Launch4j:
- Сначала нужно скомпилировать java программу в .jar файл.
- Затем запустить Launch4j и выбрать пункт «New configuration».
- В поле «Output file» указать путь и имя будущего .exe файла.
- В поле «Jar» указать путь к .jar файлу.
- В разделе «JRE» можно указать минимальную и максимальную версию JVM.
- После этого можно нажать «Build» и получить готовый .exe файл.
Создание инсталлятора
Если требуется создать инсталлятор для программы, можно воспользоваться инструментом Inno Setup. Он позволяет создать полноценный инсталлятор, который может установить JRE, если он отсутствует на компьютере пользователя, а также создать ярлык на рабочем столе и добавить программу в меню «Пуск».
Пример использования Inno Setup:
- Сначала нужно создать скрипт инсталляции, в котором указать, какие файлы нужно установить и куда.
- Затем можно запустить Inno Setup и выбрать пункт «New».
- В появившемся окне нужно выбрать пункт «I want to create a new script file».
- Далее следовать инструкциям мастера, указывая требуемые параметры.
- После завершения работы мастера можно нажать «Build» и получить готовый инсталлятор.
Таким образом, несмотря на то, что Java программы не превращаются в .exe файлы так же, как это происходит в других языках, существуют инструменты, которые позволяют достичь схожего результата.