无法从maven测试单元内调用sun.security.tools.keytool.Main

无法从maven测试单元内调用sun.security.tools.keytool.Main,maven,java-8,keytool,maven-surefire-plugin,Maven,Java 8,Keytool,Maven Surefire Plugin,我得到了(oracle jdk 8) 为了 如果我尝试直接调用该方法,它会说没有这样的包 有什么想法吗 log语句输出: public static void sun.security.tools.keytool.Main.main(java.lang.String[]) throws java.lang.Exception Method.invoke需要一个Objects数组,表示(几乎)任意数量的参数。main方法需要一个具有数组类型的参数 因此,您可以使用 mainMethod.invo

我得到了(oracle jdk 8)

为了

如果我尝试直接调用该方法,它会说没有这样的包

有什么想法吗

log语句输出:

public static void sun.security.tools.keytool.Main.main(java.lang.String[]) throws java.lang.Exception

Method.invoke
需要一个
Object
s数组,表示(几乎)任意数量的参数。
main
方法需要一个具有数组类型的参数

因此,您可以使用

mainMethod.invoke(null, new Object[]{ new String[]{"-help"} });
或者,由于它是varargs方法:

在后一种情况下,将其强制转换为
对象
会迫使编译器将其视为单个参数,该参数将自动包装到数组中(这就是varargs方法的作用)

请注意,您也可以在查找中使用varargs功能:

Method mainMethod = keytoolClazz.getMethod("main", String[].class);
类型将自动包装到数组中

public static void sun.security.tools.keytool.Main.main(java.lang.String[]) throws java.lang.Exception
mainMethod.invoke(null, new Object[]{ new String[]{"-help"} });
mainMethod.invoke(null, (Object)new String[]{"-help"});
Method mainMethod = keytoolClazz.getMethod("main", String[].class);