您的位置:首页 > 编程语言 > Java开发

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

2017-08-15 22:23 1681 查看
在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…成功了….

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



脑袋空空,口袋空空,加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: