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

使用Maven打包javaagent.jar

1、简介

        javaagent 是 Java1.5 之后引入的新特性,其主要作用是在class被加载之前对其拦截,以插入我们的字节码。

java1.5 之前使用的是JVMTI(jvm tool interface)技术来实现对class的拦截,不过这个是用 C++ 编写的,比如 debug 功能就是用这个技术实现的。

2、jar包

常见的jar包分为 可运行jar 和 javaagent.jar ,它们的主要区别如下:

Executable JarJavaagent Jar
入口方法mainpremain
打包参数Main-ClassPremain-Class
启动方式java -jar xxx.jar-javaagent:xxx.jar=dddd
是否可启动

 3、可运行 jar 包

入口方法

package com.ybw;
public class TestMain {// 这个是我们经常写的public static void main(String[] args) {System.out.println("hello main");}
}

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ybw</groupId><artifactId>test-main</artifactId><version>1.0.0</version><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version><configuration><archive><!--指定 Main-Class 来指定可运行 jar 的主类 --><manifest><mainClass>com.ybw.TestMain</mainClass></manifest></archive></configuration></plugin></plugins></build></project>

 打包jar

mvn package

打包后会生成 target文件,并且生成 jar 包。 

4、javaagent.jar

入口方法

package com.ybw;import java.lang.instrument.Instrumentation;public class TestAgent {public static void premain(String arg, Instrumentation instrumentation) {System.out.println("javaagent arg=" + arg);}
}

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ybw</groupId><artifactId>agent-demo</artifactId><version>1.0.0</version><name>agent-demo</name><description>agent-demo</description><properties><java.version>21</java.version></properties><dependencies></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version><configuration><archive><!--方法一:MANIFEST.MF 配置文件--><!--<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>--><!--方法二: pom 指定配置--><manifestEntries><Premain-Class>com.ybw.TestAgent</Premain-Class></manifestEntries></archive></configuration></plugin></plugins></build></project>

 打包jar

mvn package

打包后会生成 target文件,并且生成 jar 包。 

5、执行 

        两个项目执行了 package 之后,把 target\agent-demo-1.0.0.jar 和 target\test-main-1.0.0.jar移动到同一个文件夹下。然后执行命令

$ c:/jdk21/bin/java  -javaagent:agent-demo-1.0.0.jar=test  -jar test-main-1.0.0.jar
javaagent arg=test
hello main

http://www.lryc.cn/news/506980.html

相关文章:

  • R语言混合模型回归GBTM群组轨迹模型绘图可视化研究
  • 【毕业设计】A079-基于Java的影院订票系统的设计与实现
  • Vue.js前端框架教程11:Vue监听器watch和watchEffect
  • 疾风大模型气象系统:精准预报,引领未来
  • U9应收单拉单生成时找不到退货单
  • 设计模式--单例模式【创建型模式】
  • 挑战一个月基本掌握C++(第七天)了解指针,引用,时间,输入输出,结构体,vector容器,数据结构 - 通用完结
  • 百度面试手撕 go context channel部分学习
  • Spring事务管理详解
  • 社区版 IDEA 开发webapp 配置tomcat
  • 打 印 菱 形
  • ffmpeg翻页转场动效的安装及使用
  • [RocketMQ] 发送重试机制与消费重试机制~
  • 基于Redis的网关鉴权方案与性能优化
  • 计算机网络-L2TP VPN基础概念与原理
  • Node.js day-01
  • vue el-dialog实现可拖拉
  • go配置文件
  • C++ OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制)
  • 项目搭建+删除(单/批)
  • 《小米创业思考》
  • 多种注意力机制详解及其源码
  • VMWare 的克隆操作
  • Y3编辑器教程7:界面编辑器
  • 「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
  • run postinstall error, please remove node_modules before retry!
  • 详细解读TISAX认证的意义
  • 【开源项目】数字孪生轨道~经典开源项目数字孪生智慧轨道——开源工程及源码
  • 云原生是什么
  • 买卖股票的最佳时机 IV - 困难