打包后的JavaAgent修复线程无法被执行

在eclipse上直接用run as application来执行是可以成功从process 2 attach到process 1的,可是用maven把process 2的项目打包成jar包后就attch不成功了,报了如下的错误:

$ java -jar attach-0.0.1-SNAPSHOT-jar-with-all-dependencies.jar 7956
7956
java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.WindowsAttachProvider could not be instantiated
com.sun.tools.attach.AttachNotSupportedException: no providers installed
        at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:203)
        at com.nathan.attach.attach.AttachAPI.main(AttachAPI.java:16)
Exception in thread "main" java.lang.NullPointerException
        at com.nathan.attach.attach.AttachAPI.main(AttachAPI.java:22)

查了很多资料,有说在process 2上加:

static
{
   System.loadLibrary("attach");
}

试过不行,也有说把环境变量的path变量加上jre的bin目录:
%JAVA_HOME%/jre/bin

这里写图片描述

也试了,还是同样的报错,这不是坑爷爷么(沉思脸)

这里写图片描述


看了下网上讨论的焦点都集中在attach.dll,说是需要动态加载它才能在window上正常做attach的动作。

还有甚者说tools.jar是扥windows版本和linux版本的,两者不能互用。

那到底我遇到的是哪种情况呢,一样样来排查,先从attach.dll着手。

我看了下

%JAVA_HOME%/bin目录

发现没有attach.dll

再看了下

%JAVA_HOME%/jre/bin

居然找到attach.dll了,那有没有可能系统一直读的都是 %JAVA_HOME%/bin目录呢?

于是,我把
%JAVA_HOME%/jre/bin

下面的attach.dll 拷贝到

%JAVA_HOME%/bin

一执行,opss…成功了….

我的心波澜不惊甚至还有点想写代码…

这里写图片描述

脑袋空空,口袋空空,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值