首页 > 解决方案 > 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

标签: javalinuxgradlechroot

解决方案


推荐阅读