如何让maven使用已安装的java创建jar文件?

问题描述

我正在尝试从我的 spring 项目创建一个 jar 文件。我使用命令 mvn package。这些是我的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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cgny</groupId>
    <artifactId>apm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>apm</name>
    <description>APM</description>
    <properties>
        <java.version>16</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- latest influxdb dependency -->
        <dependency>
            <groupId>org.influxdb</groupId>
            <artifactId>influxdb-java</artifactId>
            <version>2.21</version>
        </dependency>


        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180130</version>
        </dependency>

        <!-- XMl Parser -->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom2</artifactId>
            <version>2.0.3</version>
        </dependency>

        <!-- thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.5.2</version>
        </dependency>



    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

源和目标已设置为 java 1.8,但是当我使用 java -jar 运行 jar 文件时,出现 UnsupportedClassversion 错误

我知道这是因为编译项目的 java 版本与我用来运行 jar 文件的版本不同,但我的 java 版本是 1.8.0_51,我也尝试将其作为目标和源pom 文件,结果相同。

JAVA_HOME 和 PATH 变量已设置为正确的目录。

如何配置 maven 使其仅使用已安装的 java?

编辑:错误信息-

Exception in thread "main" java.lang.UnsupportedClassversionError: com/cgny/apm/ApmApplication has been compiled by a more recent version of the Java Runtime (class file version 60.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 org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:151)
        at java.lang.classLoader.loadClass(UnkNown Source)
        at java.lang.class.forName0(Native Method)
        at java.lang.class.forName(UnkNown Source)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

解决方法

该错误意味着 com/cgny/apm/ApmApplication 是用 Java 16 编译的,因此不能用于 Java 8。

,

编译好的 jar 很好,我刚刚安装了 java 8,它以某种方式覆盖了 JAVA_HOME 和 Path 变量。 java -version 现在显示 16 而不是 1.8。