Eclipse插件开发 – Gradle无法从Eclipse启动器运行:java.io.IOException:拒绝访问

我正在开发Eclipse插件,以便从Eclipse 运行Gradle作为一个应用程序(使用Eclipse LaunchConfiguration)。 但即使在为这个新进程设置JAVA_HOMEGRADLE_HOME之后,它GRADLE_HOME以错误结束。 下面是我通过传递额外的--debug --stacktrace

那么什么文件Access被拒绝以及如何发现?

 21:50:18.828 [ERROR] [org.gradle.BuildExceptionReporter] 21:50:18.828 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception. 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong: 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] java.lang.ExceptionInInitializerError (no error message) 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is: 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] java.lang.ExceptionInInitializerError 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.nativeplatform.filesystem.FileSystems.getDefault(FileSystems.java:22) 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.LayoutCommandLineConverter.convert(LayoutCommandLineConverter.java:39) 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.BuildActionsFactory.createAction(BuildActionsFactory.java:107) 21:50:18.844 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.createAction(CommandLineActionFactory.java:206) 21:50:18.859 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:196) 21:50:18.859 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.Main.doAction(Main.java:46) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.Main.main(Main.java:37) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.GradleMain.main(GradleMain.java:23) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.lang.RuntimeException: java.io.IOException: Access denied 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.nativeplatform.filesystem.GenericFileSystem.(GenericFileSystem.java:88) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.nativeplatform.filesystem.FileSystems$DefaultFileSystem.(FileSystems.java:30) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] ... 16 more 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.io.IOException: Access denied 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.nativeplatform.filesystem.GenericFileSystem.createFile(GenericFileSystem.java:99) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.nativeplatform.filesystem.GenericFileSystem.(GenericFileSystem.java:84) 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] ... 17 more 21:50:18.860 [ERROR] [org.gradle.BuildExceptionReporter] 

Eclipse在Win32上使用JRE 1.7启动

Gradle 1.10。 当然,命令行shell也是如此。

发现这一点的方法是查看Gradle代码库。 以下行抛出IOException

 File file = File.createTempFile("gradle_fs_probing", null, null); 

显然,Java进程无法创建临时文件。 也许这是文件权限问题。

在我的情况下,同样的问题是由于没有定义默认环境属性(环境是Eclipse和Windows)引起的。 然后,gradle缺少一些属性,例如temp目录。

这样可行:

 def myenv = [ "JAVA_HOME=./jdk" ] def env = System.getenv().collect { k, v -> "$k=$v" } + myenv def proc = "./gradlew".execute(env, new File('.')) 

虽然这可能不起作用

 def myenv = [ "JAVA_HOME=.\\jdk" ] def proc = "./gradlew".execute(myenv, new File('.'))