我们通过bytebuddy开发javaagent最终要部署到springboot项目中,javaagent引入了slf4j-api包,但是没有slf4j实现类,所有报错“failed to load class”。
这时我们有两种解决思路:
1.在javaagent中实现slf4j。
2.在javaagent 中排除slf4j,具体实现留给我们监控的springboot项目。
毫不犹豫选择第二种,因为springboot一般都有slf4j的实现,如果在javaagent中也实现的话,就会产生新的错误,重复引用,报冲突。
第二种实现方式:
org.apache.maven.plugins
maven-shade-plugin
3.1.0
package
shade
junit:junit
org.slf4j:slf4j-api:jar:*
com.hupu.agent.Agent
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.8
总结:轻视了maven的功能,在maven打包的时候看到一大堆的日志输出,重来没有认真关注过。心理上抗拒这些繁杂的日志,导致需要花费更多的时间才能找到解决jar冲突的方法。其实日志是软件开发者有选择的打印的,是查找问题,解决问题的重要线索。
找到问题的根源才能解决问题,网上找到的答案也需要自己分析才能真正解决问题。