Örnek
Şöyle yaparız
plugins {id 'java'}group = 'com.mybot'version = '0.0.1-SNAPSHOT'sourceCompatibility = '11'
toolChain Alanı
Gradle 6.7 ile geliyor. Açıklaması şöyle. Normalde gradle kendisini çalıştıran JDK ile derleme yapıyordu. toolChain ile belirtilen JDK ile derleme yapar. JDK kurulu değilse otomatik olarak indirebilir.
No more release or sourceCompatibility tweaks, no more wiki pages describing which JDK you should install for the build to work.
Açıklaması şöyle
- All Java compilation tasks will use Java 11 to build. That means code in the main and test source sets, but also Java code in any custom source set you add, will be built with the configured Java version.
- All tests tasks, including the default test task and any additional custom Test task, will use Java 11 to run the tests.
- The javadoc task will use Java 11 to build the documentation.
Gradle tarafından tespit edilen toolChain'leri görmek için şöyle yaparız. Gradle kendi indirdiklerini "C:\Users\user\.gradle\jdks" altında topluyor. Bunlar "Auto-provisioned by Gradle" olarak işaretli
gradle -q javaToolchains + Options | Auto-detection: Enabled | Auto-download: Enabled + Eclipse Adoptium JDK 17.0.2+8 | Location: C:\Users\user\.gradle\jdks\jdk-17.0.2+8 | Language Version: 17 | Vendor: Eclipse Adoptium | Is JDK: true | Detected by: Auto-provisioned by Gradle + Oracle JDK 17.0.1+12-LTS-39 | Location: D:\Kurulumlar\JDK\jdk-17_windows-x64_bin\jdk-17.0.1 | Language Version: 17 | Vendor: Oracle | Is JDK: true | Detected by: Current JVM + Temurin JDK 1.8.0_322-b06 | Location: C:\Users\user\.gradle\jdks\jdk8u322-b06 | Language Version: 8 | Vendor: Temurin | Is JDK: true | Detected by: Auto-provisioned by Gradle
Eğer standart bir yere kurmuş olsaydım, gradle bunları da bulabilirdi ve indirmesi gerekmezdi. Şöyle yaparız. Linux'ta standart kurulum yeri "/usr/lib/jvm/". Bu arada Windows için JVM değiştirmek için bir yazı burada
$ gradle -q javaToolchains + Options | Auto-detection: Enabled | Auto-download: Enabled + OpenJDK 1.8.0_292 | Location: /usr/lib/jvm/java-8-openjdk | Language Version: 8 | Vendor: Oracle | Is JDK: true | Detected by: Current JVM + OpenJDK 11.0.11 | Location: /usr/lib/jvm/java-11-openjdk | Language Version: 11 | Vendor: Oracle | Is JDK: true | Detected by: Common Linux Locations
Şöyle yaparız
./gradlew --no-daemon -q javaToolchains + Options | Auto-detection: Enabled | Auto-download: Enabled + OpenJDK 1.7.0_261-mockbuild_2020_04_29_08_59-b00 | Location: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 | Language Version: 7 | Vendor: Oracle | Is JDK: true | Detected by: Common Linux Locations + OpenJDK JRE 1.7.0_261-mockbuild_2020_04_29_08_59-b00 | Location: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre | Language Version: 7 | Vendor: Oracle | Is JDK: false | Detected by: Common Linux Locations + Red Hat, Inc. JDK 1.8.0_292-b10 | Location: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64 | Language Version: 8 | Vendor: Red Hat, Inc. | Is JDK: true | Detected by: Current JVM + Red Hat, Inc. JDK 11.0.11+9-LTS | Location: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64 | Language Version: 11 | Vendor: Red Hat, Inc. | Is JDK: true | Detected by: Common Linux Locations + Red Hat, Inc. JRE 1.8.0_292-b10 | Location: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre | Language Version: 8 | Vendor: Red Hat, Inc. | Is JDK: false | Detected by: Common Linux Locations
Örnek
Gradle 7.3 ve JDK 8 ile bir projeyi derlerken bazı modüllerin JDK 17 kullanması gerekti.
- Gradle'i JDK 17 ile çalıştırdım. JDK 8 isteyen modüller için ana build.gradle dosyasında şöyle yaparız. Aslında options.release.set() kullanılmaması gerekiyordu ama nedense olmadı. Java 8 kullanması gereken modüller JDK 17 ile derlendi.
java { toolchain { languageVersion = JavaLanguageVersion.of(8) } } tasks.withType(JavaCompile) { options.release.set(8) //Buna gerek yok ama olmadı }
JDK 17 isteyen modüllerde şöyle yaparız.
java { toolchain { languageVersion = JavaLanguageVersion.of(17) } }
Deneme olsun diye tüm projeyi Gradle'ı JDK 8 ile derleyince, JDK 17 isteyen modüllerin olması gerektiği gibi JDK 17 ile derlendiğini gördüm. Aynı şeyin neden ilk seferdeki gibi olmadığını anlamadım.
Jenkins makinesinin internet bağlantısı olmadığı içinde JDK 17'yi indirirken şu hatayı aldım
Unable to download toolchain matching these requirements: {languageVersion=17, vendor=any, implementation=vendor-specific} > Could not GET 'https://api.adoptopenjdk.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/adoptopenjdk'. Received status code 403 from server: Forbidden
Örnek
JDK 17 ayarları için şöyle yaparız.
java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } tasks.withType(JavaCompile) { options.release.set(17) options.compilerArgs = ['--add-modules=jdk.incubator.foreign', '--enable-preview', '-Xlint:preview'] } // dependencies, etc.
Hiç yorum yok:
Yorum Gönder