如何将一个JAR包添加到Java应用程序的Boot Classpath中?
1. 在启动脚本中使用-bootstrap或-Xbootclasspath选项
这两个选项的使用方式如下:
-bootstrap选项:java -bootstrap /path/to/your.jar -cp /path/to/your/app.jar YourMainClass
-Xbootclasspath选项:java -Xbootclasspath/a:/path/to/your.jar -cp /path/to/your/app.jar YourMainClass
请注意,-bootstrap选项在某些Java版本中可能不受支持,而-Xbootclasspath选项通常在大多数Java虚拟机中可用。
2. 通过manifest file(jar包META-INF/MANIFEST.MF目录下)中的Boot-Class-Path属性实现
Maven项目中,您可以通过使用maven-jar-plugin插件来配置JAR文件的Manifest属性。下面是如何配置Manifest属性的一般步骤:
打开项目的
pom.xml文件。在
build元素下,添加plugins元素,如果尚不存在的话。然后在plugins元素内部配置maven-jar-plugin插件。示例如下:<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifestEntries>
<Premain-Class>com.br.prometheus.SPSExporter</Premain-Class>
<Boot-Class-Path>${project.build.finalName}.jar</Boot-Class-Path>
<Can-Redefine-Classes>false</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
<Can-Set-Native-Method-Prefix>false</Can-Set-Native-Method-Prefix>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 其他插件配置 -->
</plugins>
</build>
在上面的示例中,我们配置了
maven-jar-plugin插件,并在<manifestEntries>元素下添加了一些属性。其中:Manifest Attributes
The following manifest attributes are defined for an agent JAR file:
Premain-ClassWhen an agent is specified at JVM launch time this attribute specifies the agent class. That is, the class containing the
premainmethod. When an agent is specified at JVM launch time this attribute is required. If the attribute is not present the JVM will abort. Note: this is a class name, not a file name or path.Agent-ClassIf an implementation supports a mechanism to start agents sometime after the VM has started then this attribute specifies the agent class. That is, the class containing the
agentmainmethod. This attribute is required, if it is not present the agent will not be started. Note: this is a class name, not a file name or path.Boot-Class-PathA list of paths to be searched by the bootstrap class loader. Paths represent directories or libraries (commonly referred to as JAR or zip libraries on many platforms). These paths are searched by the bootstrap class loader after the platform specific mechanisms of locating a class have failed. Paths are searched in the order listed. Paths in the list are separated by one or more spaces. A path takes the syntax of the path component of a hierarchical URI. The path is absolute if it begins with a slash character ('/'), otherwise it is relative. A relative path is resolved against the absolute path of the agent JAR file. Malformed and non-existent paths are ignored. When an agent is started sometime after the VM has started then paths that do not represent a JAR file are ignored. This attribute is optional.
Can-Redefine-ClassesBoolean (
trueorfalse, case irrelevant). Is the ability to redefine classes needed by this agent. Values other thantrueare consideredfalse. This attribute is optional, the default isfalse.Can-Retransform-ClassesBoolean (
trueorfalse, case irrelevant). Is the ability to retransform classes needed by this agent. Values other thantrueare consideredfalse. This attribute is optional, the default isfalse.Can-Set-Native-Method-PrefixBoolean (
trueorfalse, case irrelevant). Is the ability to set native method prefix needed by this agent. Values other thantrueare consideredfalse. This attribute is optional, the default isfalse.
An agent JAR file may have both the
Premain-ClassandAgent-Classattributes present in the manifest. When the agent is started on the command-line using the-javaagentoption then thePremain-Classattribute specifies the name of the agent class and theAgent-Classattribute is ignored. Similarly, if the agent is started sometime after the VM has started, then theAgent-Classattribute specifies the name of the agent class (the value ofPremain-Classattribute is ignored).保存
pom.xml文件。使用Maven命令构建项目。您可以运行以下命令来生成包含指定Manifest属性的JAR文件:
mvn clean package
这将生成一个JAR文件,其中包含了配置的Manifest属性。
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: mingming.chen
Build-Jdk: 1.8.0_211
Boot-Class-Path: sps_exporter.jar
Can-Redefine-Classes: false
Can-Retransform-Classes: true
Can-Set-Native-Method-Prefix: false
Premain-Class: com.br.prometheus.SPSExporter
通过这种方式,您可以方便地配置JAR文件的Manifest属性,包括类路径、主类和其他自定义属性。请根据您的项目需求进行相应的配置。
通过以上方式java agent可以字节码修改jdk中的类
如何将一个JAR包添加到Java应用程序的Boot Classpath中?的更多相关文章
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- 将一个jar包放到linux下定时执行
将一个jar包放到linux下定时执行 1.在dbtodb文件夹下新建一个dbtodb.sh,脚本内容为: #!/bin/bash cd /usr/dbtodb/ java -jar dbtodb.j ...
- IDEA中将WEB-INF\lib下的Jar包添加到项目中
打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S]左侧选中Modules,在Dependecies中,点击右侧“+”号,选择JARS or directorie ...
- 从jar包还原出java源码(项目文件)
原文转载至:https://blog.csdn.net/mxmxz/article/details/73043156 上周接到个新任务,一个遗留的接口工程需要改造,然而根据前任开发留下的文档看,这个工 ...
- maven 将jar包添加到本地仓库
maven 如何将jar包添加到本地仓库 CreateTime--2018年4月19日12:50:50 Author:Marydon 情景描述:当项目所需的jar包,maven中央仓库中没有该j ...
- maven 如何将自己的jar包添加到本地仓库
1 准备一个需要添加到本地仓库的jar包 我这里准备了一个名为mail.jar 的jar包,放到E:\Install Files目录下面 2 下面演示如何将准备的jar包添加到本地仓库 1 语法 mv ...
- IDEA:将WEB-INF\lib下的Jar包添加到项目中
打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S] 左侧选中Modules,在Dependecies中,点击右侧"+"号,选择JARS or ...
- 本地jar包添加至Maven仓库
Maven命令将本地的jar包方放到maven仓库中 //自定义本地的jar包在pom文件的参数 <dependency> <groupId>com.eee</group ...
- springboot使用jar包方式启动,找不到resources目录中的配置文件(运行时)FileNotFoundException
将springboot项目打包成jar包,使用 java -jar jar包进行启动,富文本框使用ckeditor+ckfinder: 因为ckfinder自定义配置文件了,上传图片时出现了异常 De ...
随机推荐
- vivo 容器平台资源运营实践
作者:vivo 互联网服务器团队 - Chen Han 容器平台针对业务资源申请值偏大的运营问题,通过静态超卖和动态超卖两种技术方案,使业务资源申请值趋于合理化,提高平台资源装箱率和资源利用率. 一. ...
- 文心一言 VS 讯飞星火 VS chatgpt (163)-- 算法导论13.1 3题
三.用go语言,定义一棵松弛红黑树(relaxed red-black tree)为满足红黑性质 1.3.4 和5的二叉搜索树.换句话说,根结点可以是红色或是黑色.考虑一棵根结点为红色的松弛红黑树 T ...
- 从零玩转七牛云之CDN-qiniuyunzhicdn
title: 从零玩转七牛云之CDN date: 2022-03-27 19:14:43.036 updated: 2022-04-10 14:13:27.322 url: https://www.y ...
- select/poll/epoll 优缺点比较
校招应届生简历中,有一个 C++ 项目出现的频率非常高... select 1024 fd 限制(可修改,麻烦) 需要遍历才知道哪些 fd ready 副作用:修改传入 fd_set,每次需要重新赋值 ...
- shared_ptr 自定义 deleter 删除器
一些结论 如果 shared_ptr 管理的资源不是 new 分配的内存,才考虑自定义删除器,这也是为什么 make_shared 不支持自定义删除器的原因,因为 make_shared 就是通过 n ...
- 文心一言 VS 讯飞星火 VS chatgpt (55)-- 算法导论6.3 1题
文心一言 VS 讯飞星火 VS chatgpt (55)-- 算法导论6.3 1题 一.参照图6-3 的方法,说明 BUILD-MAX-HEAP在数组 A=(5,3,17,10,84,19,6,22, ...
- C# 创建Excel气泡图
气泡图(Bubble Chart)是可用于展示三个变量之间的关系.通过绘制x 值, y 值和大小值即可确定图表中气泡的坐标及大小.下面通过后端C#代码及VB.NET代码展示如何来实现在Excel中创建 ...
- C++篇:第十三章_异常_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 十三.异常 ① 函数指针与该指针所指的函数必须具有一致的noexcept异常说明 ...
- Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越
本文分享自华为云社区<Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越>,作者: GaussDB 数据库 . 1.引言 在很多业务场景下,数据库应 ...
- 浅析AIGC for MMKG
摘要:AIGC和多模态知识图谱(MMKG)中的知识获取又是怎么实现的呢?他们之间有什么关联呢? 本文分享自华为云社区<GPT-4发布,AIGC时代的多模态还能走多远?系列之四 AIGC for ...