Oc-windows.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java manifest main class

Работа с файлами JAR и Manifest в Java

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

Создание файла JAR — дополнительные параметры

Файл JAR создается с помощью инструмента JAR. Общая команда выглядит примерно так:

  • jar-file: имя файла jar, в котором вы хотите использовать инструмент jar.
  • file1, file2, file3: файлы, которые вы хотите добавить в файл jar. manifest-file — это имя файла, который содержит манифест этого jar-файла, указывать манифест-файл в качестве аргумента совершенно необязательно.
  • c : создает новый или пустой архив и добавляет в него файлы. Если какое-либо из указанных имен файлов является каталогами, то программа jar обрабатывает их рекурсивно.
  • C : временно меняет каталог.
  • e: создает точку входа в манифест.
  • f : указывает имя файла JAR в качестве второго аргумента командной строки. Если этот параметр отсутствует, jar запишет результат в стандартный вывод (при создании файла JAR) или прочитает его из стандартного ввода (при извлечении или табулировании файла JAR).
  • я : создает индексный файл.
  • m : добавляет файл манифеста в файл JAR. Манифест — это описание содержимого архива и его происхождения. Каждый архив имеет манифест по умолчанию, но вы можете указать свой собственный, если хотите аутентифицировать содержимое архива.
  • М : Не создает файл манифеста для записей.
  • t: отображение оглавления.
  • u: обновляет существующий файл JAR.
  • v: генерирует подробный вывод.
  • x: извлечь файлы Если вы указываете одно или несколько имен файлов, извлекаются только эти файлы. В противном случае все файлы извлекаются.
  • 0: магазины без сжатия zip.

Параметры команды jar почти аналогичны параметрам команды tar в UNIX. В окнах вы также можете получить справку о различных параметрах команды jar, просто набрав jar в cmd и нажав Enter, результат будет примерно таким:

Для создания файла JAR с двумя классами server.class и client.class и Jpeg image logo.jpeg необходимо написать следующую команду:

Вывод вышеуказанной команды будет выглядеть примерно так:

Лучше использовать опцию -v вместе с командой jar, чтобы узнать, как идут дела.

Файл манифеста

Каждый файл JAR содержит файл манифеста, который описывает функции архива. Каждый JAR-файл имеет файл манифеста по умолчанию. Файл манифеста по умолчанию называется MANIFEST.MF и присутствует в подкаталоге META-INF архива. Хотя файл манифеста по умолчанию содержит только две записи, но у сложных файлов манифеста может быть намного больше. Вот как выглядит файл манифеста по умолчанию:

Записи файлов манифеста сгруппированы в разделы. Каждый раздел имеет две записи имя раздела и его значение. Чуть позже мы увидим, как эти разделы могут реально помочь нам в управлении свойствами нашего архива. Файл манифеста также можно обновить с помощью параметра m команды jar. Но есть некоторые вещи, которые необходимо учитывать при обновлении файла манифеста, иначе вы можете получить следующее жуткое сообщение.

Что нужно иметь в виду при работе с файлами манифеста:

  1. Вы должны оставить пробел между именем и значением любого раздела в файле манифеста, например, версия: 1.1 находится в допустимом разделе, вместо этого напишите версию: 1.1, что пробел между двоеточием и 1.1 действительно имеет большое значение.
  2. При указании основного класса не следует добавлять расширение .class в конце имени класса. Просто укажите основной класс, набрав:

(Очень скоро я расскажу о секции Main-Class).

  • Вы должны добавить новую строку в конце файла. Вам не нужно писать / n для указания новой строки, вместо этого просто оставьте последнюю строку вашего файла манифеста пустой, которая будет служить цели.
  • Текстовый файл для манифеста должен использовать кодировку UTF-8, иначе вы можете столкнуться с некоторыми проблемами.
  • Пример:

    Теперь вернемся и обновим содержимое нашего архива chat.jar. Чтобы обновить файл манифеста, нам просто нужно написать следующую команду:

    Здесь manifest.txt — это новый файл манифеста, который имеет следующее содержимое:

    Вывод вышеуказанной команды будет выглядеть примерно так:

    Здесь мы получаем два предупреждения, потому что мы пытаемся перезаписать ранее представленные записи.

    Исполняемые файлы Jar

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

    Пример:

    Чтобы создать файл chat.jar с классом клиента в качестве основного, необходимо написать следующую команду —

    Вывод вышеуказанной команды будет выглядеть примерно так:

    Не забудьте не добавлять расширение .class после имени класса, который вы хотите установить основным классом.

    В качестве альтернативы вы можете добавить запись Main-Class в файл манифеста, а затем обновить ее. Для приведенного выше примера вам просто нужно добавить эту запись:

    Когда основной класс установлен, можно просто запустить jar-программу, написав следующую команду:

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

    Запечатывание пакета

    Наконец, мы собираемся обсудить герметизацию пакетов в Java. Мы можем запечатать пакет в Java, чтобы другие классы не могли добавить себя в него. Возможно, вы захотите запечатать пакет, если вы используете в коде видимые классы, методы и поля. Без запечатывания упаковки другие классы могут добавлять себя в ту же упаковку и, таким образом, получать доступ к видимым функциям упаковки.

    • Для обеспечения герметизации пакета все, что нужно сделать, это поместить все классы этого пакета в файл JAR.
    • По умолчанию пакеты в файле jar не запечатаны, но можно изменить глобальное значение по умолчанию, добавив несколько строк в файл манифеста.
    • Давайте снова рассмотрим случай нашего архива chat.jar, теперь пакет классов client.class и server.class является приложением, и мы хотим запечатать этот пакет, все, что нам нужно сделать, это добавить следующую строку в файл манифеста и обновить его ,

    Это все с моей стороны о том, как работать с файлами JAR. Будьте на связи!!

    Эта статья предоставлена Abhey Rana (UselessCoder) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Читать еще:  Программы для восстановления удаленных файлов после форматирования

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

    java manifest main > На чтение 4 мин. Просмотров 2 Опубликовано 15.12.2019

    If you have an application bundled in a JAR file, you need some way to indicate which class within the JAR file is your application’s entry point. You provide this information with the Main-Class header in the manifest, which has the general form:

    The value classname is the name of the class that is your application’s entry point.

    Recall that the entry point is a class having a method with signature public static void main(String[] args) .

    After you have set the Main-Class header in the manifest, you then run the JAR file using the following form of the java command:

    The main method of the class specified in the Main-Class header is executed.

    An Example

    We want to execute the main method in the class MyClass in the package MyPackage when we run the JAR file.

    We first create a text file named Manifest.txt with the following contents:

    We then create a JAR file named MyJar.jar by entering the following command:

    This creates the JAR file with a manifest with the following contents:

    When you run the JAR file with the following command, the main method of MyClass executes:

    Setting an Entry Point with the JAR Tool

    The ‘e’ flag (for ‘entrypoint’) creates or overrides the manifest’s Main-Class attribute. It can be used while creating or updating a JAR file. Use it to specify the application entry point without editing or creating the manifest file.
    For example, this command creates app.jar where the Main-Class attribute value in the manifest is set to MyApp :

    You can directly invoke this application by running the following command:

    Manifest

    JAR пример

    Манифест – это файл с расширением MF, который создаётся всегда, когда формируется Jar файл (за исключением случая, когда в команде на создание Jar файла указана опция M, не спутайте её с опцией m).

    Этот создаваемый Jar инструментами манифест назовём манифестом по умолчанию (default manifest). Каждая строка файла манифеста – разделённая двоеточием пара “имя: значение”. Содержание манифеста по умолчанию можно изменить следующим образом. В папке bin нашего проекта создайте текстовый файл MANIFEST.txt, получим:

    Введите текст в MANIFEST.txt:

    и переведите курсор на новую строку, это важно:

    Обратите внимание, на картинке курсор в начале новой строки. Сохраните текстовый файл MANIFEST.txt. В MANIFEST.txt мы объявили главный класс приложения. Наш класс находится в пакете myPack, это отражено в MANIFEST.txt: myPack.JarClass.

    Ещё раз. Файл манифеста MANIFEST.MF автоматически создаётся всегда (если нет M в команде). Тогда для чего мы создали ещё какой-то MANIFEST.txt? Для того, чтобы изменить содержание дефолтного манифеста, т.е. MANIFEST.MF. При создании файла Jar строки из нашего MANIFEST.txt добавятся в файл MANIFEST.MF.

    Создание Jar файла

    Правой кнопкой по значку MyJar.bat -> Изменить и вносим такой текст:

    Получаем:

    Сохраните MyJar.bat. Теперь можно создать jar файл: два клика по MyJar.bat и через секунду получаем JarFile.jar:

    Проверим работу полученного JarFile.jar: два раза кликаем по JarFile.jar и видим знакомое окно:

    Файл манифеста содержится внутри архива JAR по пути “META-INF/MANIFEST.MF”. Он содержит информацию, которая позволяет указывать версию, производителя, цифровую подпись, дополнительные пути поиска классов и многое другое.

    Пример файла “MANIFEST.MF”:

    Как видите, файл состоит из ключей и их значений, разделённый символом «:». В нашем случае указывается версия спецификации манифеста 1.0, и что jar был создал 1.6.0_26-b03 (Sun Microsystems Inc.).

    Пока эта информация не очень полезна. Но файл манифеста может содержать входную точку программы, например:

    Здесь мы указали, что класс App в пакете ru.urvanov.javaexamples.springjavamailsenderimpl содержит статический метод main , который и должен запускаться при запуске Jar-файла командой:

    Также в файле манифеста бывают различные секции. Секции обычно отделяются друг от друга пустой строкой и содержат название секции (пакета Java), для которого указываются отдельные атрибуты. Примерно так:

    Файл манифеста должен быть в кодировке UTF-8 и может использовать переводы строк CR+LF, LF или просто CR.

    Последняя строка в файле манифеста обязательно должна заканчиваться переводом строки!

    Из самого кода на Java мы можем вручную считывать и обрабатывать файлы манифеста, если это необходимо. Для этого используется класс java . util . jar . Manifest . Напишем небольшой пример его использования. Считывать будем следующий файл манифеста:

    Сборка и выполнение Java программ

    категория
    Java
    дата12.09.2012
    авторYuriyDunko
    голосов19

    Сборка (англ. assembly) — двоичный файл, содержащий исполняемый код программы или (реже) другой подготовленный для использования информационный продукт.

    Автоматизация сборки — этап написания скриптов или автоматизация широкого спектра задач применительно к ПО, применяемому разработчиками в их повседневной деятельности, включая такие действия, как:

    1. компиляция исходного кода в бинарный код

    2. сборка бинарного кода

    3. выполнение тестов

    4. разворачивание программы на производственной платформе

    5. написание сопроводительной документации или описание изменений новой версии

    Для автоматизации сборки проектов традиционно используют системы сборки, такие как make на Unix подобных системах и nmakeдля компилятора Microsoft. Также традиционно написание файлов для сборки проекта под эти системы является задачей нетривиальной. Конечно, пользуясь только Mictosoft Visual Studio можно даже не подозревать о существовании этих файлов, так как интегрированная среда разработки достаточно удобно скрывает всю схему работы, оставляя снаружи несколько диалоговых окон и кнопку Build. Но для сложных проектов использующих массу сторонних библиотек и кроссплатформенных проектов такой подход часто оказывается неприемлемым.

    В рамках технологии .NET — двоичный файл, содержащий управляемый код. Когда компилятор платформы .NET создает EXE или DLL модуль, содержимое этого модуля называется сборкой. Сборка содержит в себе: номер версии, метаданные и инструкции.

    Make (http://www.gnu.org/software/make/) является одной из самых первых утилит, облегчающих процесс сборки проекта. Make утилита работает с Make-файлами определенного формата, основную структуру которых можно представить следующим образом:

    Читать еще:  После восстановления фото не открываются что делать

    Простой пример make-файл построен «традиционным» способом. Все исходные файлы собираемой программы находятся в одном каталоге:

    Makefile

    Предполагается, что для компиляции программы используется компилятор GCC, и объектные файлы имеют расширение «.o». Пример make-файл:

    iEdit: main.o Editor.o TextLine.o

    main.o: main.h Editor.hTextLine.h

    Первое правило заставляет make перекомпоновывать программу при изменении любого из объектных файлов. Второе правило говорит о том, что объектные файлы зависят от соответствующих исходных файлов. Каждое изменение файла с исходным текстом будет вызывать его перекомпиляцию. Следующие несколько правил указывают, от каких заголовочных файлов зависит каждый из объектных файлов. Данный пример не использует ни одной функции из набора make, он не оптимальный (зачем перекомпилировать и пересобрать всё при изменении 1го файла) и громоздкий, за то простой и наглядный. При вызове make, будет взято 1е правило. Правила допускают рекурсии, поэтому написания доброкачественного (чтоб сборщик не умер в вечном цикле) make-файла, ложиться на плечи разработчика.

    Более подробно (на русском): Соглашения о make-файлах (http://www.opennet.ru/docs/RUS/make_compile/make.html#toc15).

    2. Принципы сборки в java

    2.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.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

    Jar-файл — это ZIP архив (то есть вы можете разархивировать его). Jar-файл должен в себе содержать набор классов и файл META-INF/MANIFEST.MF, в котором описаны характеристики данного jar-файла.

    Основной вариант создания Jar-файла:
    jar cf jar-file input-file(s)

    Jar – это утилита и набора утилит которые вы получаете при установке java.

    Программа jar принимает аргументы в old-UNIX стиле: вначале идут ключи потом аргументы программы, ключ с аргументом указывается последним, не указывать «-» перед аргументами, группировать короткие аргументы («cf» значит «-c -f »).

    1. Опция c — говорит о том, что вы хотите создать (create) jar-файл.

    2. Опция f — говорит о том, что вы хотите создать файл (file) с определённым именем (при выполнении данного примера создастся файл с именем «jar-file.jar»).

    3. Аргумент input-file(s) является разделенный пробелами список из одного или нескольких файлов, которые вы хотите включить в ваш JAR-файл. input-file(s) аргумент может содержать символ «*». Если любой из входных является каталогом, содержимое этих каталогов добавляются в архив JAR рекурсивно.

    Когда вы создаете JAR-файл, он автоматически получает файл манифеста по умолчанию (если вы его не указали во входных файлах – он будет создан автоматически). В jar-файле может быть только один файл манифеста с указанным путём:

    Общая структура манифеста имеет вид:

    Заголовок: значение

    Все символы пробелов (n, r, t, …) в «значении» будут удалены, к примеру, манифест:

    Java IO Tutorial — Java Jar Manifest

    Manifest File

    A JAR file may optionally contain a manifest file named MANIFEST.MF in the META-INF directory.

    The manifest file contains information about the JAR file and its entries.

    A manifest file can contain information about the CLASSPATH setting for the JAR file, and its main entry class.

    The main entry class is a class with the main() method to start a stand-alone application, version information about packages, etc.

    A manifest file is divided into sections separated by a blank line. Each section contains name-value pairs. A new line separates each name-value pair. A colon separates a name and its corresponding value.

    A manifest file must end with a new line. The following is a sample manifest file:

    The above manifest file has one section with four attributes:

    Sections in Jar Manifest File

    There are two kinds of sections in a manifest file: the main section and the individual section.

    A blank line must separate any two sections. Entries in the main section apply to the entire JAR file. Entries in the individual section apply to a particular entry.

    Читать еще:  Программа восстановления файлов после форматирования жесткого диска

    An attribute in an individual section overrides the same attribute in the main section.

    An individual entry starts with a «Name» attribute, whose value is the name of the entry in the JAR file and it is followed by other attributes for that entry.

    The manifest file above contains three sections: one main section and two individual sections.

    There is a blank line between the two sections.

    The first individual section indicates that the package book/data is not sealed. This individual section attribute of «Sealed: false» will override the main section’s attribute of «Sealed: true».

    The second individual section is for an entry called images/logo.bmp. It states that the content type of the entry is an image of bmp type.

    Values in Jar Manifest File

    The jar command can create a default manifest file and add it to the JAR file. The default manifest file contains only two attributes: Manifest-Version and Created-By.

    You can use the option M to tell the jar tool to omit the default manifest file.

    The following command will create a test.jar file without adding a default manifest file:

    The jar command gives you an option to customize the contents of the manifest file.

    The option m specifies our file that has the contents for the manifest file.

    The jar command will read the name-value pairs from the specified manifest file and add them to the MANIFEST.MF file.

    Suppose you have a file named manifest.txt with one attribute entry in it. Make sure to add a new line at the end of the file. The file’s contents are as follows:

    To add the Main-Class attribute value from manifest.txt file in a new test.jar file by including all class files in the current working directory, you execute the following command:

    When you specify the option m, you must also specify the manifest file name. The order in which you specify the new JAR file name and the manifest file name must match the order of options m and f.

    For example, you can change the above command by specifying the f and m options in a different order as follows:

    This command will add a manifest file with the following contents to the test.jar file:

    If you do not specify the Manifest-Version and Created-By attribute in your manifest file, the tool adds them. It defaults the Manifest-Version to 1.0. The Created-By is defaulted to the JDK version you use.

    Main class

    The following code shows how to run a Java program by using the java command and specifying the class name that has the main() method as follows:

    com.java2s is the package name.

    We can run a jar file using the -jar option with the java command as follows:

    When you run the above command, the JVM will look for the value of the Main-Class attribute in the MANIFEST.MF file in the test.jar file and attempt to run that class.

    If you have not included a Main-Class attribute in the test.jar file, the above command will generate an error.

    We can also add the Main-Class attribute value in the manifest file without creating our own manifest file.

    Use the option e with the jar tool when you create/update a jar file.

    The following command will add com.java2s.Main as the value of the Main-Class in the MANIFEST.MF file in the test.jar file:

    The following command will add com.java2s.Main as the value of the Main-Class in the MANIFEST.MF file in an existing test.jar file by using the option u for update:

    Class Path

    You can set the CLASSPATH for a JAR file in its manifest file. The attribute name is called Class-Path, which you must specify in a custom manifest file. It is a space-separated list of jar files, zip files, and directories. The Class-Path attribute in a manifest file looks like

    The above entry has three items for the CLASSPATH: a JAR file Main.jar, a directory using the file protocol file:/c:/book/, and another JAR file using a HTTP protocol http://www.java2s.com/tutorial.jar.

    A directory name must end with a forward slash. Suppose this Class-Path setting is included in the manifest file for the test.jar file. When you run the test.jar file using the following java command, this CLASSPATH will be used to search and load classes.

    When you run a JAR file with the -jar option using the java command, any CLASSPATH setting outside the manifest file of the JAR file (test.jar file in the above case) is ignored.

    Another use of the Class-Path attribute is to generate an index of all packages using the option i of the jar tool.

    The following command will generate an index for all packages in all JAR files listed in the Class-Path attribute of the manifest file in the test.jar file:

    Sealing a Package in a JAR File

    Sealing a package in a JAR file means that all classes declared in that package must be archived in the same JAR file.

    To seal a package in a JAR file, include two attributes: Name and Sealed. The value for the Name attribute is the name of the package and the Sealed attribute has value as true.

    The following entries in a manifest file will seal a package named com.java2s. The package name must end with a forward slash (/).

    By default, all packages in a JAR file are not sealed. If you want to seal the JAR file itself, you can include a Sealed attributed, as shown:

    Sealing the JAR file will seal all packages in that JAR file. However, you can override it by not sealing a package individually.

    The following entries in a manifest file will seal all packages in the JAR file, except the book/tutorial/ package:

    Ссылка на основную публикацию
    Adblock
    detector
    ×
    ×