实战:Maven构建工具实践-2023.6.21(测试成功)

实战:Maven构建工具实践-2023.6.21(测试成功)

实战:Maven构建工具实践-2023.6.21(测试成功)_第1张图片

目录

实战:Maven构建工具实践-2023.6.21(测试成功)_第2张图片

推荐文章

https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》

实战:Maven构建工具实践-2023.6.21(测试成功)_第3张图片

实验环境

gitlab/gitlab-ce:15.0.3-ce.0
jenkins/jenkins:2.346.3-2-lts-jdk11
apache-maven-3.9.2
openjdk 11.0.18

实验软件

链接:https://pan.baidu.com/s/1adCJwX8-XtMBbmneNUf2og?pwd=0820
提取码:0820
–来自百度网盘超级会员V7的分享

2023.6.21-实战:Maven构建工具实践-(测试成功)

实战:Maven构建工具实践-2023.6.21(测试成功)_第4张图片

1、Maven构建工具配置

官网:https://maven.apache.org/index.html

Maven是一个项目的构建依赖管理工具。通常项目的根目录会存在一个pom.xml文件(该文件用于定义项目的依赖包信息和构建配置)

实战:Maven构建工具实践-2023.6.21(测试成功)_第5张图片

1.spring boot项目生成

初始化一个springboot项目 https://start.spring.io/ (也可以下载一个ide)
如果打不开也可以使用:https://start.aliyun.com/bootstrap.html

一个spring boot项目其实有很多依赖。

生成一个标准的maven项目:

  • 项目类型: Maven Project
  • 语言: Java
  • SpringBoot: 2.7.12 (版本)(随着时间变化版本号会变,默认即可)
  • Metadata
    • Group : 组信息
    • Artifact:包名称
    • Packging: 包格式(Jar、War)
  • Dependencies: 定义项目依赖(最后都会写入Pom.xml)

jar包:可执行的程序。(目前基本是这种)
war包:需要放到容器里,例如tomcat里,需要支持jsp环境的那种,才可以解析。

实战:Maven构建工具实践-2023.6.21(测试成功)_第6张图片

以上配置完成后,点击Generate,生成测试代码。

image-20230619210108004

代码下载完成 后,可以用vscode打开,看下项目代码结构:

2.创建gitlab仓库并上传代码

  • 创建一个devops6-maven-service项目

注意:这里取消勾选初始化仓库配置项。

实战:Maven构建工具实践-2023.6.21(测试成功)_第7张图片

  • 在本地git端将项目代码上传到刚才创建的项目里:

实战:Maven构建工具实践-2023.6.21(测试成功)_第8张图片

Push an existing folder

cd existing_folder
git init --initial-branch=main
git remote add origin http://172.29.9.101:8076/devops6/devops6-maven-service.git
git add .
git commit -m "Initial commit"
git push -u origin main

自己推送过程:

git init --initial-branch=main
git remote add origin http://172.29.9.101:8076/devops6/devops6-maven-service.git
git add .
git commit -m "Initial commit"
git push -u origin main

实战:Maven构建工具实践-2023.6.21(测试成功)_第9张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第10张图片

  • 到gitlab查看推送上来的代码:

实战:Maven构建工具实践-2023.6.21(测试成功)_第11张图片

3.配置maven环境

提前安装好JDK, 然后安装apache-maven-3.9.1。

本次在gitlanci-runner上下载maven:(后面的环境为gitlab runner和jenkins agent都在一台机器上)

1、JDK环境自己之前已经安装好。

image-20230619213016203

如何安装JDK环境,请查看我的另一篇文章!

本地文档路径:实战:Linux下jdk8环境安装(测试成功)-2022.4.16(二进制方式) (jdk11安装方式一样)

实战:Maven构建工具实践-2023.6.21(测试成功)_第12张图片

网络文档路径:https://blog.csdn.net/weixin_39246554/article/details/124221560

实战:Maven构建工具实践-2023.6.21(测试成功)_第13张图片

2、安装apache-maven-3.9.1

实战:Maven构建工具实践-2023.6.21(测试成功)_第14张图片

###1、下载代码
[root@Devops6 ~]#wget https://dlcdn.apache.org/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz --no-check-certificate
[root@Devops6 ~]#ll -h apache-maven-3.9.2-bin.tar.gz
-rw-r--r-- 1 root root 8.9M May  8 17:12 apache-maven-3.9.2-bin.tar.gz
[root@Devops6 ~]#tar zxf apache-maven-3.9.2-bin.tar.gz -C /usr/local/
[root@Devops6 ~]#cd /usr/local/apache-maven-3.9.2/
[root@Devops6 apache-maven-3.9.2]#pwd  /usr/local/apache-maven-3.9.2
/usr/local/apache-maven-3.9.2

###2、配置环境
[root@Devops6 ~]#vim /etc/profile
……
export M2_HOME=/usr/local/apache-maven-3.9.2
export PATH=$M2_HOME/bin:$PATH
[root@Devops6 ~]#source /etc/profile

###3、验证
[root@Devops6 ~]#mvn -v
Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
Maven home: /usr/local/apache-maven-3.9.2
Java version: 11.0.18, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

4.配置Maven镜像源

Maven本地仓库 & 远程仓库

[root@Devops6 conf]#vim /usr/local/apache-maven-3.9.2/conf/settings.xml
  • 本地仓库
${user.home}/.m2/repository

实战:Maven构建工具实践-2023.6.21(测试成功)_第15张图片

  • 远程仓库

实战:Maven构建工具实践-2023.6.21(测试成功)_第16张图片

  • 自己内网一般是会去搭建这样一个代理的

内网搭建一个这样的源,使用nexus去搭建的。

实战:Maven构建工具实践-2023.6.21(测试成功)_第17张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第18张图片

  • 阿里云云效 Maven

https://developer.aliyun.com/mvn/guide?spm=a2c6h.13651104.mirror-free-trial.5.10596e1ab2zbI4

实战:Maven构建工具实践-2023.6.21(测试成功)_第19张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第20张图片

  • 修改maven源为国内阿里源

https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.3e221b11J7CO0d

<mirror>
    <id>aliyunmavenid>
    <mirrorOf>*mirrorOf>
    <name>阿里云公共仓库name>
    <url>https://maven.aliyun.com/repository/publicurl>
mirror>

实战:Maven构建工具实践-2023.6.21(测试成功)_第21张图片

image-20230620063349700

5.手动测试代码

  • 下载代码
[root@Devops6 ~]#cd /data/devops6/
[root@Devops6 devops6]#ls
gitlab  jenkins_agent  jenkins_home
[root@Devops6 devops6]#git clone http://172.29.9.101:8076/devops6/devops6-maven-service.git
Cloning into 'devops6-maven-service'...
Username for 'http://172.29.9.101:8076': root
Password for 'http://[email protected]:8076': 
remote: Enumerating objects: 25, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 25 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (25/25), done.
[root@Devops6 devops6]#ls
devops6-maven-service  gitlab  jenkins_agent  jenkins_home
[root@Devops6 devops6]#cd devops6-maven-service/
[root@Devops6 devops6-maven-service]#ls
mvnw  mvnw.cmd  pom.xml  src
[root@Devops6 devops6-maven-service]#
  • 打包
[root@Devops6 devops6-maven-service]#pwd
/data/devops6/devops6-maven-service
[root@Devops6 devops6-maven-service]#ls
mvnw  mvnw.cmd  pom.xml  src
[root@Devops6 devops6-maven-service]#mvn clean package

实战:Maven构建工具实践-2023.6.21(测试成功)_第22张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第23张图片

  • 打包完成后,我们来启动项目
[root@Devops6 devops6-maven-service]#ls
mvnw  mvnw.cmd  pom.xml  src  target
[root@Devops6 devops6-maven-service]#cd target/
[root@Devops6 target]#ls
classes  demo-0.0.1-SNAPSHOT.jar  demo-0.0.1-SNAPSHOT.jar.original  generated-sources  generated-test-sources  maven-archiver  maven-status  surefire-reports  test-classes
[root@Devops6 target]#java  -jar demo-0.0.1-SNAPSHOT.jar

实战:Maven构建工具实践-2023.6.21(测试成功)_第24张图片

可以看到报错了,提示8080端口被占用了,我们来检查下:

image-20230620071124194

可以看到8080端口被jenkins使用了。

  • 通过自定义端口参数来启动项目
[root@Devops6 target]#java  -jar -Dserver.port=8090  demo-0.0.1-SNAPSHOT.jar

实战:Maven构建工具实践-2023.6.21(测试成功)_第25张图片

通过http://172.29.9.101:8090/访问:

实战:Maven构建工具实践-2023.6.21(测试成功)_第26张图片

出现这个界面就说明ok了。(这里出现这个界面是因为代码里没有配置相关异常的代码,不影响测试。)

  • 我们接着来看下maven的缓存

实战:Maven构建工具实践-2023.6.21(测试成功)_第27张图片

我们删除下这个缓存目录:

[root@Devops6 ~]#rm -rf .m2/repository/

在到项目里清下构建目录:

mvn clean

image-20230620072015818

实战:Maven构建工具实践-2023.6.21(测试成功)_第28张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第29张图片

可以看到,target目录也被清理掉了

然后打包,就可以看到要继续下载依赖包了:

mnv clean package

实战:Maven构建工具实践-2023.6.21(测试成功)_第30张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第31张图片

2、Jenkins与Maven集成

实战:Maven构建工具实践-2023.6.21(测试成功)_第32张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第33张图片

1.创建GitLab仓库

见上部分2.创建gitlab仓库并上传代码内容。

2.创建Jenkins作业

  • Jenkins上创建devops6-maven-servicepipeline类型作业,点击保存。

实战:Maven构建工具实践-2023.6.21(测试成功)_第34张图片

  • 如何做一个静态构建?

添加2个选项参数:

实战:Maven构建工具实践-2023.6.21(测试成功)_第35张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第36张图片

保存后刷新:

实战:Maven构建工具实践-2023.6.21(测试成功)_第37张图片

  • 开始写pipeline代码

我们先简单写一段代码,测试流水线可用性。

pipeline {
    agent {label "build"}
    stages{
        stage("CheckOut"){
            steps{
                script{
                    println("CheckOut")
                }
            }

        }

        stage("Build"){
            steps{
                script{
                    println("Build")
                }
            }

        }        
        
    }
}

实战:Maven构建工具实践-2023.6.21(测试成功)_第38张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第39张图片

以上测试ok。

3.编写Jenkins Pipeline

  • 写下载代码逻辑

如何获取下载代码此部分代码呢?我们使用片段生成器来生成下载部分代码。

实战:Maven构建工具实践-2023.6.21(测试成功)_第40张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第41张图片

checkout([$class: 'GitSCM', branches: [[name: 'main']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: 'srcUrl']]])
pipeline {
    agent {label "build"}
    stages{
        stage("CheckOut"){
            steps{
                script{
                    println("CheckOut")

                    checkout([$class: 'GitSCM', 
                        branches: [[name: "${env.branchName}"]], 
                        extensions: [], 
                        userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
                    
                    sh "ls -l" //验证
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    println("Build")
                }
            }

        }        
        
    }
}

实战:Maven构建工具实践-2023.6.21(测试成功)_第42张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第43张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第44张图片

以上下载部分代码测试ok。

  • 开始写build部分代码
pipeline {
    agent {label "build"}
    stages{
        stage("CheckOut"){
            steps{
                script{
                    println("CheckOut")

                    checkout([$class: 'GitSCM', 
                        branches: [[name: "${env.branchName}"]], 
                        extensions: [], 
                        userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
                    
                    sh "ls -l" //验证
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    println("Build")

                    sh "mvn clean package"
                }
            }

        }        
        
    }
}

实战:Maven构建工具实践-2023.6.21(测试成功)_第45张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第46张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第47张图片

这里会发现,build阶段报错了,提示mvn命令找不到。

那我们给使用mvn命令的绝对路径来再次测试下:

[root@Devops6 ~]#which mvn
/usr/local/apache-maven-3.9.2/bin/mvn
pipeline {
    agent {label "build"}
    stages{
        stage("CheckOut"){
            steps{
                script{
                    println("CheckOut")

                    checkout([$class: 'GitSCM', 
                        branches: [[name: "${env.branchName}"]], 
                        extensions: [], 
                        userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
                    
                    sh "ls -l" //验证
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    println("Build")

                    sh "/usr/local/apache-maven-3.9.2/bin/mvn clean package"
                }
            }

        }        
        
    }
}

实战:Maven构建工具实践-2023.6.21(测试成功)_第48张图片

再次运行:

实战:Maven构建工具实践-2023.6.21(测试成功)_第49张图片

实战:Maven构建工具实践-2023.6.21(测试成功)_第50张图片

这次就测试ok了。我们有缓存了,所以它构建非常快。

  • 但是,现在有个问题:

企业里,能直接这么用吗?–构建命令写死。—显示是不合理的。

因此,我们这里使用变量来优化下代码。

在此流水线新增一个字符类型变量:

实战:Maven构建工具实践-2023.6.21(测试成功)_第51张图片

再改下pipeline代码:

pipeline {
    agent {label "build"}
    stages{
        stage("CheckOut"){
            steps{
                script{
                    println("CheckOut")

                    checkout([$class: 'GitSCM', 
                        branches: [[name: "${env.branchName}"]], 
                        extensions: [], 
                        userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
                    
                    sh "ls -l" //验证
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    println("Build")

                    sh "${env.buildShell}"
                }
            }

        }        
        
    }
}

实战:Maven构建工具实践-2023.6.21(测试成功)_第52张图片

再次运行测试:

实战:Maven构建工具实践-2023.6.21(测试成功)_第53张图片

测试ok。

FAQ

maven常用命令

  • mvn clean 清理构建目录
  • mvn clean package 打包
  • mvn clean install 打包部署
  • mvn clean test 单元测试
  • mvn clean package -f …/pom.xml -f指定pom位置\
  • mvn clean package -DskipTests / -Dmaven.test.skip=true 跳过单测
  • mvn deploy 发布包到制品库

Maven vs Gradle

后端:
目前Java用的最多的就是Maven了;
Gradle的性能比Maven是要强一些;(有时候,安卓打包也会用到这个Gradle)
现在基本很少用Ant了,新项目用的是Gradle;
前端:
nodeJs工具:react,vue

maven的缓存目录

在调流水线的时候,遇到很多Maven构建失败的问题。大家都去找Jenkins的问题,但最后发现是Maven这个工具出现了一些问题(使用时可能参数调错了)。Maven在构建代码的时候,经常会出现构建失败,编译不通过现象。Maven跑测试的时候也可能会报错。这个和你的项目也可能有关系,比如你项目的类找不到了,那可能也会报错了。也就是说,后续在排错时,不仅要考虑工具问题,也要考虑代码本身层面的因素。

也可以使用阿里云这种方式生成spring boot项目

  • 打开链接:
    如果打不开也可以使用:https://start.aliyun.com/bootstrap.html
    实战:Maven构建工具实践-2023.6.21(测试成功)_第54张图片

  • 按如下进行配置:
    实战:Maven构建工具实践-2023.6.21(测试成功)_第55张图片
    选择一个spring web组件,再添加一个spring mvc示例:
    实战:Maven构建工具实践-2023.6.21(测试成功)_第56张图片

    实战:Maven构建工具实践-2023.6.21(测试成功)_第57张图片

  • 配置完成后,下载代码:
    实战:Maven构建工具实践-2023.6.21(测试成功)_第58张图片

项目pom.xml和maven里settings.xml之间的关系

注意:这里容易混淆的一点是:

1.项目的根目录会存在一个pom.xml文件:(该文件用于定义项目的依赖包信息和构建配置);

2.maven软件包里的settings.xml:是管理maven的;(后期会该改个配置文件)

  • 项目pom.xml

  • maven里settings.xml

实战:Maven构建工具实践-2023.6.21(测试成功)_第59张图片

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

微信二维码
x2675263825 (舍得), qq:2675263825。

实战:Maven构建工具实践-2023.6.21(测试成功)_第60张图片

微信公众号
《云原生架构师实战》

实战:Maven构建工具实践-2023.6.21(测试成功)_第61张图片

语雀

https://www.yuque.com/xyy-onlyone

实战:Maven构建工具实践-2023.6.21(测试成功)_第62张图片

csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

实战:Maven构建工具实践-2023.6.21(测试成功)_第63张图片

知乎
https://www.zhihu.com/people/foryouone

实战:Maven构建工具实践-2023.6.21(测试成功)_第64张图片

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

你可能感兴趣的:(maven,java,spring)