У меня установлена Windows JDK на C:\Program Files\Java\jdk-11.0.1+13
. У меня нет установленной Linux Java или Gradle. Я хочу вызвать ./gradlew
(в проекте с оболочкой Gradle) в WSL и заставить его использовать Windows JDK.
Я подумал, что если бы я мог вызвать java
в WSL, это бы сработало, поэтому я сделал символическую ссылку на java.exe
:
ln -s '/mnt/c/Program Files/Java/jdk-11.0.1+13/bin/java.exe' /bin/java
Однако в настоящее время это не работает должным образом( WSL / # 3999 ). Обходной путь, описанный в этом выпуске, заключается в создании сценария переадресации на java.exe
, например, так:
exec '/mnt/c/Program Files/Java/jdk-11.0.1+13/bin/java.exe' "$@"
С этим я могу вызывать java
из WSL, казалось бы, идеально:
$ which java
/bin/java
$ java --version
openjdk 11.0.1 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.1+13, mixed mode)
Но даже при такой работе вызов ./gradlew
приводит к ошибке:
$ ./gradlew
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
Caused by: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain
Эта ошибка не возникает при вызове cmd.exe /c gradlew.bat
.
Я полагаю, что ./gradle/wrapper/gradle-wrapper.jar
не добавляется должным образом в путь к классам, но я не могу понять, почему.
Обновление: Я прав, чтобаночка не добавляется в путь к классам. ./gradlew
пытается выполнить exec
java -Xmx64m -Dorg.gradle.appname=gradlew -classpath /mnt/c/project/gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMain
Поскольку java
на самом деле является сценарием, который я разместил выше, java.exe
вызывается с теми же аргументами. java.exe
, конечно, не может разрешить путь /mnt/c/project/gradle/wrapper/gradle-wrapper.jar
, поэтому выполнение завершается неудачно. Я не уверен, есть ли способ решить эту проблему вообще.