10 September 2016 - 09:33:43 - Read: 620

Mengatasi Error Execution failed for task ":transformClassesWithDexForRelease" pada Java

Gara-gara sideproject, belakangan ini cafelinux jadi jarang keurus, aplikasi-aplikasi android yang iseng kubuat juga gak keurus. Trus pas dapet koneksi kenceng, ah, upgrade update dulu sistem sama aplikasi-aplikasi di linux tercinta ini. :)

Dan baris diatas adalah awal mula terjadinya petaka. Karena pas balik mau update aplikasi android, tiba-tiba pas mau nge"build" dihadapkan dengan pesan error:

BUILD FAILED

Total time: 51.617 secs
Error: /home/jamz/www/phonegaps/kamusternate/platforms/android/gradlew: Command failed with exit code 1 Error output:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1

Baca-baca artikel, banyak yang nyaranin setting gradle.properties untuk menyesuaikan dengan versi tertentu. Karena setelah pesan error diatas dibaca kembali, memang masalahnya ada pada versi java 1.7 yang udah gak kompatible lagi dan minta diupdate. Jadi solusinya ada "Update Java". Dikasus ini aku mengupdate dari java 1.7 ke 1.8 yang aku download dari http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

[@jamz!jAcer]: [~/]: java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-0ubuntu0.14.04.3)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)

[@jamz!jAcer]: [~/Documents/apps/programming/jdk1.8.0_102/bin]: ./java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

 Liat kan beda cara ngeliat versi java dari kedua directory diatas?

Yarp, itu karena java versi lama yang diinstall langsung terdaftar di GLOBAL PATH. Dan karena versi 1.8 yang aku download bukan versi install, jadi harus ngeset GLOBAL PATH nya secara manual. Serta sekaligus mengganti PATH directory yang lama.

Caranya, jika hanya ingin berlaku untuk user kita saja, lakukan saja langkah berikut ini. Eh, tapi oh iya, path ~/Documents/apps/programming/jdk1.8.0_102/ disesuaikan dengan folder java tempat file download-nya di ekstrak.

$ nano ~/.bash_profile

lalu isi dengan

export JAVA_HOME=/home/jamz/Documents/apps/programming/jdk1.8.0_102
export PATH=$PATH:/home/jamz/Documents/apps/programming/jdk1.8.0_102/bin

simpan. Lalu export.

$ source ~/.bash_profile

Done.

Untuk memastikan, ketik saja

$ echo $JAVA_HOME
/home/jamz/Documents/apps/programming/jdk1.8.0_102

Jika sudah muncul sesuai dengan yang sudah kita set, berarti kita telah berhasil menggunakan java versi terbaru.

Dan pada kasus ini, aku sedang menggunakan Cordova CLI untuk melakukan build. Kita coba lagi, dan tara...

[@jamz!jAcer]: [~/www/phonegaps/kamusternate]: cordova build android --debug
ANDROID_HOME=/home/jamz/Android/Sdk
JAVA_HOME=/home/jamz/Documents/apps/programming/jdk1.8.0_102
Incremental java compilation is an incubating feature.
:preBuild UP-TO-DATE
--skip--
BUILD SUCCESSFUL

Good luck buat kalian yang memiliki masalah yang sama :)