代码之家  ›  专栏  ›  技术社区  ›  BullyWiiPlaza

为较低的JRE版本编译Java代码[duplicate]

  •  2
  • BullyWiiPlaza  · 技术社区  · 7 年前

    Java 10+ 基于源代码,我想编译一个较低版本的Java(例如。 Java 8 )不需要修改源代码本身。我希望用户 爪哇8 已安装以能够运行可执行文件 JAR 文件。

    这是可能的吗?如果可以,如何使用 maven ? 我没有找到任何合理的指南。降低 source target

    LauncherClient.java :

    import lombok.Getter;
    import lombok.val;
    
    public class LauncherClient
    {
        @Getter
        private String lombok = "Lombok";
    
        public static void main(String[] arguments)
        {
            val launcherClient = new LauncherClient();
            var message = "Hello world, ";
            System.out.println(message + launcherClient.getLombok());
        }
    }
    

    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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>groupId</groupId>
        <artifactId>Java11Test</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>LATEST</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration>
                        <source>11</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
                <plugin>
                    <!-- Build an executable JAR -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>LauncherClient</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    运行可执行文件时 通过命令行使用

    java -jar Java11Test-1.0-SNAPSHOT.jar
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.UnsupportedClassVersionError: LauncherClient has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
    

    使用 Java 11 工作正常:

    "C:\Program Files\Java\jdk-11.0.1\bin\java.exe" -jar Java11Test-1.0-SNAPSHOT.jar
    Hello world, Lombok
    
    0 回复  |  直到 7 年前