Author: ChinSyun Pang
Weibo: arthinking_plus
Posted in:
Maven插件编译问题
1 | TestService testService = serviceFactory.getService(ServiceType.testServiceClazz); |
maven compile 报如下错误:
1 | [ERROR] /xxx.java:[100,20] xxx.java:106: 不兼容的类型 |
而以下代码则不会报错:
1 | TestService testService = serviceFactory.getService(TestService.class); |
其中getService()方法如下:
1 | public<T> T getService(Class<T> class){ |
可以发现,报错的代码,传入的Class是动态的,这是导致Maven编译报错的原因。
查看下项目的maven-compiler-plugin插件配置:
1 | <plugin> |
可以发现我们并没有为maven指定其他的JDT(Java Development Tools),使用的是默认的javac进行编译。而我们在Eclipse里面使用的是自带的JDT,编译没有问题。可见,javac的检查机制更加严格,导致Eclipse可以编译通过的,用Maven编译会报错。在用Maven编译的时候要注意下这点哦。
Reference
关于Eclipse和Javac编译结果不一致的问题分析与解决
What is the difference between javac and the Eclipse compiler?