Поиск…


Вступление

Существует множество технологий для «упаковки» Java-приложений, веб-приложений и т. Д. Для развертывания на платформе, на которой они будут работать. Они варьируются от простой библиотеки или исполняемых файлов JAR , WAR и EAR до инсталляторов и автономных исполняемых файлов.

замечания

На самом фундаментальном уровне программа Java может быть развернута путем копирования скомпилированного класса (например, файла «.class») или дерева каталогов, содержащего скомпилированные классы. Однако Java обычно развертывается одним из следующих способов:

  • Копируя JAR-файл или коллекцию JAR-файлов в систему, в которой они будут выполнены; например, с помощью javac .

  • Копирование или загрузка WAR, EAR или аналогичного файла в «контейнер сервлетов» или «сервер приложений».

  • Запустив какой-то установщик приложений, который автоматизирует вышеуказанное. Установщик также может установить встроенную JRE.

  • Поместив файлы JAR для приложения на веб-сервер, чтобы они могли быть запущены с использованием Java WebStart.

Пример создания JAR, WAR и EAR файлов суммирует различные способы создания этих файлов.

Существует множество открытых и коммерческих генераторов «генератор установки» и «генератор EXE» для Java. Аналогичным образом, существуют инструменты для обфускации файлов классов Java (чтобы сделать сложную реверсивную инженерию) и для добавления проверки лицензии во время выполнения. Все они недоступны для документации «Язык программирования Java».

Создание исполняемого JAR из командной строки

Чтобы создать банку, вам нужен один или несколько файлов классов. Это должно иметь основной метод, если он должен выполняться двойным щелчком.

В этом примере мы будем использовать:

import javax.swing.*;
import java.awt.Container;

public class HelloWorld {

    public static void main(String[] args) {
        JFrame f = new JFrame("Hello, World"); 
        JLabel label = new JLabel("Hello, World");
        Container cont = f.getContentPane();
        cont.add(label);
        f.setSize(400,100); 
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

Он был назван HelloWorld.java

Затем мы хотим скомпилировать эту программу.

Вы можете использовать любую программу, которую хотите сделать. Для запуска из командной строки см. Документацию по компиляции и запуску вашей первой java-программы.

Когда у вас есть HelloWorld.class, создайте новую папку и вызовите ее, как хотите.

Сделайте еще один файл с именем manifest.txt и вставьте в него

Main-Class: HelloWorld
Class-Path: HelloWorld.jar

Поместите его в ту же папку с HelloWorld.class
Используйте командную строку для создания вашей текущей cd C:\Your\Folder\Path\Here ( cd C:\Your\Folder\Path\Here on windows).

Используйте Terminal и смените каталог в каталог ( cd /Users/user/Documents/Java/jarfolder на Mac) в вашей папке

Когда это будет сделано, введите jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class и нажмите enter. Это делает файл jar (в папке с вашим манифестом и HelloWorld.class), используя указанные .class файлы и называемые HelloWorld.jar. См. Раздел «Синтаксис» для получения информации об опциях (например, -m и -v).
После этих шагов перейдите в свой каталог с файлом манифеста, и вы должны найти HelloWorld.jar
Нажатие на него должно отображать Hello, World в текстовом поле.

Создание файлов JAR, WAR и EAR

Типы файлов JAR, WAR и EAR являются в основном ZIP-файлами с «манифестным» файлом и (для WAR и EAR-файлов) конкретной внутренней структурой каталога / файла.

Рекомендуемым способом создания этих файлов является использование специального инструмента Java, который «понимает» требования к соответствующим типам файлов. Если вы не используете инструмент построения, тогда IDE «экспорт» - это следующий вариант, который нужно попробовать.

( Редакционное примечание: описания того, как создавать эти файлы, лучше всего размещать в документации для соответствующих инструментов. Поместите их там. Пожалуйста, покажите некоторые сдержанности и НЕ ПОЛУЧИТЕ их в этом примере! )

Создание файлов JAR и WAR с использованием Maven

Создание JAR или WAR с использованием Maven - это просто вопрос ввода правильного элемента <packaging> в файл POM; например,

<packaging>jar</packaging>

или же

<packaging>war</packaging>

Больше подробностей. Maven может быть настроен на создание «исполняемых» JAR-файлов путем добавления необходимой информации о классе входа и внешних зависимостях в качестве свойств плагина для плагина maven jar. Существует даже плагин для создания файлов «uberJAR», которые объединяют приложение и его зависимости в один JAR-файл.

Дополнительную информацию см. В документации Maven ( http://www.riptutorial.com/topic/898 ).

Создание файлов JAR, WAR и EAR с использованием Ant

Инструмент сборки Ant имеет отдельные «задачи» для построения JAR, WAR и EAR. Для получения дополнительной информации обратитесь к документации Ant ( http://www.riptutorial.com/topic/4223 ).

Создание файлов JAR, WAR и EAR с использованием среды IDE

Три наиболее популярных Java IDE имеют встроенную поддержку для создания файлов развертывания. Функциональность часто описывается как «экспорт».

Создание файлов JAR, WAR и EAR с использованием команды jar .

Также возможно создать эти файлы «вручную», используя команду jar . Это просто вопрос сборки дерева файлов с правильными файлами компонентов в нужном месте, создания файла манифеста и запуска jar для создания файла JAR.

Пожалуйста, обратитесь к команде jar Topic ( Создание и изменение файлов JAR ) для получения дополнительной информации

Введение в Java Web Start

Учебники Oracle Java Tutorials обобщают Web Start следующим образом:

Программное обеспечение Java Web Start обеспечивает возможность запуска полнофункциональных приложений одним щелчком мыши. Пользователи могут загружать и запускать приложения, такие как полная электронная таблица или клиент интернет-чата, без длительных процедур установки.

Другими преимуществами Java Web Start являются поддержка подписанного кода и явное объявление зависимостей платформы, а также поддержка кэширования кода и развертывания обновлений приложений.

Java Web Start также называется JavaWS и JAWS. Основными источниками информации являются:

Предпосылки

На высоком уровне Web Start работает, распространяя приложения Java, упакованные как файлы JAR с удаленного веб-сервера. Предпосылки:

  • Предварительно существующая установка Java (JRE или JDK) на целевой машине, на которой должно выполняться приложение. Требуется Java 1.2.2 или выше:

    • Начиная с версии Java 5.0 поддержка Web Start включена в JRE / JDK.
    • Для более ранних выпусков поддержка Web Start устанавливается отдельно.
    • Инфраструктура Web Start включает в себя некоторые Javascript, которые могут быть включены в веб-страницу, чтобы помочь пользователю установить необходимое программное обеспечение.
  • Веб-сервер, на котором размещается программное обеспечение, должен быть доступен для целевой машины.

  • Если пользователь запустит приложение Web Start, используя ссылку на веб-странице, то:

    • им нужен совместимый веб-браузер, и
    • для современных (безопасных) браузеров им нужно сказать, как сообщить браузеру о возможности запуска Java ... без ущерба для безопасности веб-браузера.

Пример файла JNLP

Следующий пример предназначен для иллюстрации основных функций JNLP.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://www.example.com/demo" 
    href="demo_webstart.jnlp">
    <information>
        <title>Demo</title>
        <vendor>The Example.com Team</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="Demo.jar" main="true"/>
    </resources>
    <application-desc
         name="Demo Application"
         main-class="com.example.jwsdemo.Main"
         width="300"
         height="300">
     </application-desc>
     <update check="background"/>
</jnlp>    

Как вы можете видеть, файл JNLP на основе XML, и вся информация содержится в <jnlp> .

  • Атрибут spec предоставляет версию спецификации JNPL, которой соответствует этот файл.
  • Атрибут codebase дает базовый URL для разрешения относительных URL-адресов href в остальной части файла.
  • Атрибут href дает окончательный URL для этого файла JNLP.
  • Элемент <information> содержит метаданные приложения, включая его название, авторы, описание и справочный сайт.
  • Элемент <resources> описывает зависимости для приложения, включая требуемую версию Java, платформу ОС и файлы JAR.
  • Элемент <application-desc> (или <applet-desc> ) предоставляет информацию, необходимую для запуска приложения.

Настройка веб-сервера

Веб-сервер должен быть настроен на использование application/x-java-jnlp-file как application/x-java-jnlp-file MIMEtype для .jnlp .

Файл JNLP и файлы JAR приложения должны быть установлены на веб-сервере, чтобы они были доступны с использованием URL-адресов, указанных в файле JNLP.

Включение запуска через веб-страницу

Если приложение должно быть запущено через веб-ссылку, страница, содержащая ссылку, должна быть создана на веб-сервере.

  • Если вы можете предположить, что Java Web Start уже установлен на компьютере пользователя, веб-страница просто должна содержать ссылку для запуска приложения. Например.

    <a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
    
  • В противном случае на странице также должны быть указаны некоторые сценарии, чтобы определить тип браузера, который пользователь использует, и запросить загрузку и установку требуемой версии Java.

ПРИМЕЧАНИЕ. Неплохая идея побудить пользователей поощрять установку Java таким образом или даже включить Java в своих веб-браузерах, чтобы запуск веб-страницы JNLP работал.

Запуск приложений Web Start из командной строки

Инструкции для запуска приложения Web Start из командной строки просты. Предполагая, что у пользователя установлена ​​Java 5.0 JRE или JDK, просто нужно запустить это:

$ javaws <url>

где <url> - это URL-адрес для файла JNLP на удаленном сервере.

Создание UberJAR для приложения и его зависимостей

Общее требование для приложения Java - это то, что можно развернуть, копируя один файл. Для простых приложений, которые зависят только от стандартных библиотек классов Java SE, это требование выполняется путем создания JAR-файла, содержащего все (скомпилированные) классы приложений.

Все это не так просто, если приложение зависит от сторонних библиотек. Если вы просто поместите JAR-файлы зависимостей в JAR приложения, стандартный загрузчик классов Java не сможет найти классы библиотеки, и ваше приложение не запустится. Вместо этого вам нужно создать один JAR-файл, который содержит классы приложений и связанные ресурсы вместе с классами и ресурсами зависимостей. Они должны быть организованы как единое пространство имен для поиска загрузчика классов.

Такой JAR-файл часто упоминается как UberJAR.

Создание UberJAR с помощью команды «jar»

Процедура создания UberJAR прямолинейна. (Я буду использовать команды Linux для простоты. Команды должны быть идентичными для Mac OS и аналогичны для Windows.)

  1. Создайте временный каталог и смените каталог на него.

    $ mkdir tempDir
    $ cd tempDir
    
  2. Для каждого зависимого JAR-файла в обратном порядке, который должен появиться в пути к классам приложения, используется команда jar для распаковки JAR во временный каталог.

    $ jar -xf <path/to/file.jar>
    

    Выполнение этого для нескольких файлов JAR будет перекрывать содержимое JAR.

  3. Скопируйте классы приложений из дерева сборки во временный каталог

    $ cp -r path/to/classes .
    
  4. Создайте UberJAR из содержимого временного каталога:

    $ jar -cf ../myApplication.jar
    

    Если вы создаете исполняемый JAR-файл, включите соответствующий MANIFEST.MF, как описано здесь.

Создание UberJAR с использованием Maven

Если ваш проект построен с использованием Maven, вы можете создать его для создания UberJAR с использованием плагинов «maven-assembly» или «maven-shade». Подробнее см. Тему Ассамблеи Maven (в документации Maven ).

Преимущества и недостатки UberJARs

Некоторые из преимуществ UberJARs очевидны:

  • UberJAR легко распространять.
  • Вы не можете разбить библиотечные зависимости для UberJAR, поскольку библиотеки являются автономными.

Кроме того, если вы используете соответствующий инструмент для создания UberJAR, у вас будет возможность исключить классы библиотек, которые не используются из файла JAR. Однако это обычно делается путем статического анализа классов. Если ваше приложение использует рефлексию, обработку аннотации и аналогичные методы, вы должны быть осторожны, чтобы классы не были исключены неверно.

UberJARs также имеют некоторые недостатки:

  • Если у вас много UberJAR с одинаковыми зависимостями, то каждый из них будет содержать копии зависимостей.
  • Некоторые библиотеки с открытым исходным кодом имеют лицензии , которые могут препятствовать 1 их использование в качестве UberJAR.

1 - Некоторые библиотеки библиотек с открытым исходным кодом позволяют использовать библиотеку только конечного пользователя, которая может заменить одну версию библиотеки на другую. UberJAR могут затруднить замену зависимостей версий.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow