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属性的一般步骤:

  1. 打开项目的pom.xml文件。

  2. 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-Class

      When an agent is specified at JVM launch time this attribute specifies the agent class. That is, the class containing the premain method. 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-Class

      If 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 agentmain method. 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-Path

      A 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-Classes

      Boolean (true or false, case irrelevant). Is the ability to redefine classes needed by this agent. Values other than true are considered false. This attribute is optional, the default is false.

    • Can-Retransform-Classes

      Boolean (true or false, case irrelevant). Is the ability to retransform classes needed by this agent. Values other than true are considered false. This attribute is optional, the default is false.

    • Can-Set-Native-Method-Prefix

      Boolean (true or false, case irrelevant). Is the ability to set native method prefix needed by this agent. Values other than true are considered false. This attribute is optional, the default is false.

    An agent JAR file may have both the Premain-Class and Agent-Class attributes present in the manifest. When the agent is started on the command-line using the -javaagent option then the Premain-Class attribute specifies the name of the agent class and the Agent-Class attribute is ignored. Similarly, if the agent is started sometime after the VM has started, then the Agent-Class attribute specifies the name of the agent class (the value of Premain-Class attribute is ignored).

  3. 保存pom.xml文件。

  4. 使用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中?的更多相关文章

  1. build path libraries java基础--Jar包添加到build path方式说明--01

    摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...

  2. 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

    原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...

  3. 将一个jar包放到linux下定时执行

    将一个jar包放到linux下定时执行 1.在dbtodb文件夹下新建一个dbtodb.sh,脚本内容为: #!/bin/bash cd /usr/dbtodb/ java -jar dbtodb.j ...

  4. IDEA中将WEB-INF\lib下的Jar包添加到项目中

    打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S]左侧选中Modules,在Dependecies中,点击右侧“+”号,选择JARS or directorie ...

  5. 从jar包还原出java源码(项目文件)

    原文转载至:https://blog.csdn.net/mxmxz/article/details/73043156 上周接到个新任务,一个遗留的接口工程需要改造,然而根据前任开发留下的文档看,这个工 ...

  6. maven 将jar包添加到本地仓库

      maven  如何将jar包添加到本地仓库 CreateTime--2018年4月19日12:50:50 Author:Marydon 情景描述:当项目所需的jar包,maven中央仓库中没有该j ...

  7. maven 如何将自己的jar包添加到本地仓库

    1 准备一个需要添加到本地仓库的jar包 我这里准备了一个名为mail.jar 的jar包,放到E:\Install Files目录下面 2 下面演示如何将准备的jar包添加到本地仓库 1 语法 mv ...

  8. IDEA:将WEB-INF\lib下的Jar包添加到项目中

    打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S] 左侧选中Modules,在Dependecies中,点击右侧"+"号,选择JARS or ...

  9. 本地jar包添加至Maven仓库

    Maven命令将本地的jar包方放到maven仓库中 //自定义本地的jar包在pom文件的参数 <dependency> <groupId>com.eee</group ...

  10. springboot使用jar包方式启动,找不到resources目录中的配置文件(运行时)FileNotFoundException

    将springboot项目打包成jar包,使用 java -jar jar包进行启动,富文本框使用ckeditor+ckfinder: 因为ckfinder自定义配置文件了,上传图片时出现了异常 De ...

随机推荐

  1. LeetCode5716:好因子的最大数目(数学、快速幂)

    解题思路:因为primeFactors比较大,所以需要使用快速幂. class Solution: def quick_pow(self,base,x): ans = 1 while x>0: ...

  2. MyBatisPlus配置类-配置分页插件,注册为bean对象

    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.a ...

  3. shell的变量

    变量含义 学生时代所学的数学方程式,如x=1,y=2,那会称之为x,y是未知数 对于计算机角度,x=1,y=2等于定义了两个变量,名字分别是x,y,且赋值了1和2 变量是暂时存储数据的地方,变量临时存 ...

  4. CTFHub SSRF Redis协议 WriteUp

    CTFHub SSRF Redis协议 进入环境,可以看到url格式为: http://challenge-2c082607df3fa433.sandbox.ctfhub.com:10800/?url ...

  5. Java播放MP3播放音频

    Java播放MP3播放音频 下面我演示用jdk自带包.框架等分别展示播放mp3.等music 一.使用javafx包 AudioClip 注意jdk11以上剥离了javafx public stati ...

  6. 你真的会用 npx 吗❓❓❓

    Hello,大家好! 日常开发中大家应该经常使用 npm install xxx 来安装包依赖,那是否注意到npm升级到 npm@5.2.0 之后,在 npm 二进制命令旁边安装了一个 npx 二进制 ...

  7. POJ 3537 Crosses and Crosses 博弈论 SG函数 记忆化搜索

    原题链接 题意 两人在一个长为n * 1的棋盘上下棋,两人持相同棋子,如果某人下完之后,棋盘上有三个棋子相连,则此人获胜.给出n,求是否先手必胜. 思路 一开始分析成了最少取3个,最多取5个的巴什博弈 ...

  8. 微信小程序中业务域名的配置

    需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载 业务域名的证书 2,将下载的证书放进nginx的根目录 3,在nginx中 (root为.txt的地址)

  9. 保姆级教程:带你体验华为云测试计划CodeArts TestPlan

    摘要:华为云测试计划(CodeArts TestPlan)是面向软件开发者提供的一站式云端测试平台,覆盖测试管理.接口测试,融入DevOps敏捷测试理念,帮助您高效管理测试活动,保障产品高质量交付. ...

  10. 数据库的两个好帮手:pagehack和pg_xlogdump

    摘要:pagehack和pg_xlogdump可以帮助我们在数据库故障定位中,解析各种文件的页面头和xlog日志. 随着技术的演进,数据也发生了巨大的变化,数据规模越来愈大.数据种类呈现多样性,数据处 ...