构建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中就构建失败,既然报错信息是找不到子模块,我先把项目结构截个图:
然后看一下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