在使用jdi编写远程调试工具的时候,发现本地运行一切正常,但是mvn编译后生成的架包一直报错
java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: com/sun/jdi/Value
或 com.sun.jdi.Value
经过一通Google和调试后,发现是因为sun这个库并不是标准依赖,在Java运行是并不会加载,需要使用classpath手动指定tools.jar
建议环境变量中直接指定:
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
或者在运行时通过-cp参数指定
另外如果在Maven打包的时候报类似的错误也需要在pom中增加:
<dependency>
<groupId>com.sun</groupId>
<artifactId>jdi</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>