Azure通过GitHub Action部署JSF项目时Maven编译失败如何解决?
JSF项目GitHub Action部署Azure Maven编译错误修复方案
你遇到的编译错误核心原因是Maven编译插件版本过旧、运行环境JDK版本与项目指定的编译版本不兼容,以及高版本JDK不再支持endorsed目录机制。
解决方案
方案1:对齐运行环境JDK版本(推荐,改动最小)
- 首先修改你的GitHub Action workflow配置,指定构建使用JDK 8,该版本完全兼容你配置的Java 7编译目标和endorsed目录机制,示例配置片段:
- name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: '8' distribution: 'temurin' cache: maven
- 升级maven-compiler-plugin到兼容JDK 8的版本,把pom中对应插件版本从3.1改为3.8.1:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.7</source> <target>1.7</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> </plugin>
方案2:适配高版本JDK(如果需要使用JDK 11+运行)
如果你需要使用更高版本JDK构建,需要移除废弃的endorsed相关配置:
- 删除pom中maven-dependency-plugin里关于copy javaee-endorsed-api到endorsed目录的整个execution配置
- 把javaee-endorsed-api改为普通provided依赖,添加到pom的dependencies节点下:
<dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-endorsed-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies>
- 删除maven-compiler-plugin配置中的
<compilerArguments>节点,同时升级插件版本,调整source和target到对应JDK版本,比如用JDK 11的话:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin>
- 同步修改GitHub Action的JDK版本配置为对应版本即可。
内容的提问来源于stack exchange,提问作者hieund
相关产品推荐
相关产品推荐

