Skip to content

编译失败:pom.xml 硬编码了作者本机的 JDK 绝对路径,导致其他人 clone 后无法编译(且报错信息为空) #28

Description

@sixiaopangai

问题

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 路径和含中文的路径下都能复现,与路径编码无关。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions