Java >> Java tutorial >  >> JDK

JDK 11:Tag en enkelt-fil Java-kildekode-programmer på tur

JDK 11 Early Access Builds inkluderer preview-funktionalitet relateret til JEP 330 ("Start Single File Source Code Programs").

Jeg har skrevet om JEP 330 før i indlæg "Shebang kommer til Java?" og "JEP 329 og JEP 330 foreslået til JDK 11", får jeg taget denne funktion ud på en tur i dette indlæg takket være JDK 11 Early Access Builds.

Til denne demonstration bruger jeg den seneste (i skrivende stund) OpenJDK JDK 11 Early Access Build 24 .

En af de første indikationer på, at understøttelse af JEP 330 er inkluderet i denne JDK-distribution, ses ved brug af -help flag (java -help ):

Som vist på det sidste billede starter "hjælpen" med en "brug"-sætning, og det sidste eksempel i brugssætningen beskriver, hvordan du bruger Java-starteren (java) til at køre enkeltfils kildekodeprogrammer. Specifikt viser outputtet følgende "brug" med den brug, der er emnet for dette indlæg fremhævet her:

Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)

For at demonstrere denne funktion vil jeg bruge et simpelt eksempel tilpasset (meget lidt) fra det, der er angivet i Mario Torre-indlægget den 24. maj 2018 på OpenJDK jdk-dev-mailinglisten.

helloYou.jv

#!/bin/java
public class Hello
{
   public static void main(final String[] args)
   {
      final String name = System.console().readLine("\nPlease enter your name: ");
      System.console().printf("Hello, %s!%n", name);
   }
}

Jeg har kaldt denne fil helloYou.jv . Bemærk, at det IKKE ender med .java udvidelse, som almindelige Java-kildekodefiler slutter med, og jeg matchede ikke navnet på filen med navnet på klassen. Faktisk startede jeg filens navn med et lille bogstav!

Når jeg prøver at køre denne fil direkte med OpenJDK 11 EA-24, ser jeg en fejl ("Kunne ikke finde eller indlæse hovedklassen helloYou.jv"):

Denne fejl opstår, fordi JEP 330-understøttelsen i denne build med tidlig adgang er en "preview"-funktion. Følgende skærmbillede viser, at det virker, når jeg sender flagene --source=11 og --enable-preview til Java launcher.

Jeg fremhævede i mit indlæg "Shebang kommer til Java?" at det lød som om, at enkeltfil-kildeprogrammer, der blev brugt med denne JEP 330-understøttelse, ikke ville få lov til at slutte med .java udvidelse (hvilken udvidelse vil være reserveret til traditionelle Java-kildefiler). Dette ser ud til at være tilfældet som vist i det næste skærmbillede, hvor jeg forsøger at køre denne funktion mod samme kode som ovenfor, men nu med filnavnet helloYou.java .

Det sidste billede viser, at vi ikke kan køre .java filer med en shebang, fordi de behandles som almindelige Java-filer og dermed skal opfylde specifikationen for almindelige Java-kildekodefiler.

Med denne build for tidlig adgang, hvis jeg kommenterer shebang-linjen, kan jeg køre den enkelte kildekodefil helloYou.java (selv med .java udvidelse og uden --enable-preview flag).

Havde jeg prøvet den sidste manøvre med OpenJDK JDK 10, ville et forsøg på at køre en Java-kildekodefil som den, der lige er vist, frembringe den tidligere diskuterede fejlmeddelelse:"Fejl:Kunne ikke finde eller indlæse hovedklassen helloYou.java".

Dette indlæg har været et første kig på forhåndsvisningsfunktionen enkeltfils kildekodeprogrammer, der nu er tilgængelige i JDK 11 Early Access Builds.

Java tag