java包装

Java JAR provides option to seal the package. Java jar seal package means that if any program is using that jar then all the classes should be loaded from that jar itself. Any attempt to load the classes from other jar files will throw java.lang.SecurityException. The documentation for sealing jar packages seems confusing, so we will learn this feature with sample programs.

Java JAR提供了密封包装的选项。 Java jar密封包意味着,如果任何程序正在使用该jar,则应从该jar本身加载所有类。 从其他jar文件加载类的任何尝试都会抛出java.lang.SecurityException 。 密封罐包装的文档似乎令人困惑,因此我们将通过示例程序学习此功能。

Java罐密封包装 (Java jar seal packages)

For effect of jar package sealing, we need at least two jar files to use in a test program. Below image shows two java project I have with same package names but with different classes.

为了使罐包装密封,在测试程序中至少需要两个罐文件。 下图显示了两个Java项目,它们具有相同的程序包名称,但具有不同的类。

Read following posts to know how to create jar from java classes and how to run jar file in java.

阅读以下文章,以了解如何从Java类创建jar以及如何在Java中运行jar文件 。

For sealing packages in a jar, we need to add it’s entries in jar manifest file. So I have the manifest file with following content.

为了将包装密封在罐中,我们需要在罐清单文件中添加其条目。 因此,我具有以下内容的清单文件。

manifest.txt

manifest.txt

Name: com.jd.seal
Sealed: true

Now I run following commands in both projects to generate two jar files with above manifest entry.

现在,我在两个项目中都运行以下命令,以生成具有上述清单条目的两个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密封包效果 (Java jar seal packages effect)

Now I will write a sample program that will use both these jar files to show the effect of java jar sealing.

现在,我将编写一个示例程序,将使用这两个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();}
}

So MyClass is trying to load class A from jar file seal1.jar and class B from seal2.jar. Let’s try to compile and run this class and see what happens.

因此, MyClass尝试从jar文件seal1.jar加载类A,并从seal2.jar加载类B。 让我们尝试编译并运行该类,看看会发生什么。

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 sealedat 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)

As you can see that it throws java.lang.SecurityException at runtime with error message as “package is sealed“.

如您所见,它在运行时抛出java.lang.SecurityException ,并带有错误消息,如“ package sealed ”。

Jar package sealing helps us in making sure that all the classes are loaded from same version of jar file.

Jar包密封有助于我们确保从同一版本的jar文件中加载所有类。

Tip: If you want all the packages of a jar file to be sealed, you can just add entry for Sealed as true. To exclude any package from sealing, you can add an extra entry with Sealed as false.

提示 :如果要密封jar文件的所有软件包,则只​​需将Sealed的条目添加为true。 要从密封中排除任何包装,您可以添加额外的条目,将Sealed设置为false。

MANIFEST.MF

MANIFEST.MF

Sealed: trueName: com.jd.util
Sealed: false

That’s all about java jar sealing packages.

这就是关于Java jar密封包的全部内容。

Reference: Oracle Doc

参考: Oracle文档

翻译自: https://www.journaldev.com/1347/java-jar-seal-packages

java包装

java包装_Java罐密封包装相关推荐

  1. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  2. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  3. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  4. 模拟根据后端返回列表数据,先包装成树结构,包装路由数据格式。

    1.后端接口返回的数据格式 dataList: [{ id: 2, pid: 0, path: "/course", name: "Course", title ...

  5. 包装计算机辅助设计软件,包装设计专业计算机辅助设计课程体系研究

    包装设计专业计算机辅助设计课程体系研究 Update:2012-07-25 柯胜海,湖南工业大学 来源: <装饰>杂志2012年第5期 内容摘要 为凸显包装设计专业人才培养的优势,湖南工业 ...

  6. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  7. java包装_Java基础之神奇的包装类(一)

    1. 导读 JAVA中针对八种基本数据类型提供了相对应的包装类, 今天主要基于几个问题来分享下个人对于包装类的理解, 本期先分享下面两个问题: .1 什么是包装类? 有了基本类型, 为什么还需要有包装 ...

  8. java八种包装_Java的八种基本数据类型及其包装类

    Java有八种基本数据类型,所谓基本类型就是说存储时仅存在栈中,那么与之相对就是引用类型,引用类型既存在栈里又存在堆里,栈内存放堆内地址. 八种基本类型分别为byte short int long f ...

  9. java开发怎么包装_Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

最新文章

  1. Windows Phone开发(41):漫谈关键帧动画之下篇
  2. Oracle统计信息不准(谓词越界)造成的性能问题
  3. 在Apache上隐藏服务器签名的方法
  4. 极客学院 git教程
  5. 【目录】Python 入门基础篇 <(^-^)>
  6. np.newaxis——np.ndarray增加维数
  7. java面向对象:异常处理 —(18)
  8. Android应用开发——onStop的调用时机
  9. matlab中计算不等式的解,大神们,求个解多元一次不等式的代码,要所有整数解...
  10. linux服务器做页面,linux服务器搭建在线预览环境
  11. 人生不可能完美因此我们要学会讲究着过
  12. Java简单项目:家庭记账系统
  13. pytohn 操作excel表格常用模块 xlwt xlsxwriter
  14. 视频号怎么吸引眼球,视频号内容如何吸引用户观看:国仁网络资讯
  15. 三火龙加身战无不胜 TES国际首秀告捷
  16. python 抽奖 完全公平的随机数算法_抽奖 随机数
  17. TP5——workerman在线客服
  18. 分支语句与循环语句(二)
  19. poll, ppoll
  20. c#上位机开发(三)——简易串口发送数据

热门文章

  1. 设计模式——代理模式与装饰模式的异同
  2. Perl 学习笔记-输入输出
  3. mysql 8.0以上重置密码
  4. [转载] python json unicode utf-8处理总结
  5. [转载] 由swap引出的java中参数严格值传递问题
  6. 得先好好研究一数据库
  7. Echo团队Alpha冲刺随笔 - 第六天
  8. bzoj2257瓶子与燃料——最大公约数
  9. C# AE 对图层筛选要素后显示/只显示符合条件的要素
  10. JavaScript 函数(方法)的封装技巧要领及其重要性