Рубрики
Без рубрики

Пакеты с печатью Java jar

Пакеты с печатью Java jar, файл манифеста java jar запечатан верно, java.lang.Исключение безопасности: нарушение герметизации: упаковка запечатана, как запечатать пакеты с банками.

Автор оригинала: Pankaj Kumar.

Java JAR предоставляет возможность запечатать пакет. Пакет Java jar seal означает, что если какая-либо программа использует эту банку, то все классы должны быть загружены из самой этой банки. Любая попытка загрузить классы из других файлов jar приведет к появлению java.lang.Исключение безопасности . Документация по запечатыванию упаковок банок кажется запутанной, поэтому мы изучим эту функцию с помощью примеров программ.

Пакеты с печатью Java jar

Для эффекта герметизации упаковки jar нам нужно, по крайней мере, два файла jar для использования в тестовой программе. На рисунке ниже показаны два моих java-проекта с одинаковыми именами пакетов, но с разными классами.

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

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

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

Name: com.jd.seal
Sealed: true

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

pankaj@JD:~/CODE/seal1/bin$ jar cvmf manifest.txt seal1.jar com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/jd/(in = 0) (out= 0)(stored 0%)
adding: com/jd/seal/(in = 0) (out= 0)(stored 0%)
adding: com/jd/seal/A.class(in = 419) (out= 299)(deflated 28%)
pankaj@JD:~/CODE/seal1/bin$ cd ../../seal2/bin
pankaj@JD:~/CODE/seal2/bin$ jar cvmf manifest.txt seal2.jar com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/jd/(in = 0) (out= 0)(stored 0%)
adding: com/jd/seal/(in = 0) (out= 0)(stored 0%)
adding: com/jd/seal/B.class(in = 419) (out= 299)(deflated 28%)

Эффект запечатывания пакетов Java jar

Теперь я напишу пример программы, которая будет использовать оба этих файла jar, чтобы показать эффект герметизации java jar.

import com.jd.seal.A;
import com.jd.seal.B;

public class MyClass{

	public static void main(String args[]){
	
		A a = new A();
		B b = new B();
	
	}
}

Итак Мой класс пытается загрузить класс A из файла jar seal1.jar и класс В от seal2.jar. Давайте попробуем скомпилировать и запустить этот класс и посмотрим, что произойдет.

pankaj@JD:~/tmp$ javac -cp seal1.jar:seal2.jar MyClass.java 
pankaj@JD:~/tmp$ java -cp seal1.jar:seal2.jar:. MyClass
A class loaded
Exception in thread "main" java.lang.SecurityException: sealing violation: package com.jd.seal is sealed
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:234)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at MyClass.main(MyClass.java:9)

Как вы можете видеть, он выдает java.lang.Исключение SecurityException во время выполнения с сообщением об ошибке ” пакет запечатан “.

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

Совет : Если вы хотите, чтобы все пакеты файла jar были запечатаны, вы можете просто добавить запись для Запечатанного как true. Чтобы исключить запечатывание любой упаковки, вы можете добавить дополнительную запись с надписью “Запечатано как ложь”.

Совет ||: Если вы хотите, чтобы все пакеты файла jar были запечатаны, вы можете просто добавить запись для Запечатанного как true. Чтобы исключить запечатывание любой упаковки, вы можете добавить дополнительную запись с надписью “Запечатано как ложь”.

Sealed: true

Name: com.jd.util
Sealed: false

Это все о запечатывании пакетов java jar.

Ссылка: Документация Oracle