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. redis集群搭建注意事项

    官方教程:https://redis.io/docs/management/scaling/ 其他参考: https://note.youdao.com/ynoteshare/index.html?i ...

  2. Cesium被接入数字孪生系统后会发生怎样的改变?

    众所周知,Cesium凭借其开源免费的特点一直垄断着整个三维GIS的生态系统,但是随着数字孪生技术的发展以及各项新需求的不断涌现,Cesium与数字孪生系统相结合的潜力也逐渐凸显. 一般而言,Cesi ...

  3. Intellij IDE 对接SVN

    1.安装SVN(SVN安装包见附件) 注意安装时需要选择第二个选项进行安装 2.安装SVN中文包(见附件) 安装完成后随便找个文件夹右键确认SVN安装是否生效 3.Intellij IDE得Setti ...

  4. IIS通过ARR实现负载均衡

    一.实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访 ...

  5. Windows Server 2012 R2 远程桌面服务部署指南

    著作权归作者所有:来自51CTO博客作者mabofeng的原创作品,请联系作者获取转载授权,否则将追究法律责任 01-Windows Server 2012 R2 远程桌面服务部署指南文章来源:htt ...

  6. P9344 去年天气旧亭台 代码

    不带滚动数组代码: #include <iostream> #include <cstdio> #include <cstring> #define int lon ...

  7. 基于OpenCV的语音数据读取

      1)进入http://yuyin.baidu.com/app,在弹出的界面中单击要针对哪个应用开通语音识别服务,个人测试可全选 (开通个人认证,白嫖)     注意: 1.百度语音识别API对于要 ...

  8. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 10.控制台变量的用法 & 静态函数库 & 使用对象通道对碰撞进行控制

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文对应Lecture 15, 61 - Console Variables for debugging and ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题

    二.假设我们将球投入到b个箱子里,直到某个箱子中有两个球.每一次投掷都是独立的并且每个球落入任何箱子的机会均等.请问投球次数期望是多少? 文心一言: 这是一个典型的鸽巢原理(Pigeonhole Pr ...

  10. Blazor技术入门

    曾写过点儿前后端分离的项目(Vue+.NET Core Web API).WPF和WinForm.因为Blazor不支持小程序的原因(相对于uniapp),所以只是大概知道Blazor可以写Web.P ...