构建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:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentpom.xml) has 3 errors
[ERROR]     Child module C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentaccount-email of C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentpom.xml does not exist
[ERROR]     Child module C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentaccount-persist of C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentpom.xml does not exist
[ERROR]     Child module C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentaccount-captcha of C:Userslvyuan.hudsonjobsaccountworkspace	runkaccount-parentpom.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中就构建失败,既然报错信息是找不到子模块,我先把项目结构截个图:


然后看一下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://stackoverflow.com/questions/26021141/maven-child-module-does-not-exist