Windows 上的 Gradle 任务存在相关路径的 WSL 配置问题

问题描述 投票:0回答:1

在 Windows 机器上,我有一个名为

paths.sh
的 bash 脚本,它列出了
JAVA_HOME
目录中的 Java 文件

#!/bin/bash

echo "Current working directory: $(pwd)"
echo "JAVA_HOME: $JAVA_HOME"
echo "Accessing path: $JAVA_HOME/bin/java"
ls -l "$JAVA_HOME/bin/java" || echo "Failed to access java"

当我直接在 Git bash 中运行它时,它工作正常,我得到:

$ ./src/test/java/javaToJs/paths.sh
Current working directory: /g/ws/ws-shared
JAVA_HOME: /g/Java/jdk21
Accessing path: /g/Java/jdk21/bin/java
-rwxr-xr-x 1 Admin 197608 54384 Sep 26  2023 /g/Java/jdk21/bin/java

在我的 build.gradle 中,我有一个 gradle 任务来在构建时自动运行脚本

task paths(type: Exec) {
    workingDir 'G:/WS/ws-shared'
    commandLine 'bash', './src/test/java/javaToJs/paths.sh'
}

这行不通。它在目录路径中添加了一个

/mnt
(根据 AI,这是由于适用于 Linux 的 Windows 子系统),并且找不到要列出的 Java 文件

$ gradle paths

> Task :paths
Current working directory: /mnt/g/WS/ws-shared
JAVA_HOME: /mnt/g/Java/jdk21
Accessing path: /mnt/g/Java/jdk21/bin/java
ls: cannot access '/mnt/g/Java/jdk21/bin/java': No such file or directory
Failed to access java

我在这个简单的过程中尝试了任意数量的突变和排列,包括从

/mnt
中删除
JAVA_HOME
。我每次都会遇到同样的问题。例如,没有
/mnt

ls: cannot access '/g/java/jdk21/bin/java': No such file or directory

gradle 任务如何添加

/mnt
并失去对给定目录的访问权限?

UPDATE: The plot thickens
在我卸载适用于 Linux 的 Windows 子系统并重新启动后。现在,当我运行 gradle 任务时,我得到:

$ gradle paths
Starting a Gradle Daemon, 4 incompatible and 1 stopped Daemons could not be reused, use --status for details

> Task :paths FAILED
Windows Subsystem for Linux has no installed distributions.

Use 'wsl.exe --list --online' to list available distributions
and 'wsl.exe --install <Distro>' to install.

Distributions can also be installed by visiting the Microsoft Store:
https://aka.ms/wslstore
Error code: Bash/Service/CreateInstance/GetDefaultDistro/WSL_E_DEFAULT_DISTRO_NOT_FOUND

FAILURE: Build failed with an exception.
bash gradle windows-subsystem-for-linux
1个回答
1
投票

通过

bash
gradle
命令正在使用 WSL。就像这篇文章我必须重新初始化 WSL2 层,以管理员身份打开 PowerShell 进入我的 WSL 并为其安装 JVM。

sudo apt install openjdk-21-jdk

现在我可以找到 JAVA_HOME 路径

readlink -f $(which java)

并设置它

JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))

如果我将其设置为我的 JAVA_HOME,那么我可以在我的

bash
 中运行 
gradle task

命令

注意:这意味着我无法让 WSL 使用我的本地 Windows JVM

bash

© www.soinside.com 2019 - 2024. All rights reserved.