问题
ai-job-hunting-server 在任何非作者本机的环境下都无法编译,并且 Maven 不会输出任何有效的错误信息,排查成本很高。
复现
git clone https://github.com/yangfeng20/ai-job.git
cd ai-job/ai-job-hunting-server
mvn clean compile
输出:
[INFO] --- compiler:3.11.0:compile (default-compile) @ ai-job-hunting ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 136 source files with javac [forked debug release 17] to target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.548 s
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile
(default-compile) on project ai-job-hunting: Compilation failure -> [Help 1]
注意:Compilation failure 下面没有列出任何一条 javac 诊断信息,而且 136 个源文件在 1.5 秒内就"编译"完了 —— 实际上 javac 根本没有启动。加 -e / -X 也看不到根因。
根因
ai-job-hunting-server/pom.xml 第 241-242 行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
<release>17</release>
<fork>true</fork>
<executable>D:\Program Dev Kit\JDK\jdk-17.0.11+9\bin\javac.exe</executable>
</configuration>
</plugin>
<executable> 指向的是作者本机的 JDK 安装路径。其他人机器上该路径不存在,<fork>true</fork> 派生的 javac 进程直接启动失败,maven-compiler-plugin 在这种情况下不会把底层错误透传出来,所以报错是空的。
修复
删掉 <fork> 和 <executable> 两行,改用运行 Maven 的 JDK 即可:
<configuration>
<source>17</source>
<target>17</target>
<release>17</release>
</configuration>
本地验证:删除这两行后 mvn clean compile 通过,生成 146 个 class 文件,无需其他改动。
如果确实需要保留指定 JDK 的能力,建议改成可覆盖的属性,并默认走系统 JDK:
<properties>
<maven.compiler.fork>false</maven.compiler.fork>
</properties>
或者用 maven-toolchains-plugin,让使用者在自己的 ~/.m2/toolchains.xml 里声明 JDK 位置。
环境
- Windows 11
- Apache Maven 3.9.11
- OpenJDK 17.0.12 LTS
- 提交:
e2503ff(master 最新)
顺带一提,同样的问题在 ASCII 路径和含中文的路径下都能复现,与路径编码无关。
问题
ai-job-hunting-server在任何非作者本机的环境下都无法编译,并且 Maven 不会输出任何有效的错误信息,排查成本很高。复现
git clone https://github.com/yangfeng20/ai-job.git cd ai-job/ai-job-hunting-server mvn clean compile输出:
注意:
Compilation failure下面没有列出任何一条 javac 诊断信息,而且 136 个源文件在 1.5 秒内就"编译"完了 —— 实际上 javac 根本没有启动。加-e/-X也看不到根因。根因
ai-job-hunting-server/pom.xml第 241-242 行:<executable>指向的是作者本机的 JDK 安装路径。其他人机器上该路径不存在,<fork>true</fork>派生的 javac 进程直接启动失败,maven-compiler-plugin 在这种情况下不会把底层错误透传出来,所以报错是空的。修复
删掉
<fork>和<executable>两行,改用运行 Maven 的 JDK 即可:本地验证:删除这两行后
mvn clean compile通过,生成 146 个 class 文件,无需其他改动。如果确实需要保留指定 JDK 的能力,建议改成可覆盖的属性,并默认走系统 JDK:
或者用 maven-toolchains-plugin,让使用者在自己的
~/.m2/toolchains.xml里声明 JDK 位置。环境
e2503ff(master 最新)顺带一提,同样的问题在 ASCII 路径和含中文的路径下都能复现,与路径编码无关。