Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Menggunakan fitur pratinjau JDK21 dan/atau kelas inkubator

17061370-thumb.jpg
Blog

Menggunakan fitur pratinjau JDK21 dan/atau kelas inkubator


Terkadang Anda ingin bermain-main dengan fitur-fitur baru JDK21 yang mewah (atau bahkan yang lebih baru
JDK) menyukai fitur pratinjau dan mungkin beberapa kelas inkubator.

Jadi bagaimana Anda bisa mengonfigurasi build Maven Anda untuk mendukung pelajaran seperti itu dalam gameplay? Lebih mudah darimu
memikirkan. Mari mulai penyiapan. Dugaan saya adalah Anda ingin bermain
dengan fitur pratinjau dari JDK21 misalnya Pola String (JEP430). Saya baru saja memilih JEP ini untuk demonstrasi. Anda dapat memilih JEP apa pun di pratinjau.

Hal pertama yang harus diketahui bahwa Anda harus mengaktifkan fitur pratinjau melalui:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <enablePreview>true</enablePreview>
  </configuration>
</plugin>

Konfigurasi enablePreview ada sejak versi 3.10.1 dari Plugin kompiler MavenComment. Jadi, secara umum, saya sarankan menggunakan versi terbaru dari plugin jika tidak, beberapa opsi konfigurasi atau yang serupa mungkin tidak ada sama sekali atau hal-hal khusus untuk versi JDK yang baru.

Ini umumnya harus dilakukan di pluginManagement bagian Anda pom.xml untuk mengajukan. Jadi sekarang Anda dapat menggunakan fitur baru ini dalam kode pengujian Anda (Anda juga dapat menggunakannya dalam kode produksi jika Anda menginginkannya):

package com.soebes.jdk21;

import org.junit.jupiter.api.Test;

import static java.lang.StringTemplate.STR;
import static org.assertj.core.api.Assertions.assertThat;

class TemplateTest {
  @Test
  void name() {
    String name = "Jon";
    String info = STR."My name is \{name}";
    assertThat(info).isEqualTo("My name is Jon");
  }

}

Oke sejauh ini bagus, tapi tunggu, sebelum Anda dapat menjalankan tes ini, Anda perlu melakukan sedikit lagi. Kami perlu mengubah konfigurasi untuk menjalankan pengujian dengan dukungan fitur pratinjau. Ini diperlukan untuk memberikan opsi pada JVM --enable-preview yang digunakan saat menjalankan tes. Ini harus dilakukan sebagai berikut:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>
      --enable-preview
    </argLine>
  </configuration>
</plugin>

Seperti yang saya sebutkan sebelumnya, saya sangat merekomendasikan menggunakan plugin versi terbaru.

Satu hal penting untuk disebutkan. Jika Anda menjalankan tes ini atau seluruh build, Anda akan mendapatkannya PERINGATAN’adalah sebagai berikut:

[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ jdk21 ---
[INFO] Changes detected - recompiling the module! :dependency
[INFO] Compiling 5 source files with javac [release 21] to target/test-classes
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[12,23] string templates are a preview feature and may be removed in a future release.
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[12,23] string templates are a preview feature and may be removed in a future release.
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[5,24] java.lang.StringTemplate is a preview API and may be removed in a future release.
[INFO]

PERINGATAN ini akan dikeluarkan saat mengkompilasi kode produksi jika Anda telah menggunakannya
fitur seperti itu sudah dalam produksi. Ini dengan jelas menunjukkan bahwa Anda menggunakan fitur pratinjau ini.

Dan petunjuk yang sangat penting:

Jangan pernah menerapkan kode yang menggunakan fitur pratinjau di mana pun. Tidak di manajer repositori perusahaan Anda atau di repositori pusat

ITU StringTemplate kelas ditandai sebagai fungsi pratinjau terlepas dari apakah itu paketnya java.lang:

@PreviewFeature(feature=PreviewFeature.Feature.STRING_TEMPLATES)
public interface StringTemplate {
...

}

Jadi hal baik lainnya adalah menggunakan kelas inkubator seperti Vector Lebah. Baiklah. Apa yang harus kita lakukan? Hal pertama adalah untuk meningkatkan konfigurasi kami sebelumnya dengan --add-modules  jdk.incubator.vector informasi seperti berikut ini:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <enablePreview>true</enablePreview>
    <compilerArgs>
      <arg>--add-modules</arg>
      <arg>jdk.incubator.vector</arg>
    </compilerArgs>
  </configuration>
</plugin>

Dan tentu saja Anda harus menambahkan yang sama untuk ditambahkan ke maven-surefire-plugin konfigurasi untuk mengaktifkan
ITU jdk.incubator.vector modul dalam pengujian Anda juga. Ini berarti bahwa konfigurasi untuk maven-surefire-plugin akan terlihat seperti berikut:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>
      --enable-preview
      --add-modules jdk.incubator.vector
    </argLine>
  </configuration>
</plugin>

Hal ini mengakibatkan a PERINGATAN seperti sebelumnya sebagai berikut:

..
[INFO] --- compiler:3.11.0:compile (default-compile) @ jdk21 ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 2 source files with javac [release 21] to target/classes
[WARNING] using incubating module(s): jdk.incubator.vector
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ jdk21 ---
[INFO] skip non existing resourceDirectory ../jdk21/src/test/resources
[INFO] skip non existing resourceDirectory ../jdk21/src/test/resources-filtered
[INFO]
[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ jdk21 ---
[INFO] Changes detected - recompiling the module! :dependency
[INFO] Compiling 5 source files with javac [release 21] to target/test-classes
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[12,23] string templates are a preview feature and may be removed in a future release.
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[12,23] string templates are a preview feature and may be removed in a future release.
[WARNING] using incubating module(s): jdk.incubator.vector
[WARNING] ../jdk21/src/test/java/com/soebes/jdk21/TemplateTest.java:[5,24] java.lang.StringTemplate is a preview API and may be removed in a future release.
[INFO]
[INFO] --- surefire:3.1.2:test (default-test) @ jdk21 ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
WARNING: Using incubator modules: jdk.incubator.vector
[INFO] Running com.soebes.jdk21.TemplateTest
..

Petunjuk kecil berdasarkan penggunaan JDK21+. Dimulai dengan JDK21, itu JEP-451 telah diintegrasikan ke dalam versi JDK21, yang berarti penggunaan agen yang dimuat secara dinamis, misalnya yang terkenal Mockito perpustakaan menghasilkan Peringatan juga terlihat seperti ini:

..
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.217 s -- in com.soebes.jdk21.SequencedCollectionTest
[INFO] Running com.soebes.jdk21.AFinalClassTest
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
WARNING: A Java agent has been loaded dynamically (/Users/khm/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.5/byte-buddy-agent-1.14.5.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.472 s -- in com.soebes.jdk21.AFinalClassTest
[INFO] Running com.soebes.jdk21.incubator.VectorTest
..

Ini membuatnya perlu untuk menambahkan konfigurasi tambahan XX:+EnableDynamicAgentLoading untuk Anda maven-surefire-plugin pengaturan seperti ini:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <argLine>
      --enable-preview
      --add-modules jdk.incubator.vector
      -XX:+EnableDynamicAgentLoading
    </argLine>
  </configuration>
</plugin>

Contoh kerja lengkap yang jelas membutuhkan JDK21 versi EA terbaru dapat ditemukan Di Sini. Pengkodean yang bagus.