构建maven多模块项目时报错:Child module of does not exist

     在许晓斌著《maven实战》第209页,按照书上步骤在hudson中构建一个account的多模块maven项目,构建命令为mvn  clean deploy ,意思为构建完成部署到私服仓库中,但是构建过程中出错了:

[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project com.juvenxu.mvnbook.account:account-parent:1.0.0-SNAPSHOT (C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\pom.xml) has 3 errors
[ERROR]     Child module C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\account-email of C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\pom.xml does not exist
[ERROR]     Child module C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\account-persist of C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\pom.xml does not exist
[ERROR]     Child module C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\account-captcha of C:\Users\lvyuan\.hudson\jobs\account\workspace\trunk\account-parent\pom.xml does not exist
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[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

    

     相同的项目在eclipse中就可以构建成功,但是通过命令行或者在hudson中就构建失败,既然报错信息是找不到子模块,我先把项目结构截个图:

构建maven多模块项目时报错:Child module of does not exist


     然后看一下account-parent的pom关于子模块的的部分:


<modules>
    <module>account-email</module>
    <module>account-persist</module>
    <module>account-captcha</module>
 </modules>
 
    

     这整个项目是一个多模块的maven项目,按照书上步骤来的,使用了maven聚合和继承技术,我一看modules标签中包含每个子模块啊,为什么构建会报错说找不到呢

     后来看到一种解决方案是在modules标签外面包装一层分析器,就OK了,但是还不明白为什么,如下:


<profiles>
    <profile>
       <modules>
          <module>account-email</module>
          <module>account-persist</module>
          <module>account-captcha</module>
       </modules>
    </profile>
</profiles>

   

     另外,如果你执行的是mvn clean deploy命令,首先必须在项目的每个pom文件定义分发管理配置:


<distributionManagement>  
     <repository>  
        <id>nexus-releases</id>  
        <url>http://192.168.11.13:8081/nexus/content/repositories/releases/</url> 
     </repository>  
     <snapshotRepository>  
        <id>nexus-snapshots</id>  
        <url>http://192.16.11.13:8081/nexus/content/repositories/snapshots/</url> 
     </snapshotRepository>  
</distributionManagement>  
    

     如果没有配置distributionManagement标签,构建也会失败;配置了这个还不够,还必须在你maven的配置文件settings.xml中配置你私服的用户名密码验证信息,因为匿名用户没有上传构建的权限:


<servers>
   <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
   </server>
   <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
   </server>
</servers>
   

    如果你没有搭建私服,那在hudson中新建构建任务时,构建命令就写clean  install或clean package吧,不要用deploy


    参考地址:https://*.com/questions/26021141/maven-child-module-does-not-exist