java - Gradle doesn't start in armhf chroot
问题描述
I want to run gradle in a chroot environment on armhf.
To setup chroot I use:
#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
Now, for example run gradle --version
:
Output:
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)
After that, I attempted to use a newer version (Like 6.8.3, instead of the 4.xy version from apt):
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
Now run ./gradle --version
fails with the same error:
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)
I found this post, but it still fails:
export GRADLE_HOME=/gradle-6.8.3
export GRADLE_USER_HOME=/gradle-6.8.3
Now my third attempt was to use the gradle wrapper, but this still fails:
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
This causes this error:
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
After researching this issue, I found two related posts: this one and this.
But it seems, all of these issues don't relate to Java 15, but more like Java 7-9.
My machine: 5.10.0-4-amd64 #1 SMP Debian 5.10.19-1 (2021-03-02) x86_64 GNU/Linux
解决方案
推荐阅读
- python - Flask-Admin 删除“主页”按钮
- arm - 在 IAR NXP 编译器中获取某些 c 文件的头文件路径
- python - 将系列与数据框组合时,熊猫返回错误
- bash - 当要查找的目录中没有文件时,如何避免设置数组的值?
- c# - C# 读取 Json 并读取数据
- unity3d - 为什么我的 transform.position 出现 NullReference 错误?
- javascript - 隐藏videojs play()上的按钮?
- r - 如何在ggplot中创建条件误差线
- audio - 使用 ffmpeg 梳理后应播放所有音频。但是第一部分只有音频
- c - GetProcessAffinityMask 不断返回 0xffff