JVM / Java / Versions / Mutliple Versions

1. Multiple versions

 
PS:
notepad $PROFILE

function mvn8{
    $jdk = "C:\Program Files\Java\jdk-1.8_462"

    $env:JAVA_HOME = $jdk
    $env:PATH = "$jdk\bin;" + 
        [System.Environment]::GetEnvironmentVariable("PATH","Machine") + ";" +
        [System.Environment]::GetEnvironmentVariable("PATH","User")

    mvn @args
}

function mvn25 {
    $jdk = "C:\Program Files\Java\jdk-25.0.3+9"

    $env:JAVA_HOME = $jdk
    $env:PATH = "$jdk\bin;" + 
        [System.Environment]::GetEnvironmentVariable("PATH","Machine") + ";" +
        [System.Environment]::GetEnvironmentVariable("PATH","User")

    mvn @args
}


function java8 {
    $jdk = "C:\Program Files\Java\jdk-1.8_462"

    $env:JAVA_HOME = $jdk
    $env:PATH = "$jdk\bin;" + 
        [System.Environment]::GetEnvironmentVariable("PATH","Machine") + ";" +
        [System.Environment]::GetEnvironmentVariable("PATH","User")

    java @args
}

function java25 {
    $jdk = "C:\Program Files\Java\jdk-25.0.3+9"

    $env:JAVA_HOME = $jdk
    $env:PATH = "$jdk\bin;" + 
        [System.Environment]::GetEnvironmentVariable("PATH","Machine") + ";" +
        [System.Environment]::GetEnvironmentVariable("PATH","User")

    java @args
}

function code126 {
    $code = "D:\Program Files\VSCode-win32-x64-1.126.0\Code.exe"

    & $code @args
}

2. Pom.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
            https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>brd-ppf</groupId>
    <artifactId>basics</artifactId>
    <version>0.1.0</version>

    <properties>
        <maven.compiler.release>25</maven.compiler.release>
    </properties>

    <dependencies>
        <dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <!-- Compiler -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <release>25</release>
                </configuration>
            </plugin>

            <!-- Executable JAR -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>basics.RecordExample</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

        </plugins>
    </build>
    
</project>

3. Pattern Matching

 
public class PatternMatchingExample {
    void main() {  // Java 25

        // Java 8
        Object obj = "Hello";
        if (obj instanceof String) {
            String str = (String) obj;
            System.out.println(str.length());
        }

        // Java 17
        Object obj2 = "Hello";
        if (obj2 instanceof String str) {
            System.out.println(str.length());
        }

        // Java 21
        Object obj3 = new Person("Bob", 30);
        if (obj3 instanceof Person(String name, int age)) {
            System.out.println(name + " is " + age);
        }
    }
}

record Person(String name, int age) {}  // Java 17