当前位置: 首页 > news >正文

大淘客做网站如何搭建自己的网站

大淘客做网站,如何搭建自己的网站,5g网络架构图,wordpress官方响应式主题在讲解Java类加载器的时候,我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径,来确定类是否存在的,假设我们执行的命令是这样的 java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\…

在讲解Java类加载器的时候,我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径,来确定类是否存在的,假设我们执行的命令是这样的

java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\spring-boot-loader.jar  com.keyniu.dis.cl.TestLoad

如果我们代码里使用了org.springframework.boot.loader.launch.Archive,我们的类加载器会依次尝试在每个ClassPath下每个元素

  1. D:\DiveInSpring\target\classes,查找org/springframework/boot/loader/launch/Archive.class
  2. C:\lib\spring-expression.jar,查找org/springframework/boot/loader/launch/Archive.class
  3. C:\lib\spring-boot-loader.jar,查找org/springframework/boot/loader/launch/Archive.class

一个复杂的大型项目依赖几十个上百个第三方jar是很常见的,总是这么查找显然是极其低效的。改善这类低效的顺序查找的方法,最常见的就是创建索引,就像MySQL为表建立索引,Java提供了JarIndex用来表示对Jar文件的索引。

1. 查看索引

使用jar命令打包的时候,如果需要建立索引,会创建一个META-INF/INDEX.LIST文件,我们来看看这个文件的结构

  1. 在开头指定JarIndex的版本,独立一段,段和段之间用空行分隔
  2. 每个jar文件独立一段,下面跟踪这个jar下的目录(包)

这是TestJarIndex-1.0-SNAPSHOT.jar是我们的应用代码,lib/commons-lang3-3.12.0.jar是我们的第三方依赖

JarIndex-Version: 1.0TestJarIndex-1.0-SNAPSHOT.jar
META-INF
META-INF/maven
META-INF/maven/org.keyniu
META-INF/maven/org.keyniu/TestJarIndex
org
org/keyniulib/commons-lang3-3.12.0.jar
...
org
org/apache
org/apache/commons
org/apache/commons/lang3
org/apache/commons/lang3/arch

2. 构建索引

执行jar打包时默认并不会创建META-INF/INDEX.LIST文件,我们需要在jar命令后添加-i选项

jar cvf TestJarIndex-1.0-SNAPSHOT.jar -i -C path/to/classes .

企业级应用中我们基本不可能使用原始的jar命令来打包,所以这里我们将重点放在Maven上。maven-jar-plugin插件通过index标签来支持-i选项

  1. index=true,生成META-INF/INDEX.LIST文件
  2. addClassPath=true,生成MANIFEST.MF的Class-Path属性,同时INDEX.LIST包含第三方jar的索引
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><index>true</index>                        <!-- 添加 jar -i选项 --><manifest><addClasspath>true</addClasspath> <!--MANIFEST.MF添加Class-Path属性,INDEX.LIST包含第3方依赖--><classpathPrefix>lib/</classpathPrefix> <!-- 第3方jar的路径前缀 --><mainClass>com.keyniu.Main</mainClass></manifest></archive></configuration></plugin></plugins>
</build>

生成的结果就是我们上一节查看索引展示的内容,接下来我们来看看我们怎么利用META-INF/INDEX.LIST来加快查找过程。

3. 使用索引

JarIndex定义在java.base/jdk.internal.util.jar中,要想正常使用,需要的IDEA的Run Configuration中先做模块导出

在Maven的编译插件中,做同样的导出

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><fork>true</fork><compilerArgs><arg>--add-exports</arg><arg>java.base/jdk.internal.util.jar=ALL-UNNAMED</arg></compilerArgs></configuration>
</plugin>
1. 核心API

现在我们可以正常的使用JarIndex了,JarIndex的核心方法只有这6个,分别是:

  1. read/write分别用来读取和写入INDEX.LIST文件的内容
  2. merge用于将另一个JarIndex的内容合并进当前JarIndex
  3. add用于将一个类/包和指定jar文件名关联
  4. getJarFiles用于获取JarIndex关联的所有jar文件名,即INDEX.LIST出现的所用jar文件名

2. 构建JarIndex

通过JarFile创建JarIndex对象的实例

public static void main(String[] args) throws IOException {String jarFileName = "D:\\Workspace\\TestJarIndex\\target\\TestJarIndex-1.0-SNAPSHOT.jar";String className = "org/keyniu/Main.class";JarFile jarFile = new JarFile(jarFileName);Manifest manifest = jarFile.getManifest();JarIndex jarIndex = JarIndex.getJarIndex(jarFile);
}
3. 输出INDEX.LIST

现在我们已经有JarIndex实例了,要输出INDEX.LIST只需要调用JarIndex.write(OutputStream),这里我们将它输出到控制台

4. 输出关联Jar名称

通过JarIndex.getJarFiles()获取所有关联的jar名称

5. 读取类所属的Jar

通过JarIndex.get(className)获取这个类所属的jar,这个方法才是我们最关心的核心方法。

http://www.mmbaike.com/news/107056.html

相关文章:

  • 视频网站 阿里云常德seo公司
  • 做企业宣传网站网站搭建步骤
  • 英铭广州网站建设市场调研与分析
  • 印刷做网站网上接单优化大师怎么样
  • 做分析图的地图网站友情链接互换网站
  • b站网页入口免费不收费全网模板建站系统
  • 自己如何搭建网站自助建站系统代理
  • 玉田网站设计公司石家庄seo推广公司
  • 河北省城乡住房和城乡建设厅网站微友圈推广平台怎么加入
  • 软件开发项目管理系统深圳seo外包公司
  • 公司做网站需要什么资料怎么把产品推广到各大平台
  • 各类手机网站建设新闻最近新闻10条
  • 做视频网站用什么格式好购买网站域名
  • 云服务器做网站一般配置刷赞网站推广空间免费
  • 网站表单宣传软文
  • 利用网站做蜘蛛池网络营销课程总结1500字
  • 做网站的软件高级搜索技巧
  • 游戏网站平台怎么做的站长之家域名查询鹿少女
  • 目前做的最好的电子烟网站全网营销推广靠谱吗
  • 怎么做网站流量百度一下首页百度一下知道
  • 如何用VS2017做网站seo流量排名工具
  • 阳谷网站开发赣州网站建设
  • 网页设计实训总结800字汕头网站快速优化排名
  • 产业互联网公司排名西安搜索引擎优化
  • 闸北区网站建设百度快照推广
  • 网站模板大小全网seo优化电话
  • 做网站需要填什么营销策划经典案例
  • 做网站推广需要多少费用广告联盟推广
  • 网站设计顺德百度问答下载安装
  • 用vs做网站如何连接数据库谷歌浏览器手机版免费官方下载