Maven无法使用rt.jar进行编译

我的项目使用sun.security.tools.keytool在JDK 1.8下生成证书,这个包可以在rt.jar找到。 根据依赖机制简介,系统依赖 ,我可以添加rt.jar作为我的项目的依赖:

  sun.jdk rt.jar 1.8 system ${java.home}/lib/rt.jar  

我很确定Maven发现了这个jar文件。 但是,当我导入sun.security.tools.keytool.Main ,它仍然会生成错误。 而且,最奇怪的是如果我将rt.jar复制到某个地方并在pom.xml填充它的路径,它就可以了! 一旦我切换回使用原始的rt.jar ,它就会失败!

谁能告诉我这怎么可能发生?

我创建了一个Maven项目,并将问题的添加到其POM中。

首先我得到了:

 [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] .../SO-31353565/src/main/java/igb/so/SO31353565.java:[6,34] package sun.security.tools.keytool does not exist [ERROR] .../SO-31353565/src/main/java/igb/so/SO31353565.java:[12,50] cannot find symbol symbol: variable Main location: class igb.so.SO31353565 

然后,根据使用JDK8找不到符号(CertAndKeyGen) ,我添加了:

     org.apache.maven.plugins maven-compiler-plugin 3.2  true -XDignore.symbol.file      

到POM并且编译成功了。

如果您使用的是Gradle而不是Maven,则可以将其添加到构建中:

 compileJava { options.fork = true options.forkOptions.executable = 'javac' options.compilerArgs << "-XDignore.symbol.file" } 

它对我有用! ;)