Как создать файл jar

Обновлено: 30.06.2024

Я изучаю Java, и у меня возникла проблема. Я создал 6 разных классов, у каждого свой метод main(). Я хочу создать исполняемый файл .jar для каждого класса, то есть 6 исполняемых файлов .jar.

и я получаю сообщение "Невозможно получить доступ к jarfile cf". Я делаю что-то не так, но я не знаю, что. Я также использую Eclipse IDE, если это что-то значит.

5 ответов 5

Чтобы создать файл .jar, вам нужно использовать jar вместо java:

Кроме того, если вы хотите сделать его исполняемым, вам нужно указать точку входа (т. е. класс с public static void main(String[] args)) для вашего приложения. Обычно это достигается путем создания файла манифеста, содержащего заголовок Main-Class (например, Main-Class: myClass ).

Однако, как отметил Марк Питерс, в JDK 6 можно использовать параметр e для определения точки входа:

Наконец, вы можете выполнить его:

См. также

Это упускает суть, не так ли? Являются ли cf допустимыми опциями для java? В любом случае, он хочет создать банку, а не запустить ее. Во всяком случае, согласно вопросу.

В каком случае вам не нужен аргумент -jar, не так ли? Кроме того, это не сделает его исполняемым, поскольку вы не укажете манифест. (По-видимому, в JDK 6+ вы можете использовать «e» в качестве ярлыка, чтобы избежать ввода манифеста вручную: jar cfe myJar.jar myClass myClass.class )

Если вам нужен исполняемый файл jar, вам нужно добавить файл манифеста, например jar -cvfm out.jar META-INF/MANIFEST.MF src/*.class

Поскольку вы упомянули, что используете Eclipse. Eclipse может создать для вас JAR-файлы, если вы запустили каждый класс, у которого есть main, один раз. Щелкните проект правой кнопкой мыши и выберите «Экспорт», затем выберите «Запускаемый файл JAR» в папке Java. Выберите имя класса в конфигурации запуска, выберите место для сохранения jar и примите решение, как обращаться с библиотеками, если это необходимо. Нажмите «Готово», вытрите руки о штаны.

Часто вам нужно указать в манифесте больше, чем вы получаете с ключом -e, и в этом случае синтаксис будет таким:

Что гласит: "создать подробный файл jarFilename manifestFilename", за которым следуют файлы, которые вы хотите включить.

Обратите внимание, что имя файла манифеста, которое вы указываете, может быть любым, так как jar автоматически переименует его и поместит в нужное место в файле jar.

Пусть у нас есть java-файл test.java, который содержит основной класс testa. Теперь сначала мы компилируем наш java-файл просто как javac test.java, создаем файл manifest.txt в том же каталоге и пишем Main-Class: mainclassname . например:

затем мы создаем файл jar с помощью этой команды:

затем мы запускаем файл jar с помощью этой команды: java -jar anyname.jar

Пусть у нас есть один пакет с именем one и все классы внутри него. затем мы создаем файл jar с помощью этой команды:

затем мы открываем manifest.txt внутри каталога META-INF в файле anyname.jar и пишем

в третьей строке., затем мы запускаем файл jar с помощью этой команды:

чтобы создать файл jar, содержащий более одного файла класса: jar cf anyname.jar one.class two.class three.class.

Основной формат команды для создания файла JAR:

  • Параметр c указывает, что вы хотите создать JAR-файл.
  • Параметр f указывает, что вы хотите, чтобы вывод выводился в файл, а не в stdout.
  • jar-file — это имя, которое вы хотите, чтобы получился JAR-файл. Вы можете использовать любое имя файла для файла JAR. По соглашению именам файлов JAR присваивается расширение .jar, хотя это не обязательно.
  • Аргумент входной файл(ы) представляет собой разделенный пробелами список из одного или нескольких файлов, которые вы хотите включить в свой JAR-файл. Аргумент входной файл(ы) может содержать подстановочный знак *. Если какие-либо из «входных файлов» являются каталогами, содержимое этих каталогов рекурсивно добавляется в архив JAR.

Параметры c и f могут располагаться в любом порядке, но между ними не должно быть пробела.

Эта команда создаст сжатый файл JAR и поместит его в текущий каталог. Команда также создаст файл манифеста по умолчанию для архива JAR.

Метаданные в файле JAR, такие как имена записей, комментарии и содержимое манифеста, должны быть закодированы в кодировке UTF8.

Вы можете добавить любой из этих дополнительных параметров к параметрам cf основной команды:

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

При создании файла JAR время создания сохраняется в файле JAR. Таким образом, даже если содержимое файла JAR не меняется, при многократном создании файла JAR результирующие файлы не будут полностью идентичными. Вы должны знать об этом, когда используете файлы JAR в среде сборки.Для управления версиями JAR-файла рекомендуется использовать информацию о версиях в файле манифеста, а не время создания. См. раздел «Установка информации о версии пакета».

Пример

Иерархия папок TicTacToe

Подкаталоги audio и images содержат звуковые файлы и изображения GIF, используемые апплетом.

Вы можете получить все эти файлы из каталога jar/examples при загрузке всего учебного пособия онлайн. Чтобы упаковать эту демонстрацию в один файл JAR с именем TicTacToe.jar, вы должны запустить эту команду из каталога TicTacToe:

Аргументы audio и images представляют каталоги, поэтому инструмент Jar рекурсивно поместит их и их содержимое в файл JAR. Сгенерированный JAR-файл TicTacToe.jar будет помещен в текущий каталог. Поскольку команда использовала параметр v для подробного вывода, при выполнении команды вы увидите что-то похожее на этот вывод:

Из этого вывода видно, что JAR-файл TicTacToe.jar сжат. Инструмент Jar сжимает файлы по умолчанию. Вы можете отключить функцию сжатия, используя параметр 0 (ноль), чтобы команда выглядела так:

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

Инструмент Jar принимает аргументы, в которых используется подстановочный знак *. Если в каталоге TicTacToe не было нежелательных файлов, вы могли бы использовать эту альтернативную команду для создания JAR-файла:

Хотя в подробном выводе это не указано, инструмент Jar автоматически добавляет файл манифеста в архив JAR с путем META-INF/MANIFEST.MF. См. раздел «Работа с файлами манифеста: основы» для получения информации о файлах манифеста.

В приведенном выше примере файлы в архиве сохранили свои относительные пути и структуру каталогов. Инструмент Jar предоставляет параметр -C, который можно использовать для создания файла JAR, в котором относительные пути к заархивированным файлам не сохраняются. Он создан по образцу параметра TAR -C.

В качестве примера предположим, что вы хотите поместить аудиофайлы и изображения GIF, используемые в демонстрации TicTacToe, в файл JAR, и что вы хотите, чтобы все файлы находились на верхнем уровне без иерархии каталогов. Вы можете сделать это, выполнив эту команду из родительского каталога каталогов images и audio:

Часть этой команды -C images указывает инструменту Jar перейти в каталог images, а . следует за -C images указывает инструменту Jar заархивировать все содержимое этого каталога. Затем часть команды -C audio . делает то же самое с каталогом audio. Результирующий файл JAR будет иметь следующее оглавление:

Напротив, предположим, что вы использовали команду, в которой не используется параметр -C:

Создание файла jar в Eclipse

На этой странице показано, как создать файл jar (архив Java) с помощью Eclipse IDE. Инструкции предназначены для объединения исходного кода (файлы .java) в банку. Эти инструкции не охватывают, как создать исполняемый файл jar.

Чтобы создать новый файл JAR в рабочей среде:

    В контекстном меню или в меню "Файл" строки меню выберите "Экспорт".




ВАЖНО: в этом примере проект хранит исходный код в папке с именем src. Ваш проект может иметь другую настройку. Убедитесь, что вы развернули дерево, чтобы показать пакет по умолчанию, и что файлы .java отмечены справа. В качестве альтернативы отмените выбор параметра «Экспорт сгенерированных файлов и ресурсов классов» и выберите параметр «Экспорт исходных файлов и ресурсов Java». Для CS307 нам нужны файлы .java. Нам не нужны файлы .class. Если вы не сдадите исходные файлы, файлы .java, ваша оценка за задание будет равна 0.


Если вы хотите включить другие файлы или ресурсы, они должны быть в открытом проекте.Перейдите к их расположению через дерево каталогов слева и убедитесь, что файл или ресурс отмечен в окне справа. В приведенном ниже примере мы включаем файл с именем OtherFile.txt, который находится в каталоге A3.





  • Нажмите "Готово", чтобы немедленно создать файл JAR.
  • Нажмите «Далее», чтобы использовать страницу «Параметры упаковки JAR» для установки дополнительных параметров, создания описания JAR или изменения манифеста по умолчанию.

Один простой способ проверить правильность файлов в банке — переименовать его с расширением .zip. Затем используйте любую программу для архивирования, чтобы просмотреть файлы внутри. (Это может не работать в зависимости от того, как настроена ваша система.)

Переименовать в расширение .zip:


Открыть с помощью zip-программы/утилиты.


На изображении выше видно, что файл A3.jar (переименованный в A3.zip) содержит 2 файла MathMatrix.java и MathMatrixTester.java. Помните, что у вас может быть несколько копий этих файлов на вашем компьютере. Вы можете разархивировать файл (в месте, отличном от того, где файлы изначально находились!!) и открыть файлы .java, чтобы убедиться, что они правильные, или сравнить размер файлов с размером оригиналов. В качестве альтернативы вы можете распаковать JAR-файл, опять же в другом месте, чем исходные файлы .java, и проверить файлы.

Как создать исполняемый файл Jar с помощью команд Linux и без Eclipse

До сих пор для меня было так просто щелкнуть правой кнопкой мыши в Eclipse IDE и создать исполняемый файл .jar несколькими простыми щелчками. На прошлой неделе мне пришлось вручную создать исполняемый файл .jar на моем узле Digital Ocean, на котором мы обычно размещаем множество сервисов.

Потребовалось некоторое время, чтобы создать файл .jar напрямую, используя только команды, но, наконец, через 10 минут исполняемый файл .jar был готов.

Если у вас есть какие-либо из следующих вопросов, то вы попали по адресу:

  • Лучший способ создать файл jar в командной строке Linux
  • Как сделать файл jar исполняемым в Linux?
  • Как скомпилировать JAR-файл в Linux?
  • Как сделать файл JAR исполняемым для Linux?
  • Как создать и запустить файл .Jar в терминале Linux?

Приступим:

Шаг 1) Убедитесь, что у вас установлена ​​Java в системе Linux

Если Java уже установлена, перейдите непосредственно к шагу 4. Попробуйте запустить команду javac, и если вы увидите приведенный ниже результат, значит, на хосте нет установки Java.

Шаг 2) Установите Java на хост Linux

Подготовка к распаковке. . . /openjdk-11-jdk-headless_11. 0.1 + 13 - 3ubuntu3.18.10.1_amd64.deb . . .

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jar для предоставления /usr/bin/jar(jar) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java - 11 - openjdk - amd64 / bin / jarsigner для предоставления / usr / bin / jarsigner ( jarsigner ) в автоматическом режиме

обновление — альтернативы: использование /usr/lib/jvm/java — 11 — openjdk — amd64 / bin / javac для предоставления / usr / bin / javac ( javac ) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/javadoc для предоставления /usr/bin/javadoc (javadoc) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java - 11 - openjdk - amd64 / bin / javap для предоставления / usr / bin / javap ( javap ) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java - 11 - openjdk - amd64 / bin / jcmd для предоставления / usr / bin / jcmd ( jcmd ) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jdb для предоставления /usr/bin/jdb (jdb) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jdeprscan для предоставления /usr/bin/jdeprscan (jdeprscan) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jdeps для предоставления /usr/bin/jdeps (jdeps) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java - 11 - openjdk - amd64 / bin / jimage для предоставления / usr / bin / jimage ( jimage ) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jinfo для предоставления /usr/bin/jinfo (jinfo) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jlink для предоставления /usr/bin/jlink (jlink) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jmap для предоставления /usr/bin/jmap (jmap) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java - 11 - openjdk - amd64 / bin / jmod для предоставления / usr / bin / jmod ( jmod ) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jps для предоставления /usr/bin/jps (jps) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jrunscript для предоставления /usr/bin/jrunscript (jrunscript) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jshell для предоставления /usr/bin/jshell (jshell) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jstack для предоставления /usr/bin/jstack (jstack) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jstat для предоставления /usr/bin/jstat (jstat) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jstatd для предоставления /usr/bin/jstatd (jstatd) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/rmic для предоставления /usr/bin/rmic (rmic) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/serialver для предоставления /usr/bin/serialver (serialver) в автоматическом режиме

обновление-альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jaotc для предоставления /usr/bin/jaotc (jaotc) в автоматическом режиме

обновление - альтернативы: использование /usr/lib/jvm/java-11-openjdk-amd64/bin/jhsdb для предоставления /usr/bin/jhsdb ( jhsdb ) в автоматическом режиме

Шаг 3) Проверка на Java

Просто попробуйте еще раз запустить приведенные ниже команды, и вы должны увидеть информацию об установленной Java.


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

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

IntelliJ предоставляет несколько различных способов экспорта JAR-файла из рабочей области. В этом руководстве я объясню два разных метода настройки архитектуры проекта для экспорта JAR-файла из IntelliJ:

  • Создание артефакта в IntelliJ
  • Использование Maven

Чтобы лучше понять руководство, вы будете использовать простой пример программы, которая принимает информацию о профиле пользователя в качестве аргумента командной строки. Эта программа также использует Picocli и Apache Commons Cli в качестве внешних зависимостей, которые будут поддерживать проверку и анализ параметров командной строки.

Экспорт JAR-файла с использованием метода артефакта сборки

В этом методе вы экспортируете JAR-файл, используя опцию сборки IntelliJ. Перед запуском вам нужно создать проект и добавить в него необходимые зависимости. Зависимости — это внешние программы, упакованные в виде JAR-файлов с уже реализованными некоторыми функциями, которые можно легко повторно использовать в вашей программе. Вам также потребуется создать основной класс с некоторыми простыми функциями.

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

<р>1. Настройте параметры проекта, чтобы определить артефакты этого проекта. Нажмите Структура проекта в меню файлов.

Настройка структуры проекта

<р>2. В окне «Структура проекта» нажмите Артефакты на левой панели, затем нажмите значок плюса. Разверните параметр JAR и нажмите Из модуля с зависимостями.

Создание артефактов

Откроется окно Создать JAR из модулей.

Настройка JAR

<р>3. Щелкните значок папки в правой части поля «Основной класс», чтобы выбрать основной класс вашего проекта. Если вы знаете название основного класса, начните вводить текст в поле, чтобы увидеть предложения.

<р>4. Установите, как должны обрабатываться внешние библиотеки при создании JAR. Есть два варианта:

    • Извлечь в целевой JAR: этот параметр извлекает все файлы классов ваших внешних библиотек в создаваемый вами JAR. Этот единственный JAR будет содержать ваши файлы классов, а также файлы классов из ваших внешних зависимостей. Этот вариант рекомендуется, поскольку обработка одного JAR-файла проще, чем обработка нескольких. Вы можете легко добавить его в другие свои программы и запустить двойным щелчком мыши.
    • Копировать в выходной каталог и связать через манифест: этот параметр копирует JAR-файлы зависимостей в выходной каталог и создает ссылку на вашу программу Java с помощью файла манифеста. Если вы выберете эту опцию, вы также должны указать место, где должен быть создан файл манифеста. Этот метод рекомендуется, если у вас много JAR-файлов, особенно если какой-либо из них подписан. Подписанные JAR-файлы могут работать неправильно при извлечении файлов классов в JAR-файл. Поэтому лучше скопировать JAR-файлы в выходной каталог и использовать их через файл манифеста.
    <р>5. Выберите соответствующий вариант и нажмите ОК, создав артефакт в окне "Артефакты".

    Настройка артефактов

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

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

    Создание артефактов

    Когда вы нажимаете Создать артефакты, JAR-файл создается в выбранном вами выходном каталоге.

    Вот как вы экспортируете JAR, используя параметры, доступные в IntelliJ. Далее вы увидите, как экспортировать JAR с помощью Maven.

    Экспорт JAR-файла с помощью Maven

    Maven — это инструмент для управления и автоматизации проектов, разработанный для упрощения процесса сборки. Например, вы можете создавать сценарии для:

    • Создавайте проект и создавайте JAR-файл после каждой фиксации в репозитории git.
    • Создавайте проект каждую ночь и развертывайте JAR-файлы в производственных системах, когда все определенные тестовые случаи пройдены.
    • Автоматизируйте сборку и развертывание проектов с помощью Jenkins.

    Для начала создайте проект Maven в IntelliJ с помощью этого руководства. Не забудьте добавить необходимые классы для вашего проекта. Вы можете использовать те же файлы классов и зависимости, что и в примере из предыдущего раздела.

    Когда вы создаете новый проект Maven, в каталоге вашего проекта создается минимальный файл POM со следующим содержимым:

    Этот файл POM содержит три важных для проекта артефакта:

    • groupId : уникальное базовое название компании, которая создает и поддерживает проект.
    • artifactId: уникальное имя самого проекта.
    • версия: номер версии проекта.

    Настройка сборки Maven

    В этом разделе вы настроите аспекты сборки Maven. Вы можете добавить различные плагины в раздел сборки вашего POM-файла в зависимости от ваших требований. У каждого будут разные функции. Эти плагины будут выполняться во время сборки вашего проекта.

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

    Это добавляет компилятор Maven для ваших проектов, а также обозначает версию Java для компиляции ваших исходных кодов. Здесь вы используете Java версии 1.8.

    <р>2. Добавьте плагин maven-assembly. Это создает сборку вашего проекта Java.

    Краткое описание различных разделов плагина:

    • artifactId: название самого подключаемого модуля.
    • configuration: настраивает сборку maven.
    • finalName : Окончательное имя создаваемой сборки : Флаг для включения или исключения имени сборки в окончательное имя JAR : Добавляет инструкции к компоновщику архива, в данном случае добавляя основной класс вашей Java-программы в манифест : список ссылок на дескрипторы сборки, доступные в пути к классам плагина.
    • выполнение: тег для указания действий, которые должны выполняться во время выполнения.
    • Цель : Здесь directory-single используется для создания одного файла во время сборки.

    Теперь, когда вы настроили параметры Maven для своего проекта, весь файл POM для проекта должен выглядеть следующим образом:

    Выполнение сборки Maven

    Далее вы создадите конфигурацию для сборки Maven и выполните ее. Он экспортирует JAR в указанные вами каталоги.

    <р>1. Выберите Выполнить > Изменить конфигурации. Откроется окно конфигураций запуска/отладки.

    Редактирование конфигураций

    <р>2. Выберите параметр Maven в меню Добавить новую конфигурацию.

    Добавление новой конфигурации

    Это создаст для вас конфигурацию запуска Maven, как показано ниже.

    Настройка новой конфигурации Maven

    <р>3. Дайте конфигурации имя и добавьте домашний каталог проекта в качестве своего домашнего каталога.

    <р>4. В поле командной строки добавьте чистую установку. Эти цели предусматривают очистку проектов и установку пакета в соответствующую директорию.

    <р>5. Нажмите Применить и ОК. Это создает конфигурацию запуска непосредственно для вас.

    <р>6. В меню "Выполнить" выберите Выполнить имя_конфигурации.

    Выполнить настройку

    Вы увидите, что сборка запускается в вашей консоли, а через несколько секунд вы увидите сообщение BUILD SUCCESS . JAR будет находиться в целевом каталоге вашего дома Project.

    Помните, поскольку этот проект имеет конфигурации в файле Pom.xml, вы также можете настроить автоматическую сборку с использованием сценариев Jenkins по любому триггеру (например, после каждой фиксации в репозитории git).

    Заключение

    Создание JAR-файла в IntelliJ немного сложнее, когда речь идет о настройке структуры проекта и создании артефактов. В случае использования Maven это еще сложнее из-за настройки, связанной с настройкой файла POM и процессов сборки проекта.

    Но в этом руководстве вы узнали, как использовать два разных варианта сборки JAR (используя метод артефакта сборки и используя Maven) в IntelliJ, чтобы упростить процесс. Если у вас есть предложения или советы по созданию JAR-файла, которых нет в этой статье, сообщите мне о них в комментариях.

    Технический писатель и блогер, стремящийся обеспечить лучший в своем классе опыт чтения. Викрам много пишет на темы, связанные с Java, облаком AWS и профессией программирования в целом.

    Читайте также: