jar的MANIFEST.MF配置Class-Path, java -classpath设置无效
比如说,
jar的MANIFEST.MF:
运行:
表面上看是对的,实际上因为jar中已经包含了Class-Path,所以这样的参数是无效的。吾怎么知道的?因为吾被坑了才知道。
jar包下MANIFEST.MF中的 Class-Path 设置
1. 基本格式
属性名称+:+空格+属性值
2. 没行最多72个字符,换行继续必须以空格开头
3. 文件最后必须要有一个回车换行
4. Class-Path 当前路径是jar包所在目录,如果要引用当前目录下一个子目录中的jar包,使用以下格式
子目录/xxx.jar 子目录/yyy.jar 技巧:多个jar包的引用,可以使用 .classpath 文件中classpathentry 的值
5. 在任何平台上路径分割符都是 /,多个jar包引用以空格分开
jar包中MANIFEST.MF相关内容
打包jar包的时候 ,有一个文件夹叫 META-INF/MANIFEST.MF 这个文件里保存一些该jar包的信息. 我们javaagent的相关信息也保存在这个文件中.
还有一个很重要的问题是里面有一个字段叫Class-Path 可以设置调用的jar包路径, 改路径可以写相对路径 , 也就是相对于该jar包的路径
有多个jar包 可以用空格分开 每行内容不能超过70字符
MANIFEST.MF文件可以由maven生成 , 需要在pom文件中设置
生成的文件内容如下:
参数介绍
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(可选)
即在该文件中主要定义了程序运行相关的配置信息,程序运行前会先检测该文件中的配置项。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。