构建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