You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin14项目构建遇Unsupported class file错误及Java版本适配问题

Vaadin14项目Java版本兼容问题解答

问题背景

原本基于Java 1.8运行的Vaadin14项目,升级Linux发行版后系统默认Java变为21,执行mvn package -Pproduction时出现错误:

[ERROR] Failed to execute goal com.vaadin:vaadin-maven-plugin:14.9.5:build-frontend (default) on project org-cubr-ui-vaadin: Execution default of goal com.vaadin:vaadin-maven-plugin:14.9.5:build-frontend failed: Unsupported class file major version 65 -> [Help 1]

已通过update-alternatives --config java将默认Java设为1.8,但构建仍报错,用mvn -X启动发现Maven初始还是用Java21。


问题1:为何Maven不使用update-alternatives配置的Java版本?是否需要修改pom.xml?

  • Maven实际使用的Java版本不仅受系统默认java命令影响,还受JAVA_HOME环境变量控制。Linux发行版升级后,JAVA_HOME可能仍指向Java21的安装路径,此时即便update-alternatives切换了默认java命令,Maven依然会优先读取JAVA_HOME的值选择JDK。另外,部分终端会话或IDE可能缓存了旧环境变量,导致新配置未生效。
  • 不需要强制修改pom.xml,但可以添加maven-compiler-plugin配置明确指定编译版本,避免环境不一致:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <fork>true</fork> <!-- 强制使用指定JDK版本 -->
                <executable>${JAVA_8_HOME}/bin/javac</executable> <!-- 可选,直接指定Java8的javac路径 -->
            </configuration>
        </plugin>
    </plugins>
</build>
  • 解决步骤:
    1. 检查终端JAVA_HOME:执行echo $JAVA_HOME,若输出为Java21路径,修改环境变量配置文件(如~/.bashrc、~/.zshrc或/etc/profile),将JAVA_HOME指向Java1.8安装目录,再执行source ~/.bashrc生效。
    2. 验证Maven版本:执行mvn -v,确认输出的Java版本为1.8后再重新构建。

问题2:能否在新版本Linux发行版(高版本Java环境)下构建Vaadin14/Maven项目?

可以,但需要做适配:

  • Vaadin14.9.5官方推荐运行环境为Java8或11,对Java21的兼容性不足(错误中的major version 65对应Java21),但可以通过以下方式在高版本Java环境中完成构建:
    • 临时指定:构建时直接指定Java8的环境变量,如JAVA_HOME=/path/to/java8 mvn package -Pproduction。
    • 全局配置:修改Maven的settings.xml(位于~/.m2/settings.xml或/etc/maven/settings.xml),添加profile强制使用Java8:
      <profiles>
          <profile>
              <id>java8</id>
              <properties>
                  <maven.compiler.source>1.8</maven.compiler.source>
                  <maven.compiler.target>1.8</maven.compiler.target>
                  <JAVA_8_HOME>/path/to/java8</JAVA_8_HOME>
              </properties>
          </profile>
      </profiles>
      <activeProfiles>
          <activeProfile>java8</activeProfile>
      </activeProfiles>
      
  • 若长期在高版本Java环境下开发,可考虑升级Vaadin到支持Java21的版本(如Vaadin24 LTS),但这会涉及代码适配,需评估项目复杂度。
  • 注意:构建阶段必须用Vaadin14支持的JDK版本(Java8或11),运行阶段可尝试在Java21环境测试,但需注意兼容性问题。

内容的提问来源于stack exchange,提问作者abcdefg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:22:44