【问题】【Maven】Linux环境下Maven打包问题 —— 提示找不到子模块
创始人
2025-05-30 15:06:34
0

探究完,我都想抽自己嘴巴子了~

背景

父级pom.xml:

...
GOF

...

子模块pom.xml:

...
GOF
...

异常

[ERROR] Child module /data/git/java-demo/GOF of /data/git/java-demo/pom.xml does not exist @

[root@devops java-demo]mvn clean install -e -Dmaven.test.skip=true -f pom.xml
[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 13, column 21
[ERROR] Child module /data/git/java-demo/GOF of /data/git/java-demo/pom.xml does not exist @ @ 
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 13, column 21
[ERROR] Child module /data/git/java-demo/GOF of /data/git/java-demo/pom.xml does not exist @ at org.apache.maven.project.DefaultProjectBuilder.build (DefaultProjectBuilder.java:397)at org.apache.maven.graph.DefaultGraphBuilder.collectProjects (DefaultGraphBuilder.java:414)at org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor (DefaultGraphBuilder.java:405)at org.apache.maven.graph.DefaultGraphBuilder.build (DefaultGraphBuilder.java:82)at org.apache.maven.DefaultMaven.buildGraph (DefaultMaven.java:507)at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:219)at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke (Method.java:498)at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[ERROR]   
[ERROR]   The project com.dongle:practice:1.0.0 (/data/git/java-demo/pom.xml) has 1 error
[ERROR]     Child module /data/git/java-demo/GOF of /data/git/java-demo/pom.xml does not exist
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

说明

  • 模块有大写字符Linux下Maven打包就会失败,Windows无异常
  • 模块修改成小写字符,打包成功。

探究

跟进异常栈信息:

  • org.codehaus.plexus.classworlds.launcher.Launcher.main mvn命令入口
  • org.apache.maven.DefaultMaven.execute 执行mvn命令
  • org.apache.maven.DefaultMaven.buildGraph 构建项目图谱
  • org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor 生成maven项目执行/执行器
  • org.apache.maven.graph.DefaultGraphBuilder.collectProjects 收集验证项目信息
  • org.apache.maven.project.DefaultProjectBuilder.build 生成MavenProject项目信息,每个Module也是一个MavenProject
    在build内部执行逻辑有这样一段逻辑:
        if (recursive) {File basedir = pomFile.getParentFile();List moduleFiles = new ArrayList<>();for (String module : model.getModules()) {if (StringUtils.isEmpty(module)) {continue;}module = module.replace('\\', File.separatorChar).replace('/', File.separatorChar);File moduleFile = new File(basedir, module);if (moduleFile.isDirectory()) {moduleFile = modelProcessor.locatePom(moduleFile);}if (!moduleFile.isFile()) {ModelProblem problem = new DefaultModelProblem("Child module " + moduleFile + " of " + pomFile + " does not exist",ModelProblem.Severity.ERROR,ModelProblem.Version.BASE,model,-1,-1,null);result.getProblems().add(problem);noErrors = false;continue;}if (Os.isFamily(Os.FAMILY_WINDOWS)) {// we don't canonicalize on unix to avoid interfering with symlinkstry {moduleFile = moduleFile.getCanonicalFile();} catch (IOException e) {moduleFile = moduleFile.getAbsoluteFile();}} else {moduleFile = new File(moduleFile.toURI().normalize());}if (aggregatorFiles.contains(moduleFile)) {StringBuilder buffer = new StringBuilder(256);for (File aggregatorFile : aggregatorFiles) {buffer.append(aggregatorFile).append(" -> ");}buffer.append(moduleFile);ModelProblem problem = new DefaultModelProblem("Child module " + moduleFile + " of " + pomFile + " forms aggregation cycle " + buffer,ModelProblem.Severity.ERROR,ModelProblem.Version.BASE,model,-1,-1,null);result.getProblems().add(problem);noErrors = false;continue;}moduleFiles.add(moduleFile);}

好吧,找到这里我好像知道哪里问题了,真是干脆!
忘了windows文件系统不区分大小写了,linux文件系统命名时区分大小写的!!!

定位

项目的GOF模块的目录名是gof!Linux区分到消息,导致module找不到对应的module目录。这时间浪费的,毫无意义,奇葩行为!

解决

  • 保险方案:模块名和目录名一致,建议还是都小写吧,不要奇葩行为了!

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...