使用Maven和Java 8获取错误(jdk1.8.0_45).Java 7不会发生此问题.
MCVE
创建一个示例maven项目.例如:
mvn archetype:create -DgroupId=testinovke -DartifactId=testinvoke
Run Code Online (Sandbox Code Playgroud)
在生成的App.java文件中创建以下内容
package testinovke;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
public class App {
public static MethodHandles.Lookup lookup;
public static class Check {
public void primitive(final int i){
}
public void wrapper(final Integer i){
}
}
public static void main(String[] args) throws Throwable {
Check check = new Check();
MethodType type = MethodType.methodType(void.class, int.class);
MethodHandle mh = lookup.findVirtual(Check.class, "primitive", type);
mh.invoke();
}
}
Run Code Online (Sandbox Code Playgroud)
编译maven项目:
mvn clean compile
Run Code Online (Sandbox Code Playgroud)
产量
收到以下错误:
testinvoke/src/main/java/testinovke/App.java:[25,18] method invoked with incorrect number of arguments; expected 0, found 1
Run Code Online (Sandbox Code Playgroud)
尝试使用Maven 3.0.4和3.3.3.如果我使用Javac命令直接针对App.java进行编译,则此问题不存在.
添加编译器的插件配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)