1.项目结构

jenkins maven 构建java jenkins构建maven多模块项目_maven多模块

经过思考,我的项目既结合了横向分层又结合了纵向封层。

最顶层的是main的父pom文件,打包方式是pom

main模块的子模块有:official,user,auth-jwt,common,global-config,global-handle,除了official和user的打包方式是pom外,其他都是jar,作为公共模块

user模块的子模块有:user-dao,user-main,user-model,user-service,user-web,除了user-main这个入口打包方式为war外,其余都是jar

official模块的子模块有:official-dao,official-main,official-model....,除了official-main这个入口打包方式为war,其余都是jar

2.本地打包

本地打包,要分几个步骤:

1.当你本地的maven仓库还没有该maven项目时,即在本地,你之前没有打包过这个项目,那么就需要先将打包方式为pom的模块中的modules标签注释掉,注意是所有的打包方式为pom的模块。这里就是main,user,official这3个模块。因为不注释,直接打包会报错,比如我现在想打包user-main模块,然后直接install这个模块,是会报错的,因为他连user模块都找不到,如果你install user模块,也会报错,因为找不到main模块。

2.install 所有打包方式为pom的模块,这一步的作用相当于是声明所有的父pom,告诉之后会使用到他们的子模块,我在maven本地仓库是存在的,不用去远程仓库找我

3.去掉第一步打的所有注释

4.我现在想要install user-main这个模块,这个模块的打包方式是war,那么我先进入main模块的父pom文件所在的文件目录,即顶级父pom文件所在目录,然后执行:

mvn clean install -pl user/user-main -am -amd

注意这里要使用命令行的方式,因为可以看到我们是设置了参数的,-pl 作用是指定你要打包哪个模块,-am和-amd大致意思就是能够自动帮你找到需要的依赖,如果依赖没有打包,也会自动给依赖进行打包。这里其实没有必要加-amd

3.使用jenkins发布醒目

1.这里打包也是和本地打包类似,如果你是在服务器新创建的maven仓库,需要先把所有打包方式为pom的文件中的modules全部注释,然后上传代码到码云,然后在jenkins上新建项目,最后构建项目。

2.去掉所有modules的注释,再次提交到码云,然后构建

jenkins maven 构建java jenkins构建maven多模块项目_docker_02

 

jenkins maven 构建java jenkins构建maven多模块项目_报错_03

jenkins maven 构建java jenkins构建maven多模块项目_maven多模块_04

这里构建后的操作中 可以看到source files,remote directory都是空的,就是不发文件的意思,因为我在上一步已经将war包放到我想要的地方了,但是还是要使用这个工具进行tomcat的重启。这里有个坑,我为什么不直接用上面那种方法去操作完所有指令,而要用这个工具,多次一举呢?因为上面那个工具执行不了tomcat的启动shell脚本,一执行startup.sh就会报错没有jdk或jre环境,但是其实我容器和host主机都是有java环境的,所以有点蒙,最后还是决定使用send file ... over ssh这个来启动tomcat.

execute shell script on remote host using ssh,该功能需要安装SSH插件,并在系统设置中将SSH remote hosts设置一下

 

4.坑

由于我测试时在jenkins的全局工具里面切换过maven,jdk,或者其他什么操作,导致我在执行clean install 或install 命令时报错:

Failedto execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile(default-compile) on project taotao-manager-pojo: Compilation failure

或者
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project yqdataservice-core-model: Failed to clean project: Failed to delete 

原因:jenkins创建的项目出问题了

解决方法:重新创建一个jenkins项目搞,项目名字和之前的不一样即可,就下图那个按钮

jenkins maven 构建java jenkins构建maven多模块项目_docker_05