我尝试在 z/OS 上运行 Gradle,但遇到了问题。
我已将 Gradle 下载到 z/OS,然后解压缩。
当我通过运行以下命令来测试安装时:
./gradle-7.6/bin/gradle
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
./gradle-7.6/bin/gradle: line 1: syntax error near unexpected token `|'
./gradle-7.6/bin/gradle: line 1: <a whole lot of garbage follows after here>
Run Code Online (Sandbox Code Playgroud)
我应该如何设置 Gradle,使其在 z/OS 上运行,就像我希望它在其他地方运行一样?
Gradle 可以在 z/OS 上的 Unix 系统服务 (USS) 中运行,但是您必须进行一些重要的配置更改,以满足 Gradle 对平台默认编码为 UTF-8 的期望。
这个问题可以分为2部分。首先是确保 Gradle 正确安装,其文件标记有正确的编码字符集(这是您当前的问题)。其次是确保环境已设置为运行 Gradle。
请注意,Gradle 可以通过两种不同的方式使用:
第一个是通过 Gradle 安装,您可以直接指向它或添加到您的$PATH
,然后像这样运行:
gradle <tasks>
Run Code Online (Sandbox Code Playgroud)
第二种是通过 Gradle Wrapper,它是添加到项目中的几个脚本、一个 JAR 和一个属性文件,它将确保无论谁运行该构建,都使用完全相同的 Gradle 版本,运行方式如下:
./gradlew <tasks>
Run Code Online (Sandbox Code Playgroud)
对于其中的每一种方法,您都需要运行一些 z/OS 特定的设置:
Gradle 以 zip 文件形式提供。提取此内容的最佳方法是使用该unzip
命令(如果可用)。执行此操作时,设置_CEE_RUNOPTS
环境变量以自动使用正确的编码字符集标记文件,如下所示:
gradle <tasks>
Run Code Online (Sandbox Code Playgroud)
或者,如果您没有unzip
可用的 Java,但您有 Java(运行 Gradle 需要它!),那么您可以使用jar
Java 安装中的实用程序。该实用程序不会正确标记文件,也不会将 Gradle 设置为可执行,因此您需要执行以下操作:
./gradlew <tasks>
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您都可以通过列出文件、它们的权限和标签来检查安装是否符合您的预期:
_CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG)" unzip gradle-X.Y-bin.zip
Run Code Online (Sandbox Code Playgroud)
请注意,该gradle
脚本是可执行的(x
在权限中)并标记为ISO8859-1
,即 ASCII。
当项目使用 Gradle Wrapper 时,就不需要设置中央 Gradle 安装。gradlew
相反,项目根目录中有一个脚本,它本身将 Gradle 下载到中央缓存并运行它。我们只需将该文件标记为 ASCII 即可确保正确读取它:
jar -xvf /path/to/gradle-X.Y-bin.zip
chtag -tc ISO8859-1 ./bin/gradle
chmod +x ./bin/gradle
Run Code Online (Sandbox Code Playgroud)
安装完成后,我们现在可以专注于运行 Gradle。
z/OS USS 通常会对文件和控制台使用某种 EBCDIC 变体编码,并且当 z/OS 上的 JVM 启动时,系统属性的默认设置file.encoding
将遵循这一点。我们可以通过设置系统属性来覆盖它。使用中的GRADLE_OPTS
环境变量来执行此操作最方便.profile
,因为您需要将其应用于所有 Gradle 环境。
此外,由于 Gradle 使用守护进程,并且期望能够以 UTF-8 格式读取其输出,因此我们必须使用环境变量将这些进程的输出编码更改为 UTF-8 LANG
。您需要在每次调用的基础上进行设置,我不相信有一种方便的方法可以为所有gradle
调用执行此操作,并且您当然不想为所有调用都更改它。
最后,shell 需要能够读取初始脚本,无论是gradle
在 Gradle 安装中还是gradlew
在项目根目录中的 Gradle Wrapper。如果我们将_BPXK_AUTOCVT
环境变量设置为ON
,那么 shell 将尊重文件标记。这可能也可以在您的系统中设置.profile
。
所以:
LANG=en_US.UTF-8 GRADLE_OPTS="-Dfile.encoding=UTF-8" _BPXK_AUTOCVT=ON /gradle-7.6/bin/gradle
Run Code Online (Sandbox Code Playgroud)
或者在使用 Gradle Wrapper 的项目中:
LANG=en_US.UTF-8 GRADLE_OPTS="-Dfile.encoding=UTF-8" _BPXK_AUTOCVT=ON ./gradlew
Run Code Online (Sandbox Code Playgroud)
或者,如果我们在以下位置设置其中一些变量.profile
:
# .profile contents:
GRADLE_OPTS="-Dfile.encoding=UTF-8"
_BPXK_AUTOCVT=ON
Run Code Online (Sandbox Code Playgroud)
然后:
LANG=en_US.UTF-8 /gradle-7.6/bin/gradle
Run Code Online (Sandbox Code Playgroud)
或者在使用 Gradle Wrapper 的项目中:
LANG=en_US.UTF-8 ./gradlew
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
301 次 |
最近记录: |