打包jar包的时候 ,有一个文件夹叫 META-INF/MANIFEST.MF 这个文件里保存一些该jar包的信息. 我们javaagent的相关信息也保存在这个文件中.
还有一个很重要的问题是里面有一个字段叫Class-Path 可以设置调用的jar包路径, 改路径可以写相对路径 , 也就是相对于该jar包的路径
有多个jar包 可以用空格分开 每行内容不能超过70字符
MANIFEST.MF文件可以由maven生成 , 需要在pom文件中设置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<!--自动添加META-INF/MANIFEST.MF -->
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Premain-Class>org.agent.Agent</Premain-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
<Class-Path>lib/javassist-3.9.0.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
生成的文件内容如下:
Manifest-Version: 1.0
Premain-Class: org.agent.Agent
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Class-Path: lib/javassist-3.9.0.jar
Build-Jdk-Spec: 1.8
Created-By: Maven JAR Plugin 3.2.2
参数介绍:
Premain-Class :包含 premain 方法的类(类的全路径名)
Agent-Class :包含 agentmain 方法的类(类的全路径名)
Boot-Class-Path :设置引导类加载器搜索的路径列表。查找类的特定于平台的机制失败后,引导类加载器会搜索这些路径。按列出的顺序搜索路径。列表中的路径由一个或多个空格分开。路径使用分层 URI 的路径组件语法。如果该路径以斜杠字符(“/”)开头,则为绝对路径,否则为相对路径。相对路径根据代理 JAR 文件的绝对路径解析。忽略格式不正确的路径和不存在的路径。如果代理是在 VM 启动之后某一时刻启动的,则忽略不表示 JAR 文件的路径。(可选)
Can-Redefine-Classes :true表示能重定义此代理所需的类,默认值为 false(可选)
Can-Retransform-Classes :true 表示能重转换此代理所需的类,默认值为 false (可选)
Can-Set-Native-Method-Prefix: true表示能设置此代理所需的本机方法前缀,默认值为 false(可选)
即在该文件中主要定义了程序运行相关的配置信息,程序运行前会先检测该文件中的配置项。