java - 无法执行 Maven .jar
问题描述
作为前言(你可以跳过这个),我是一个相对缺乏经验的程序员(与行业专业人士相比),我想尝试使用 Maven 作为依赖管理器,并作为生成自包含 .jar 的更好方法文件,用于我的高级科学博览会项目。
(如果您跳过了上一段,请从这里开始阅读)我能够清理、验证、编译和打包我的 Maven 项目。生成 .jar 文件,在我的文件资源管理器中,它被识别为可执行的 .jar 文件。我正在使用 JDK 11.0.2。当我在我的文件资源管理器中双击 .jar 文件时,我的光标会在没有任何反应之前做一个小小的“我在做某事”旋转蓝色圆圈一瞬间。当我尝试使用运行文件时
java -jar Project-Name-alpha.jar
我收到以下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/CompanyName/Main 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)
我的 pom.xml 文件中的相关部分是:
<groupId>com.CompanyName</groupId>
<artifactId>ProjectName</artifactId>
<version>alpha</version>
<packaging>jar</packaging>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>dependency-jars/</classpathPrefix>
<mainClass>com.FoxInnovations.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin> <plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency-jars/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
我认为问题可能是我没有正确的 java JRE 但无法找到 JRE 11,我认为 JDK 通常包含相应的 JRE。
我敢打赌,我可能犯了一些我忽略的菜鸟错误。
如果我错误地没有包含对解决此问题很重要的内容,请告诉我,我会尽快添加。
解决方案
您正在使用低于用于编译的版本的 java 版本执行 jar。您可能需要为 maven 编译器插件设置 java 目标和源。
<properties>
<maven.compiler.source>1.11</maven.compiler.source>
<maven.compiler.target>1.11</maven.compiler>target>
</properties>
推荐阅读
- android - 使用 Firestore 的 Recycler View 在数据更改时显示在顶部
- github - 有没有办法删除 github 工作流
- java - 使用 JpaRepository 进行内部连接,无需编写查询
- javascript - 关于 html DOM 事件的安全问题
- php - Xampp sql 数据库错误1049。我在xampp 中将sql 文件保存在哪里?
- ruby-on-rails - 是否可以在 rails 中有多个数据库连接池进行切换?
- django - 在哪里使用 Vue/Django 项目进行 API 调用
- mysql - phpMyAdmin - “导入成功完成” | “错误” - 没有表
- typescript - 为使用条件类型约束索引的嵌套类型创建类型别名
- php - 通过以 $O00OO0=base64_decode 开头的 hack 注入 php 代码。所以我确实使用 unphp.net 对其进行了解码,但这又返回了一个加密的代码