Java где - В чем цель META-INF? Разбираемся со структурой и собираем.zip пакет для CWM recovery Что такое мета инфа.

Всем привет! Для интересующихся системой Андроид решил создать эту статью. Все, кто использует ОС Андроид не только для звонков и воспроизведения медиафайлов, а те кто любит эксперементировать с другими прошивками, ставить украшательства полностью изменяющие интерфейс, различные твики по увеличению производительности и т.д.(ну, конечно-же имеет рут права), не раз сталкивались с пакетами расширением.zip для установки через CWM recovery. Какова структура этих пакетов, как они ставятся, как самому собрать такой пакет смотрим под кат.

Так как подавляющее множество новичков в этом вопросе, описываю все своими словами. Зип пакет для рекавери,- это набор файлов, скриптов, содержащих в себе синтаксис (текст) на языке edify для выполнения каких либо задач (замена любых файлов, удаление, форматирование, вставка файлов, их запуск и т.д.). Структура пакета:
Внутри пакета мы видим в первую очередь папку «META-INF» в которой лежит папка «сom», далее папка «google», потом папка «android», а уже в последней мы видим два файла: updater-script и update-binary. Такое «забавное» содержание папки META-INF одинаково для всех recovery и устройств на ОС Андроид и только его может «читать» рекавери. Updater-script,- это файл, содержащий в себе команды для рекавери поэтапно. Например открываем updater-script рут эксплорером в текстовом редакторе и видим:
mount("/system");- скрипт монтирует систему на запись
delete("/system/app/calculator.apk");- удаляет из папки system/app/ приложение калькулятор
umout("/system");- размонтирует систему.
Этот скрипт может содержать любой синтаксис для удаления, копирования, открытия и т.д., но об этом позже. Второй файл update-binary,- это набор команд на языке edify (типа шпаргалка для updater-script). Рут эксплорером не открывается из-за большого веса и как правило, скачивается уже готовый. Пример для чего он нужен. Ставите архив, рекавери «смотрит» в updater-script первую команду, например, mount("/system); дальше эта команда проверяется в update-binary, а там написано, что эта команда монтирует на запись систему, и система это выполняет. Еще при распаковке в папке META-INF вы можете увидеть файлы MANIFEST.MF, CERT.RSA и CERT.SF. Это подпись архива, и нужна она только для заводского рекавери. Так же возле «главной» папки META-INF, может быть любая папка либо файл. Например пакет для замены ядра системы: видим в нем папку META-INF со всем в себе содержащим, что я писал выше (META-INF/com/google/android/updater-script и update-binary) и образ ядра boot.img. Либо пакет для удаления и замены, например, стандартного музыкального плеера: META-INF и папка system, а в ней папка app в которую мы ложем напр. playerpro.apk. C этим вроде разобрались, переходим к созданию пакета:
Для того чтобы собрать пакет, изменить или перепаковать прямо на смартфоне, нам потребуется в первую очередь рут права, файл update-binary и три программы: рут эксплорер, zarchiver, и программа для подписи архивов zip signer. Поехали! На примере мы будем удалять стоковый плеер, и на его место ставим PlayerPro.
1. Открываем root explorer и создаем путь из папок META-INF/com/google/android/.
2. В папку android распаковываем и кладем update-binary.
3. Так же в папке android жмем (в приложении Рут эксплорер) дополнительное меню и тапаем на «создать файл». Имя файла прописываем updater-script.
4. Открываем updater-script в текстовом редакторе того-же рут эксплорера и прописываем команды:
mount("/sbin/busybox", "/system");
delete("/system/app/music.apk");
package_extract_dir(«system», "/system“);
unmount("/system");
5. Выходим и сохраняем.
6. Шагаем к папке META-INF, и возле нее создаем папку system, а в ней папку app, куда кладем уже установленный апк файл нашего плеера (взять его можно по пути data/app).
7. Заходим в прогу Zarchiver/настройки/уровень сжатия zip и выбираем «нормальный». Потом выходим из настроек и жмем мультивыделение. Выбираем две наши папки META-INF и system, пакуем их в зип архив.
8. Открываем програму Zip signer, находим наш архив, называем его как хотим (только без русских символов и пробелов, напр. Playerpro-system-by-me), внизу жмем signed test key.
9. Находим подписанный архив, который готов для установки через CWM или любое другое кастомное recovery.
Небольшой пример команд для updater-script:
copy_dir
Синтаксис: copy_dir []
Копирует содержимое в . Файлы в имеющиеся в перезаписываются.
Пример: copy_dir PACKAGE:system SYSTEM: Скопирует файлы из папки update.zip/system в /system
format
Синтаксис: format
Форматирует раздел (см. приложение)
Пример: format SYSTEM: Полностью отформатирует /system. Примечание: форматирование удаляет данные необратимо.
delete
Синтаксис: delete [… ]
Удаляет файл(ы)
Пример: delete SYSTEM:app/Calculator.apk Удалит Calculator.apk из папки system/app.
delete_recursive
Синтаксис: delete_recursive [… ]
Рекурсивно удаляет файлы и папки со всем содержимым
Пример: delete_recursive DATA:dalvik-cache Удалит папку /data/dalvik-cache со всем содержимым
run_program
Синтаксис: run_program [ ...]
Запускает программу(скрипт).
Пример: run_program PACKAGE:install_busybox.sh Запустит скрипт update.zip/install_busybox.sh .
set_perm
Синтаксис: set_perm [… ]
Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном
Пример: set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh
set_perm_recursive
Синтаксис: set_perm_recursive [… ]
Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. - для папок, - для файлов.
Пример: set_perm_recursive 0 0 0755 0644 SYSTEM:app Установит права для содержимого /system/app, для папок - 0755, для файлов - 0644.
show_progress*
Синтаксис: show_progress
Показывает прогрессбар в положении секунд (или быстрее, если фактическая скорость выполнения может быть определена).
Пример: show_progress 0.1 0
symlink
Синтаксис: symlink
Создает символическую ссылку (как ‘ln-s’). пишется в формате root:path, а в формате целевой файловой системы (и может быть относительным)
Пример: symlink /data/app_s SYSTEM:app Создаст символическую ссылку на папку /data/app_s для папки /system/app
UPD: если вы собрали пакет, и прошили через рекавери, то варианта два- либо при его установке рекавери напишет ошибку и ничего не произойдет, не удалится. не заменится (такое происходит при неправельной структуре пакета, каких-либо ошибках в названиях файлов/папок, неправельных (не правельный порядок либо ошибки) команд в updater-script или неподходящем update-binary. Как правило рекавери пишет код ошибки от 1 до 9. Либо все станет как вы прописали. То есть, половину команд из updater-scrip не может быть выполнена- или все, или ничего и ошибка.
Надеюсь, кому-то данная статья пригодилась. Естественно, это не значит что вы сразу броситесь, и правильно создатите рабочий пакет, но это очень поможет вам в ваших начинаниях.
ПЕРЕД УСТАНОВКОЙ ЛЮБОГО ПАКЕТА НЕ ЗАБЫВАЕМ ДЕЛАТЬ БЭКАП СИСТЕМЫ. ЗА ВСЕ ДЕЙСТВИЯ ПО УДАЛЕНИЮ И ИЗМЕНЕНИЮ СИСТЕМНЫХ ФАЙЛОВ НИ Я, НИ АДМИНИСТРАЦИЯ САЙТА ОТВЕТСТВЕННОСТИ НЕ НЕСЕТ.

Что такое метаинформация?

Метаинформация - это информация о свойствах документа (страницы сайта), предназначенная для поисковых систем и используемая ими при индексации данной страницы. Использование метаинформации позволяет поисковым системам правильно и более качественно проиндексировать ваш сайт.

Заголовок (title) - выводится в строке заголовка окна открываемой страницы взамен автоматически формируемого сайтом. Данное поле должно содержать не более 300 символов;
Ключевые слова (keywords) - слова, по которым пользователи будут находить эту страницу через поисковые системы. Ключевые слова следует писать через запятую, маленькими буквами. Длина текста не должна превышать 1000 символов;
Описание (description) - как правило, то, что указывается в этом поле, будет отображаться поисковиками при выводе результатов поиска. Данное поле не должно содержать более 300 символов.

META-теги - инструмент хорошего сайта?

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

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

Можно попытаться разобраться - насколько эффективно сейчас использование тех или иных META-тегов при построении сайтов, действительно ли зря большинство начинающих web-мастеров и web-дизайнеров не уделяют им особого внимания, и может ли правильное их использование позволить значительно увеличить посещаемость сайта.

META-теги - это конструкции, которые размещаются в заголовке страницы, и выглядят они примерно следующим образом:


Поле name (имя) определяет, за что именно данный тег отвечает. Длина каждого поля content (содержимое) по стандарту ограничена килобайтом (1024 знака, включая пробелы и знаки препинания), однако, обычно у каждой поисковой системы свои взгляды на это. Следует помнить, что META-теги включены в код страницы, так что увеличение их длины ведет к увеличению объема страницы, а следовательно, увеличивает время загрузки.
Поле http-equiv означает, что данный META-тег предназначен не для поисковой системы, а для управления броузером. Как выглядят META-теги для текущей страницы, Вы можете посмотреть щелкнув правой клавишей по листу и выбрав «Просмотр в виде HTML»

Рассмотрим основные META-теги и опишем, за что каждый из них отвечает.

Зачастую именно то, что Вы здесь укажете, будет отображаться поисковиками в выдаче результатов поисковых запросов (Яndex точно это умеет делать). Делайте описание ярким и зазывающим, однако не стоит писать его большими буквами - умные поисковые машины считают это спамом и "выпендрёжем" и такие страницы могут опускать. Тем не менее, вполне можно обойтись и без него - правильного хорошего заголовка страницы вполне достаточно.

"Rambler: О правильной индексации документов"

На первый взгляд - самый эффективный и важный тег из набора МЕТА-тегов. Именно по тем словам, которые Вы пропишете здесь, и должны находить Вашу страницу через поисковые системы. Однако на деле это далеко не так. Подавляющее большинство российских пользователей, на которых и ориентируются российские же разработчики сайтов, используют всего 4 поисковые машины - Яndex, Rambler, Google и Aport . Все эти машины ориентированы на содержимое страницы и многие другие факторы, а вовсе не на ключевые слова, что Вы пропишете в поле keywords.
Роботы Рамблера при сканировании игнорируют поля и все другие META-теги, кроме . Это связано с тем, что наша система старается индексировать документ таким, какой он есть (то есть таким, каким его видит пользователь). Не секрет, что зачастую создатели интернет-страниц злоупотребляют этими полями, пытаясь заставить поисковые машины находить документ по запросам, не имеющим к нему прямого отношения.

Как видно из вышеприведенной цитаты, для Рамблера то, что было предположено выше, однозначно верно - неважно, что Вы напишете в ключевых словах, робот этого даже не заметит.
Означает ли это, что данное поле можно забросить? Это каждый выбирает сам, мы по-прежнему по старинке его используем, добавляя туда наиболее важные слова из текста страницы. Однако реального результата на данный момент не заметно - и без ключевых слов все отлично работает. Наверняка, какие-то старые зарубежные поисковые машины и продолжают использовать данное поле именно так, как оно определено, однако вряд ли вы получите с них большой приток посетителей.


Эти теги, исходя из их описания, должны давать команду поисковой системе посещать Ваш сайт так часто, как это прописано в поле content. На деле - каждый поисковый робот заходит на сайт так часто, как сам посчитает нужным и возможным. Теоретически, чем чаще Вы будете обновлять Ваш сайт - тем чаще начнут поисковые роботы его посещать.


Это ещё один тег, отвечающий за управление поисковыми роботами. Вот какие могут быть значения у поля содержимого: index - индексировать эту страницу, follow - индексировать страницы, на которые есть ссылки с этой страницы, all - эквивалентно двум предыдущим через запятую, noindex - не индексировать страницу, но идти по ссылкам, nofollow - индексировать, но не идти по ссылкам, none - эквивалентно двум предыдущим через запятую. Нужно ли использовать этот тег? Можно создать файл robots.txt, в котором прописать все эти вещи, и не перегружать ненужными данными код страницы. Единственный сложный случай, когда этот тег оказывается действительно полезным и в котором его следует использовать - при установке на страницы сайта открытого счетчика статистики с возможностью ее просмотра любым пользователем, в том числе и поисковым роботом.

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

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

Чтобы этого не произошло - на ошибочную страницу надо ставить запрет на ее индексацию поисковыми роботами в заголовке при помощи рассматриваемого META-тега. Запретить индексацию данной страницы с помощью файла robots.txt нельзя, адрес, по которому ее найдет поисковый робот, может быть любой - никто не знает, что может набрать пользователь в адресной строке или по какой ссылке попасть на ошибочную страницу сайта. Другие случаи, когда этот META-тег действительно может оказаться полезным, на практике пока не встречались.


Совершенно необязательные тэги, в которые Вы можете вписать своё имя, название Вашей студии, Ваш e-mail, описание авторских прав на документ, любимый сорт пива или имя Вашей собаки. Формат записи произвольный.


Эта конструкция через 5 секунд после прочтения броузером страницы, на которую Вы попали, перегрузит окно броузера и выдаст Вам страницу index.html из корневого каталога сервера. Чаще всего данный тег используется на страницах, которые вставляются вместо титульных при переезде сайта на другой адрес - таким образом осуществляется автоматическая пересылка. Один из немногих действительно полезных META-тегов, однако поисковые системы относятся к нему очень настроженно.


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

Рассматриваемые:
description
keywords
revisit
revisit-after
robots
author
copyright
refresh
pragma
content-type


Эта конструкция позволяет определять, в какой кодировке выдавать пользователю запрошенную страницу. В данном случае в стандартной кодировке Windows. По хорошему - определять правильную кодировку, в которой выдавать пользователю страницу, должен либо сервер, либо броузер. Однако первые иногда бывают не настроены на это администраторами (как площадки для виртуальных серверов хостинг-провайдера Zenon NSP), вторые также бывают не настроены ленивыми или плохо в этом разбирающимися пользователями.
Когда оба этих элемента, сервер и броузер, не настроены должным образом - пользователь получит в результате захода на страницу не текст на русском языке, а набор непонятных символьных «крокозябр». Совсем ленивый посетитель сразу же закроет эту страницу, не залезая в настройки кодировки в броузере. А значит - ушел посетитель и возможный клиент. Потому данный тег часто оказывается полезным и его иногда приходится использовать.

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

Каталог мета-информации или же как многие привыкли его называть «папки META-INF» непосредственно содержит в себе информацию об игре, зашифрованную в цифровом коде. Именно этот момент является очень примечательным для данного каталога мета-информации, ведь то, что его нужно непременно удалять или же заменять, является обязательным действием для всех крафтеров. Причиной такому действию, является то, что если данный каталог не удалить, то при проверки контрольных сумм – цифрового сертификата: CODESIGN.RSA, CODESIGN.SF и MANIFEST.MF может возникнуть конфликт с Java.

В противном же случае, если вы все сделали правильно, то игра будет работает на все 100% полноценно и не позволит Java создавать различные диалоги безопасности, которые не дадут запускаться игровому клиенту. Отсюда следует, что при смене каких – либо внутриигровых файлов, вся контрольная сумма сертификата изменяется и он в итоге превращается в недействительный, что приводит к неработоспособности всей игровой системы Java, на которой написана игра Minecraft, а при удаление папки META-INF, удаляется и сертификат, что позволяет запускаться игровому клиенту Майнкрафт без внутренних конфликтов.

Папка META-INF при установки различных дополнений для игры Майнкрафт является одной из самых важных и необходимых, а все потому, что только благодаря правильному ее «использованию» мод, а порой и весь игровой клиент будет работать на 100% правильно, в противном же случае игра может вообще не запуститься. Стоит отметить, что папка META-INF присутствует во всех установках модов и лишь за редчайшими исключениями ее может не быть. Ее основной задачей является «вспомогательное действие», которое помогает правильно установиться тому игровому Minecraft дополнению, которое вы устанавливаете. Обычно весь процесс установки выглядит так:

  • заходим в ту папку, где у вас уже установлена игра Майнкрафт и создаем резервную копию minecraft.jar (это нужно делать всегда, чтоб в итоге не остаться без игры, если игровое дополнение будет багнутое или во время установки пойдет что-то не так);
  • далее открывает папку под названием minecraft.jar (обычно используется архиватор);
  • теперь нужно открыть архив в котором находится скаченное дополнение для Майнкрафт;
  • берем файл из архива и перетаскиваем его в minecraft.jar;
  • и вот именно теперь нужно удалить ту самую «промежуточную» папку META-INF о которой говорилось в начале статьи. Найти папку META-INF можно в minecraft.jar, после ее удаления пробуем играть!

    Надеемся, теперь вам стало понятно почему так важно удалять папку META-INF и какую основную функцию она несет.

Рассказать друзьям:

находится папка (11)

В Java вы часто видите папку META-INF, содержащую некоторые метафайлы. Какова цель этой папки и что я могу там поместить?

Answers

META-INF в Maven

В Maven папка META-INF понятна из-за стандартной компоновки каталогов, которая по стандарту имен согласует ваши ресурсы проекта в JAR: любые каталоги или файлы, помещенные в каталог $ {basedir} / src / main / resources , упаковываются в ваш JAR с помощью точно такая же структура, начиная с базы JAR. Папка $ {basedir} / src / main / resources / META-INF обычно содержит файлы .properties, в то время как в банке содержатся созданные MANIFEST.MF , pom.properties , pom.xml , среди других файлов. Также используются такие среды, как Spring use classpath:/META-INF/resources/ для обслуживания веб-ресурсов. Дополнительные сведения см. В разделе

Я недавно думал об этой проблеме. По-видимому, нет никаких ограничений на использование META-INF. Конечно, есть определенные стриктуры о необходимости помещать там манифест, но, похоже, нет никаких запретов по размещению там других вещей.

Почему это так?

Случай cxf может быть законным. Вот еще одно место, где этот нестандартный рекомендуется обойти неприятную ошибку в JBoss-ws, которая предотвращает проверку на стороне сервера против схемы wsdl.

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

Чтобы добавить к информации здесь, в случае файла WAR файл META-INF / MANIFEST.MF предоставляет разработчику возможность инициировать проверку времени развертывания контейнером, что гарантирует, что контейнер может найти все классы вашего приложения зависит от. Это гарантирует, что в случае, если вы пропустили JAR, вам не нужно ждать, пока ваше приложение ударит во время выполнения, чтобы понять, что он отсутствует.

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

По крайней мере, я думаю, что это легко... :-)

Дело в том, что META-INF следует рассматривать как внутренний метакаталог Java. Не связывайтесь с этим! Любые файлы, которые вы хотите включить в JAR, должны быть помещены в какой-либо другой подкаталог или в корень самого JAR.

Все ответы верны. Meta-inf имеет множество целей. Кроме того, здесь приведен пример использования контейнера tomcat.

Значение /META-INF/MANIFEST.MF имеет особое значение:

  1. Если вы запускаете банку с помощью java -jar myjar.jar org.myserver.MyMainClass вы можете переместить определение основного класса в банку, чтобы вы могли сжать вызов в java -jar myjar.jar .
  2. Вы можете определить Metainformations для пакетов, если вы используете java.lang.Package.getPackage("org.myserver").getImplementationTitle() .
  3. Вы можете ссылаться на цифровые сертификаты, которые вы хотите использовать в режиме Applet / Webstart.

Если вы используете JPA1, вам может потребоваться удалить файл persistence.xml в котором указывается имя единицы сохранения, которое вы, возможно, захотите использовать. Модуль persistence обеспечивает удобный способ указания набора файлов метаданных, классов и банок, содержащих все классы, которые должны сохраняться в группе.

Import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; // ... EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);

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

Подумайте об этом, как о другом корне. Из метода Enumerator ClassLoader#getSystemResources(String path) метод Enumerator ClassLoader#getSystemResources(String path) и других перспектив:

Когда заданный путь начинается с «META-INF», метод ищет ресурсы, вложенные внутри папок META-INF всех банок в пути класса.

Когда данный путь не начинается с «META-INF», метод ищет ресурсы во всех других папках (вне META-INF) всех банок и каталогов в пути к классу.

Если вы знаете о другом имени папки, которое getSystemResources метод getSystemResources , прокомментируйте его.

Папка META-INF является домом для файла MANIFEST.MF . Этот файл содержит метаданные о содержимом JAR. Например, есть запись под названием Main-Class, которая указывает имя класса Java со статическим main () для исполняемых JAR-файлов.

Из официальной спецификации файла JAR (ссылка идет на версию Java 7, но текст не изменился с по крайней мере v1.3):

Каталог META-INF

Следующие файлы / каталоги в каталоге META-INF распознаются и интерпретируются платформой Java 2 для настройки приложений, расширений, загрузчиков классов и служб:

  • MANIFEST.MF

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

  • INDEX.LIST

Этот файл генерируется новой опцией -i для инструмента jar, которая содержит информацию о местоположении для пакетов, определенных в приложении или расширении. Он является частью реализации JarIndex и используется загрузчиками классов для ускорения процесса загрузки классов.

Файл подписи для файла JAR. «x» означает имя базового файла.

  • x.DSA

Файл блока подписи, связанный с файлом подписи с тем же именем базового файла. Этот файл хранит цифровую подпись соответствующего файла подписи.

  • services/

В этом каталоге хранятся все файлы конфигурации поставщика услуг.

Это один из способов.

HashMap h = new HashMap() {{ put("a","b"); }};

Однако вы должны быть осторожны и убедиться, что понимаете приведенный выше код (он создает новый класс, который наследуется от HashMap). Поэтому вы должны прочитать больше здесь: http://www.c2.com/cgi/wiki?DoubleBraceInitialization или просто использовать Guava:

Map left = ImmutableMap.of("a", 1, "b", 2, "c", 3);

12 ответов

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

По крайней мере, я думаю, что легко...: -)

Дело в том, что META-INF следует рассматривать как внутренний метакаталог Java. Не связывайтесь с этим! Любые файлы, которые вы хотите включить в JAR, должны быть помещены в какой-либо другой подкаталог или в корень самого JAR.

Я заметил, что некоторые библиотеки Java начали использовать META-INF в качестве каталога, в который будут включены файлы конфигурации, которые должны быть упакованы и включены в CLASSPATH вместе с JAR. Например, Spring позволяет импортировать файлы XML, которые находятся в пути к классам, используя:

В этом примере я цитирую прямо из Apache CXF User Guide . В проекте, над которым я работал, в котором нам нужно было разрешить несколько уровней конфигурации через Spring, мы выполнили это соглашение и поместили наши файлы конфигурации в META-INF.

Когда я размышляю над этим решением, я не знаю, что именно было бы неправильно, просто включив файлы конфигурации в конкретный пакет Java, а не в META-INF. Но это, по-видимому, новый стандарт де-факто; либо это, либо новый анти-шаблон: -)

Вы также можете разместить там статические ресурсы.

В примере:

META-INF/resources/button.jpg

и получить их в web3.0-контейнере через

Http://localhost/myapp/button.jpg

Значение/META-INF/MANIFEST.MF имеет особое значение:

Чтобы добавить к информации здесь, в случае файла WAR файл META-INF/MANIFEST.MF предоставляет разработчику возможность инициировать проверку времени развертывания контейнером, который гарантирует, что контейнер может найти все от вашего приложения зависит ваше приложение. Это гарантирует, что в случае, если вы пропустили JAR, вам не нужно ждать, пока ваше приложение не ударит во время выполнения, чтобы понять, что он отсутствует.

В Maven папка META-INF понятна из-за Стандартный макет каталога , который по соглашению об условном пакете ваши ресурсы проекта в JAR: любые каталоги или файлы, помещенные в каталог ${basedir}/src/main/resources, упаковываются в ваш JAR с той же структурой, начиная с базы JAR. Папка ${basedir}/src/main/resources/META-INF обычно содержит файлы.properties, в то время как в банке содержится сгенерированная MANIFEST.MF , pom.properties pom.xml , среди других файлов. Кроме того, фреймворки, такие как Spring , используют classpath:/META-INF/resources/ для обслуживания веб-ресурсов. Для получения дополнительной информации см.

Если вы используете JPA1, вам может потребоваться отбросить файл persistence.xml , в котором указывается имя единицы сохранения, который вы, возможно, захотите использовать. Модуль persistence обеспечивает удобный способ указания набора файлов метаданных, классов и банок, содержащих все классы, которые должны сохраняться в группе.

Import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; // ... EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);

Я недавно думал об этой проблеме. По-видимому, нет никаких ограничений на использование META-INF. Конечно, есть определенные стриктуры о необходимости помещать там манифест, но, похоже, нет никаких запретов по размещению там других вещей.

Почему это так?

Случай cxf может быть законным. Здесь другое место, где этот нестандартный рекомендуется обойти неприятную ошибку в JBoss-ws, которая предотвращает проверку на стороне сервера против схемы wsdl.

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

Чтобы добавить сюда информацию, META-INF - это специальная папка, в которой ClassLoader рассматривает ее иначе, чем другие папки в банке. Элементы, вложенные внутри META-INF, не смешиваются с элементами вне него. Это как другой корень. По крайней мере, по методу Enumerator ClassLoader#getSystemResources(String path) и др.: Когда заданный путь начинается с "META-INF", метод ищет ресурсы, вложенные внутри папок META-INF всех банок в пути класса. И когда данный путь не начинается с "META-INF", метод ищет ресурсы во всех других папках (вне META-INF) всех банок и каталогов в пути к классу.