Maven插件编译问题

Author: ChinSyun Pang
Weibo: arthinking_plus
Posted in:

Maven插件编译问题

1
TestService testService = serviceFactory.getService(ServiceType.testServiceClazz);

maven compile 报如下错误:

1
2
3
4
[ERROR] /xxx.java:[100,20] xxx.java:106: 不兼容的类型
找到: java.lang.Object
需要: TestService
[INFO] 1 error

而以下代码则不会报错:

1
TestService testService = serviceFactory.getService(TestService.class);

其中getService()方法如下:

1
2
3
public<T> T getService(Class<T> class){
...
}

可以发现,报错的代码,传入的Class是动态的,这是导致Maven编译报错的原因。

查看下项目的maven-compiler-plugin插件配置:

1
2
3
4
5
6
7
8
9
10
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<showWarnings>flase</showWarnings>
</configuration>
</plugin>

可以发现我们并没有为maven指定其他的JDT(Java Development Tools),使用的是默认的javac进行编译。而我们在Eclipse里面使用的是自带的JDT,编译没有问题。可见,javac的检查机制更加严格,导致Eclipse可以编译通过的,用Maven编译会报错。在用Maven编译的时候要注意下这点哦。

Reference

maven插件列表

maven编译问题

Compiling Java code

关于Eclipse和Javac编译结果不一致的问题分析与解决

What is the difference between javac and the Eclipse compiler?