Привет, Друзья! Файлы, содержащие подробную информацию по всем загрузчикам служб и классов, расширениям и конфигурации пакетов можно найти в каталогах метаданных Java Archive (сокращенно JAR). Он и получил название META-INF. Также в нем можно найти файлы необходимые для контроля безопасности и версий.

В действительности файлы Java Archive в формате ZIP, в которых есть вся сопутствующая информация и у них улучшена индексация. Когда информация пакуется в файл ZIP, нужно разместить ее так, чтобы содержимое было оформлено правильно. Применение каталога META-INF представляет собой попытку применить каталоги как пространство имен в ZIP файле. Благодаря этому появилась возможность сохранности информации, которая могла повлиять на обработку, в самом ZIP файле, не нарушая его упаковку.
Содержание
- Для чего нужен META-INF
- Каталог META-INF
- META-INF в Maven
- Как должен выглядеть ZIP -обновление (структура)
- Инструменты редактирования update-script
- Команды updater-script
- Внимание! Программа Android +1 Updater Script
- Как узнать как задать правильные symlink в updater-script
- Узнать список всех папок в System
- Узнать все права, uid, gid и список файлов и папок
- Пример updater-script
Для чего нужен META-INF
Платформа Java, применяя в работе META-INF, может распознавать файлы таких типов:
- В составе файла INDEX.LIST содержится информация относительно размещения пакетов, описание которых дается в расширении или приложении.
- В составе файла MANIFEST.MF информация про пакеты и расширения, необходимые чтобы выполнять JAR. При наличии данного файла в META-INF можно определить какие есть зависимости с доступом (внешние либо дополнительные).
- В файле x.DSA вмещается цифровая подпись сигнатурного файла. Обозначение «Х» в названии файла – это наименование название базового файла.
- В файле x.SF содержится хеш, который вычисляется для JAR, применяется, чтобы идентифицировать цифровые подписи Java. «Х» в названии файла – это наименование базового файла.
- Каталог services/ содержит электронные документы, в которых информация о компании, предоставляющей услуги.
Некоторые из библиотек Java применяют каталог META-INF как такой, где содержаться файлы конфигурации. Они вместе с JAR должны быть упакованы.
Обучение продвижению сайтов
Если вы хотите научиться выводить сайты в ТОП 10 поисковых систем Яндекс и Google, посетите мои онлайн-уроки по SEO-оптимизации (коротко о себе я рассказал в видео ниже). Все свои интернет-проекты я вывел на посещаемость более 1000 человек в сутки и могу научить этому Вас. В отличие от коллег я не продаю видео курсы, так как они не информативны, и просматривая их некому задавать вопросы. Я провожу обучение по скайпу индивидуально и во время урока отвечаю на все возникающие вопросы моих учеников. По времени SEO обучение длиться около 4 — 6 часов в зависимости от начальной подготовки ученика. Кому интересно обращайтесь!

На этом сегодня всё, всем удачи и до новых встреч!
215 Kristian [2008-09-16 10:55:00]
В Java вы часто видите папку META-INF, содержащую некоторые метафайлы. Какова цель этой папки и что я могу там поместить?
12 ответов
53 Решение Daniel Spiewak [2008-09-16 11:05:00]
Вообще говоря, вы не должны вкладывать ничего в META-INF самостоятельно. Вместо этого вы должны полагаться на все, что вы используете для упаковки вашего JAR. Это одна из областей, где, по моему мнению, Ant действительно превосходит: указание атрибутов манифеста JAR файла. Очень легко сказать что-то вроде:
По крайней мере, я думаю, что легко. -)
Дело в том, что META-INF следует рассматривать как внутренний метакаталог Java. Не связывайтесь с этим! Любые файлы, которые вы хотите включить в JAR, должны быть помещены в какой-либо другой подкаталог или в корень самого JAR.
140 aku [2008-09-16 10:57:00]
Из официальная спецификация файла JAR (ссылка идет на версию Java 7, но текст не изменился с по крайней мере v1.3 ):
Каталог META-INF
Следующие файлы/каталоги в каталоге META-INF распознаются и интерпретируются платформой Java 2 для настройки приложений, расширений, загрузчиков классов и служб:
Файл манифеста, который используется для определения данных, связанных с расширением и пакетом.
Этот файл генерируется новой опцией " -i " инструмента jar, которая содержит информацию о местоположении для пакетов, определенных в приложении или расширении. Он является частью реализации JarIndex и используется загрузчиками классов для ускорения процесса загрузки классов.
Файл подписи для JAR файла. "x" обозначает имя базового файла.
Файл блока подписи, связанный с файлом подписи с тем же именем базового файла. Этот файл хранит цифровую подпись соответствующего файла сигнатуры.
В этом каталоге хранятся все файлы конфигурации поставщика услуг.
23 user38748 [2008-11-25 00:38:00]
Я заметил, что некоторые библиотеки Java начали использовать META-INF в качестве каталога, в который будут включены файлы конфигурации, которые должны быть упакованы и включены в CLASSPATH вместе с JAR. Например, Spring позволяет импортировать файлы XML, которые находятся в пути к классам, используя:
В этом примере я цитирую прямо из Apache CXF User Guide. В проекте, над которым я работал, в котором нам нужно было разрешить несколько уровней конфигурации через Spring, мы выполнили это соглашение и поместили наши файлы конфигурации в META-INF.
Когда я размышляю над этим решением, я не знаю, что именно было бы неправильно, просто включив файлы конфигурации в конкретный пакет Java, а не в META-INF. Но это, по-видимому, новый стандарт де-факто; либо это, либо новый анти-шаблон: -)
Папка META-INF — это домашний файл MANIFEST.MF. Этот файл содержит метаданные о содержимом JAR. Например, есть запись под названием Main-Class, которая указывает имя класса Java со статическим main() для исполняемых JAR файлов.
Вы также можете разместить там статические ресурсы.
и получить их в web3.0-контейнере через
Значение/META-INF/MANIFEST.MF имеет особое значение:
- Если вы запустите банку с помощью java -jar myjar.jar org.myserver.MyMainClass , вы можете переместить определение основного класса в банку, чтобы вы могли сжать вызов в java -jar myjar.jar .
- Вы можете определить Metainformations для пакетов, если используете java.lang.Package.getPackage("org.myserver").getImplementationTitle() .
- Вы можете ссылаться на цифровые сертификаты, которые вы хотите использовать в режиме Applet/Webstart.
4 sasuke [2009-10-21 18:21:00]
Чтобы добавить к информации здесь, в случае файла WAR файл META-INF/MANIFEST.MF предоставляет разработчику возможность инициировать проверку времени развертывания контейнером, который гарантирует, что контейнер может найти все от вашего приложения зависит ваше приложение. Это гарантирует, что в случае, если вы пропустили JAR, вам не нужно ждать, пока ваше приложение не ударит во время выполнения, чтобы понять, что он отсутствует.
3 EliuX [2015-01-12 18:48:00]
META-INF в Maven
В Maven папка META-INF понятна из-за Стандартный макет каталога, который по соглашению об условном пакете ваши ресурсы проекта в JAR: любые каталоги или файлы, помещенные в каталог $
3 f0ster [2009-10-22 23:42:00]
Если вы используете JPA1, вам может потребоваться отбросить файл persistence.xml , в котором указывается имя единицы сохранения, который вы, возможно, захотите использовать. Модуль persistence обеспечивает удобный способ указания набора файлов метаданных, классов и банок, содержащих все классы, которые должны сохраняться в группе.
Я недавно думал об этой проблеме. По-видимому, нет никаких ограничений на использование META-INF. Конечно, есть определенные стриктуры о необходимости помещать там манифест, но, похоже, нет никаких запретов по размещению там других вещей.
Случай cxf может быть законным. Здесь другое место, где этот нестандартный рекомендуется обойти неприятную ошибку в JBoss-ws, которая предотвращает проверку на стороне сервера против схемы wsdl.
Но действительно нет никаких стандартов, ничто не должно быть. Обычно эти вещи очень строго определены, но по какой-то причине, похоже, здесь нет стандартов. Странно. Похоже, что META-INF стал популярным местом для любой необходимой конфигурации, которая не может быть легко обработана каким-либо другим способом.
2 Readren [2016-04-22 21:21:00]
Чтобы добавить сюда информацию, META-INF — это специальная папка, в которой ClassLoader рассматривает ее иначе, чем другие папки в банке. Элементы, вложенные внутри META-INF, не смешиваются с элементами вне него. Это как другой корень. По крайней мере, по методу Enumerator ClassLoader#getSystemResources(String path) и др.: Когда заданный путь начинается с "META-INF", метод ищет ресурсы, вложенные внутри папок META-INF всех банок в пути класса. И когда данный путь не начинается с "META-INF", метод ищет ресурсы во всех других папках (вне META-INF) всех банок и каталогов в пути к классу.
Если вы знаете о другом имени папки, которое особенно подходит для метода getSystemResources , прокомментируйте его.
0 Tugrul [2015-01-13 18:04:00]
Все ответы верны. Meta-inf имеет множество целей. Кроме того, здесь приведен пример использования контейнера tomcat.
Перейдите к Tomcat Doc и проверьте " Стандартная реализация > copyXML".
Необходимо создать updater-script для вашей кастомной прошивки или мода? Не знаете какие команды писать и что они означают? На все эти ответы можно узнать из данной статьи.
Как должен выглядеть ZIP -обновление (структура)

В корне архива-обновления «должны» находится такие файлы и папки:
- Папка META-INF — обязательно;
- system или data или cache или другие, в зависимости от того, для чего готовилось обновление (не обязательно, так как возможно прошиваете модем или ядро);
- boot.img или recovery.img или zImage (не обязательно, так как возможно обновляете файл в system или data).
Режим сжатия архива должен быть «нормальный» или «обычный» более сильное сжатие Android не поддерживает.
Папка META-INF состоит:
- Папка com

- Файлы подписи обновления
Папка com должна содержать в себе такие файлы и папки:
- Папку android
Папка google должна содержать папку android в которой должны быть файлы
1. updater-script — текстовый файл с набором инструкций для обновления;
2. update-binary — бинарный файл, необходимый для установки обновления.

Инструменты редактирования update-script
Для редактирования updater-script вам понадобится программа NotePad ++
важное условие при работе это кодировка, она должна быть UNIX

Команды updater-script
- assert -задается для каких моделей создано обновление;
- mount — монтирование (присоединение) разделов;
- umount — отсоединить раздел;
- package_extract_dir — копирует выбраню папку и заменяет собой аналогичную вместе с файлами;
- package_extract_file — копирует выбранный файл и заменяет собой аналогичный;
- format — форматирует прописанный раздел;
- delete — удаляет файл;
- delete_recursive — рекурсивное удаление, необходимо для удаления папок и их содержимого;
- run_program — запускает программу;
- set_perm — задает права для файла;
- set_perm_recursive — задает права для папки;
- symlink — создает жесткую ссылку — «симлинк» (ярлык для запуска);
- ui_print — вывод сообщения на экран.
Внимание! Программа Android +1 Updater Script
Вашему внимание проект сайта Android +1 — Android +1 Updater Script позволит правильно и очень быстро составить правильный скрипт, даже для пользователей с маленьким опытом!
Как узнать как задать правильные symlink в updater-script
Довольно популярный вопрос о том как узнать какие необходимо создать symlink в updater-script? Все очень просто для этого вам нужно либо компьютер с ADB или установленный терминал на Android. Перейдите в папки:
В каждой из этих папок наберите команду ls -l и вы получите список файлов и symlink.
Узнать список всех папок в System
Для того того чтобы узнать все папки которые есть в разделе /system , понадобиться набрать linux команду:
su
du -a system
После чего вам выдаст весь список папок в разделе.
Узнать все права, uid, gid и список файлов и папок
Для того чтобы узнать все права, uid, gid и список файлов и папок нужно задать следующую команду linux:
ls -alnR /system
Теперь перейдем как это выглядит в живую на примере…
Пример updater-script
(данный пример update-script для модели i9100 прошивка CyanogenMod 10.2)
для каких моделей:
assert(getprop(«ro.product.device») == «galaxys2» || getprop(«ro.build.product») == «galaxys2» ||
getprop(«ro.product.device») == «i9100» || getprop(«ro.build.product») == «i9100» ||
getprop(«ro.product.device») == «GT-I9100» || getprop(«ro.build.product») == «GT-I9100» ||
getprop(«ro.product.device») == «GT-I9100M» || getprop(«ro.build.product») == «GT-I9100M» ||
getprop(«ro.product.device») == «GT-I9100P» || getprop(«ro.build.product») == «GT-I9100P» ||
getprop(«ro.product.device») == «GT-I9100T» || getprop(«ro.build.product») == «GT-I9100T»);
монтирование раздела
mount(«ext4», «EMMC», «/dev/block/mmcblk0p9», «/system»);
копирование файла
package_extract_file(«system/bin/backuptool.sh», «/tmp/backuptool.sh»);
package_extract_file(«system/bin/backuptool.functions», «/tmp/backuptool.functions»);
задание прав для файла
set_perm(0, 0, 0777, «/tmp/backuptool.sh»);
set_perm(0, 0, 0644, «/tmp/backuptool.functions»);
запуск программы
отсоединить раздел
unmount(«/system»);
прогрессбар
show_progress(0.500000, 0);
форматирование заданного раздела
format(«ext4», «EMMC», «/dev/block/mmcblk0p9», «0», «/system»);
подсоединение раздела
mount(«ext4», «EMMC», «/dev/block/mmcblk0p9», «/system»);
копирование папки в выбранный раздел
package_extract_dir(«recovery», «/system»);
package_extract_dir(«system», «/system»);
создание симилнка
symlink(«/system/xbin/su», «/system/bin/su»);
symlink(«Roboto-Bold.ttf», «/system/fonts/DroidSans-Bold.ttf»);
symlink(«Roboto-Regular.ttf», «/system/fonts/DroidSans.ttf»);
symlink(«busybox», «/system/xbin/[«, «/system/xbin/[[«,
«/system/xbin/adjtimex», «/system/xbin/arp», «/system/xbin/ash»,
«/system/xbin/awk», «/system/xbin/base64», «/system/xbin/basename»,
«/system/xbin/bbconfig», «/system/xbin/blkid», «/system/xbin/blockdev»,
«/system/xbin/brctl», «/system/xbin/bunzip2», «/system/xbin/bzcat»,
«/system/xbin/bzip2», «/system/xbin/cal», «/system/xbin/cat»,
«/system/xbin/catv», «/system/xbin/chattr», «/system/xbin/chgrp»,
«/system/xbin/chmod», «/system/xbin/chown», «/system/xbin/chroot»,
«/system/xbin/clear», «/system/xbin/cmp», «/system/xbin/comm»,
«/system/xbin/cp», «/system/xbin/cpio», «/system/xbin/crond»,
«/system/xbin/crontab», «/system/xbin/cut», «/system/xbin/date»,
«/system/xbin/dc», «/system/xbin/dd», «/system/xbin/depmod»,
«/system/xbin/devmem», «/system/xbin/df», «/system/xbin/diff»,
«/system/xbin/dirname», «/system/xbin/dmesg», «/system/xbin/dnsd»,
«/system/xbin/dos2unix», «/system/xbin/du», «/system/xbin/echo»,
«/system/xbin/ed», «/system/xbin/egrep», «/system/xbin/env»,
«/system/xbin/expand», «/system/xbin/expr», «/system/xbin/false»,
«/system/xbin/fbsplash», «/system/xbin/fdisk», «/system/xbin/fgrep»,
«/system/xbin/find», «/system/xbin/flash_lock»,
«/system/xbin/flash_unlock», «/system/xbin/flashcp»,
«/system/xbin/flock», «/system/xbin/fold», «/system/xbin/free»,
«/system/xbin/freeramdisk», «/system/xbin/fstrim», «/system/xbin/fsync»,
«/system/xbin/ftpget», «/system/xbin/ftpput», «/system/xbin/fuser»,
«/system/xbin/getopt», «/system/xbin/grep», «/system/xbin/groups»,
«/system/xbin/gunzip», «/system/xbin/gzip», «/system/xbin/halt»,
«/system/xbin/head», «/system/xbin/hexdump», «/system/xbin/id»,
«/system/xbin/ifconfig», «/system/xbin/inetd», «/system/xbin/insmod»,
«/system/xbin/install», «/system/xbin/ionice», «/system/xbin/iostat»,
«/system/xbin/ip», «/system/xbin/kill», «/system/xbin/killall»,
«/system/xbin/killall5», «/system/xbin/less», «/system/xbin/ln»,
«/system/xbin/losetup», «/system/xbin/ls», «/system/xbin/lsattr»,
«/system/xbin/lsmod», «/system/xbin/lsusb», «/system/xbin/lzcat»,
«/system/xbin/lzma», «/system/xbin/lzop», «/system/xbin/lzopcat»,
«/system/xbin/man», «/system/xbin/md5sum», «/system/xbin/mesg»,
«/system/xbin/mkdir», «/system/xbin/mke2fs», «/system/xbin/mkfifo»,
«/system/xbin/mkfs.ext2», «/system/xbin/mkfs.vfat»,
«/system/xbin/mknod», «/system/xbin/mkswap», «/system/xbin/mktemp»,
«/system/xbin/modinfo», «/system/xbin/modprobe», «/system/xbin/more»,
«/system/xbin/mount», «/system/xbin/mountpoint», «/system/xbin/mpstat»,
«/system/xbin/mv», «/system/xbin/nanddump», «/system/xbin/nandwrite»,
«/system/xbin/nbd-client», «/system/xbin/netstat», «/system/xbin/nice»,
«/system/xbin/nohup», «/system/xbin/nslookup», «/system/xbin/ntpd»,
«/system/xbin/od», «/system/xbin/patch», «/system/xbin/pgrep»,
«/system/xbin/pidof», «/system/xbin/ping», «/system/xbin/pipe_progress»,
«/system/xbin/pkill», «/system/xbin/pmap», «/system/xbin/poweroff»,
«/system/xbin/printenv», «/system/xbin/printf», «/system/xbin/ps»,
«/system/xbin/pstree», «/system/xbin/pwd», «/system/xbin/pwdx»,
«/system/xbin/rdev», «/system/xbin/readlink», «/system/xbin/realpath»,
«/system/xbin/renice», «/system/xbin/reset», «/system/xbin/resize»,
«/system/xbin/rev», «/system/xbin/rm», «/system/xbin/rmdir»,
«/system/xbin/rmmod», «/system/xbin/route», «/system/xbin/run-parts»,
«/system/xbin/rx», «/system/xbin/sed», «/system/xbin/seq»,
«/system/xbin/setconsole», «/system/xbin/setserial»,
«/system/xbin/setsid», «/system/xbin/sh», «/system/xbin/sha1sum»,
«/system/xbin/sha256sum», «/system/xbin/sha3sum»,
«/system/xbin/sha512sum», «/system/xbin/sleep», «/system/xbin/sort»,
«/system/xbin/split», «/system/xbin/stat», «/system/xbin/strings»,
«/system/xbin/stty», «/system/xbin/sum», «/system/xbin/swapoff»,
«/system/xbin/swapon», «/system/xbin/sync», «/system/xbin/sysctl»,
«/system/xbin/tac», «/system/xbin/tail», «/system/xbin/tar»,
«/system/xbin/taskset», «/system/xbin/tee», «/system/xbin/telnet»,
«/system/xbin/telnetd», «/system/xbin/test», «/system/xbin/tftp»,
«/system/xbin/tftpd», «/system/xbin/time», «/system/xbin/timeout»,
«/system/xbin/top», «/system/xbin/touch», «/system/xbin/tr»,
«/system/xbin/traceroute», «/system/xbin/true», «/system/xbin/ttysize»,
«/system/xbin/tune2fs», «/system/xbin/umount», «/system/xbin/uname»,
«/system/xbin/uncompress», «/system/xbin/unexpand», «/system/xbin/uniq»,
«/system/xbin/unix2dos», «/system/xbin/unlzma», «/system/xbin/unlzop»,
«/system/xbin/unxz», «/system/xbin/unzip», «/system/xbin/uptime»,
«/system/xbin/usleep», «/system/xbin/uudecode», «/system/xbin/uuencode»,
«/system/xbin/vi», «/system/xbin/watch», «/system/xbin/wc»,
«/system/xbin/wget», «/system/xbin/which», «/system/xbin/whoami»,
«/system/xbin/xargs», «/system/xbin/xz», «/system/xbin/xzcat»,
«/system/xbin/yes»,
«/system/xbin/zcat»);
symlink(«libGLESv2.so», «/system/lib/libGLESv3.so»);
symlink(«logcat», «/system/bin/lolcat»);
symlink(«mksh», «/system/bin/sh»);
symlink(«mount.exfat», «/system/bin/fsck.exfat»,
«/system/bin/mkfs.exfat»);
symlink(«pigz», «/system/xbin/unpigz»);
symlink(«toolbox», «/system/bin/cat», «/system/bin/chcon»,
«/system/bin/chmod», «/system/bin/chown», «/system/bin/clear»,
«/system/bin/cmp», «/system/bin/cp», «/system/bin/date»,
«/system/bin/dd», «/system/bin/df», «/system/bin/dmesg»,
«/system/bin/du», «/system/bin/getenforce», «/system/bin/getevent»,
«/system/bin/getprop», «/system/bin/getsebool», «/system/bin/grep»,
«/system/bin/hd», «/system/bin/id», «/system/bin/ifconfig»,
«/system/bin/iftop», «/system/bin/insmod», «/system/bin/ioctl»,
«/system/bin/ionice», «/system/bin/kill», «/system/bin/ln»,
«/system/bin/load_policy», «/system/bin/log», «/system/bin/ls»,
«/system/bin/lsmod», «/system/bin/lsof», «/system/bin/md5»,
«/system/bin/mkdir», «/system/bin/mount», «/system/bin/mv»,
«/system/bin/nandread», «/system/bin/netstat»,
«/system/bin/newfs_msdos», «/system/bin/notify», «/system/bin/printenv»,
«/system/bin/ps», «/system/bin/r», «/system/bin/reboot»,
«/system/bin/renice», «/system/bin/restart», «/system/bin/restorecon»,
«/system/bin/rm», «/system/bin/rmdir», «/system/bin/rmmod»,
«/system/bin/route», «/system/bin/runcon», «/system/bin/schedtop»,
«/system/bin/sendevent», «/system/bin/setconsole»,
«/system/bin/setenforce», «/system/bin/setprop»,
«/system/bin/setsebool», «/system/bin/sleep», «/system/bin/smd»,
«/system/bin/start», «/system/bin/stop», «/system/bin/sync»,
«/system/bin/top», «/system/bin/touch», «/system/bin/umount»,
«/system/bin/uptime», «/system/bin/vmstat», «/system/bin/watchprops»,
«/system/bin/wipe»);
рекурсивное выставление прав папкам




