Gradle 不在 armhf chroot 中启动

问题描述

我想在 armhf 上的 chroot 环境中运行 gradle。

要设置 chroot,我使用:

#This will need ~5-10 minutes
sudo debootstrap --arch armhf sid armhf-chroot
sudo chroot armhf-chroot
#Now in the chroot environment run
mount -t proc /proc proc/
apt install openjdk-15-jdk gradle

现在,例如运行 gradle --version

输出

org.gradle.api.internal.classpath.UnkNownModuleException: Cannot locate JAR for module 'ant' in distribution directory '/usr/share/gradle'.
    at org.gradle.api.internal.classpath.DefaultModuleRegistry.getExternalModule(DefaultModuleRegistry.java:78)
    at org.gradle.api.internal.DefaultClasspathProvider.findClasspath(DefaultClasspathProvider.java:45)
    at org.gradle.api.internal.DefaultClasspathRegistry.getClasspath(DefaultClasspathRegistry.java:34)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:48)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)

在那之后,我尝试使用更新的版本(比如 6.8.3,而不是 apt 的 4.xy 版本):

apt purge ant gradle
apt autoremove
apt install wget unzip
wget https://services.gradle.org/distributions/gradle-6.8.3-bin.zip
unzip gradle-6.8.3-bin.zip 
cd gradle-6.8.3/bin

现在运行 ./gradle --version 失败并出现相同的错误

org.gradle.api.internal.classpath.UnkNownModuleException: Cannot locate JAR for module 'ant' in distribution directory '/gradle-6.8.3'.
    at org.gradle.api.internal.classpath.DefaultModuleRegistry.loadExternalModule(DefaultModuleRegistry.java:108)
    at org.gradle.api.internal.classpath.DefaultModuleRegistry.getExternalModule(DefaultModuleRegistry.java:96)
    at org.gradle.api.internal.DefaultClasspathProvider.findClasspath(DefaultClasspathProvider.java:76)
    at org.gradle.api.internal.DefaultClasspathRegistry.getClasspath(DefaultClasspathRegistry.java:35)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:48)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:31)

我找到了 this 个帖子,但仍然失败:

export GRADLE_HOME=/gradle-6.8.3
export GRADLE_USER_HOME=/gradle-6.8.3

现在我的第三次尝试是使用 gradle 包装器,但这仍然失败:

cd /
apt install git
#Some sample project,the project itself is not that important
git clone https://github.com/jitpack/gradle-simple
cd gradle-simple
./gradlew

这会导致此错误

Downloading https://services.gradle.org/distributions/gradle-6.1.1-all.zip

Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.base/javax.crypto.Cipher.getInstance(Cipher.java:546)
    at java.base/sun.security.ssl.SSLCipher.isTransformationAvailable(SSLCipher.java:510)
    at java.base/sun.security.ssl.SSLCipher.<init>(SSLCipher.java:499)
    at java.base/sun.security.ssl.SSLCipher.<clinit>(SSLCipher.java:82)
    at java.base/sun.security.ssl.CipherSuite.<clinit>(CipherSuite.java:69)
    at java.base/sun.security.ssl.SSLContextImpl.getApplicableSupportedCipherSuites(SSLContextImpl.java:343)
    at java.base/sun.security.ssl.SSLContextImpl$AbstractTLSContext.<clinit>(SSLContextImpl.java:556)
    at java.base/java.lang.class.forName0(Native Method)
    at java.base/java.lang.class.forName(Class.java:377)
    at java.base/java.security.Provider$Service.getImplClass(Provider.java:1917)
    at java.base/java.security.Provider$Service.newInstance(Provider.java:1893)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
    at java.base/javax.net.ssl.SSLContext.getInstance(SSLContext.java:184)
    at java.base/javax.net.ssl.SSLContext.getDefault(SSLContext.java:110)
    at java.base/javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:83)
    at java.base/javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:334)
    at java.base/javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:291)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.<init>(HttpsURLConnectionImpl.java:81)
    at java.base/sun.net.www.protocol.https.Handler.openConnection(Handler.java:62)
    at java.base/sun.net.www.protocol.https.Handler.openConnection(Handler.java:57)
    at java.base/java.net.URL.openConnection(URL.java:1101)
    at org.gradle.wrapper.Download.downloadInternal(Download.java:63)
    at org.gradle.wrapper.Download.download(Download.java:52)
    at org.gradle.wrapper.Install$1.call(Install.java:62)
    at org.gradle.wrapper.Install$1.call(Install.java:48)
    at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
    at org.gradle.wrapper.Install.createdist(Install.java:48)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:62)
Caused by: java.lang.SecurityException: Can not initialize cryptographic mechanism
    at java.base/javax.crypto.JceSecurity.<clinit>(JceSecurity.java:121)
    ... 30 more
Caused by: java.lang.SecurityException: Couldn't iterate through the jurisdiction policy files: unlimited
    at java.base/javax.crypto.JceSecurity.setupJurisdictionPolicies(JceSecurity.java:374)
    at java.base/javax.crypto.JceSecurity$1.run(JceSecurity.java:112)
    at java.base/javax.crypto.JceSecurity$1.run(JceSecurity.java:109)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
    at java.base/javax.crypto.JceSecurity.<clinit>(JceSecurity.java:108)
    ... 30 more

在研究这个问题后,我发现了两个相关的帖子:this onethis

但似乎所有这些问题都与 Java 15 无关,而更像是 Java 7-9。

我的机器:5.10.0-4-amd64 #1 SMP Debian 5.10.19-1 (2021-03-02) x86_64 GNU/Linux

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)