JDK7的时候,com.sun.image.codec.jpeg类已经退休了,以后凡是带sun.*的类库将不会被支持。javac在编译代码时,当他尝试从rt.jar中找寻对应的类文件时,他会默认从对应的符号表文件ct.sym (同样在jre/lib/下)中查找该类是否存在,由于ct.sym中有意或无意的遗失了部分rt.jar中的类,包括com.sun.image.codec.jpeg,因此导致编译报错。
解决方法:
通知javac编译器,在编译代码时,忽略该符号表ct.sym, 直接查找rt.jar,通过给javac传入对应的参数完成:
-XDignore.symbol.file
Ant,Javac编译器本身都是用Java语言实现的,所以运行Ant和执行Javac任务使用同一个JVM实例;这是高效的表现。Ant的Javac任务的默认行为是调用运行Ant本身的任何JVM的标准编译器,然而如果你想要单独地调用编译器,比如你要使用一个高级别的编译器,你可以使用javac的fork属性:
<fork>true</fork>
pom修改如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>utf-8</encoding>
<compilerArgs><arg>-XDignore.symbol.file</arg></compilerArgs>
<fork>true</fork>
</configuration>
</plugin>
参考:
https://blog.csdn.net/javakakayi/article/details/51504587
https://blog.csdn.net/lday/article/details/18705837
https://www.cnblogs.com/dzblog/p/6971245.html
https://blog.csdn.net/ssh000/article/details/2482831