朝着先能干活的方向努力。。。奥利给!!!01

本文记录了一位开发者从学习SpringBoot到深入理解Maven的过程,包括搭建开发环境、掌握CURD操作,以及通过实际项目学习。通过分析项目结构、pom.xml配置,理解了依赖管理、数据校验等概念。作者强调了理论与实践相结合的重要性,提出通过example项目巩固所学,并探讨了dependencyManagement、exclusions、scope等关键配置的作用。
摘要由CSDN通过智能技术生成

第一个礼拜慌张,搭建了开发环境,直接上springboot,后来感觉学不懂,然后周末重新定义了学习路线

第二个礼拜学习了maven  mybatis  spring springmvc,这个时候掌握了接口、curd

第三个礼拜 springboot,这个时候掌握了数据校验

但是一直搞这些理论、简单的demo项目也不个办法,我想该捅破窗户纸了,先从example上手吧,不懂就问。。。。

不然可能第四个礼拜就来活了,,,,,干起来。

学example、再看看研发相关系统、中间件、搞起来。。。。。。。

example学习

1.下载项目

git clone -b 分支名 远程仓库地址

2.用idea打开项目

3.观察项目是pom,因此先用maven下载依赖

4.观察项目目录结构,一个项目下有三个module

5.从外层父项目的pom看起,一行一行仔细的看,有不懂的记起来,学一下

尽管之前学习了,maven。但是你发现你学习的东西,和你做项目的东西可能并不能做到知行合一。因此还会有很多不知道的东西,不过不要紧直接通过这个看就能好一些,通过项目才能看出更多的问题。

<packaging>pom</packaging>

这是指项目的打包类型。java的项目一般用maven进行依赖管理,就像node用npm管理依赖一样。java项目通常很大,一个java项目下会有几个模块,每个模块就相当于是一个子项目。

因此可以想,如果一个java项目下面有2个module,那么在这个项目中,你就能看到3个pom文件。因为java项目用pom管理,父项目一个pom,剩下的两个子项目2个pom。

从项目的打包类型说起,所有的父项目的打包类型都为pom。父项目的pom比较值得关注,因为父项目的pom实际上将各个模块的通用部分抽离出来管理,各个子模块的pom放各自个性的部分。

说道父项目,也不得不提起一个modules。父项目的pom怎么管理子项目的呢,通过module将所有子项目引进。再用maven进行项目build的时候,实际上maven内部做了很多打包的工作,这个以后在学。

反过来,说道子项目,也不得不提起一个parent。作为子项目,也是需要明确自己的父项目是谁的,子项目会在其子pom的开头声明对父级的应用。另外子项目的打包类型只能是jar\war

目前我们项目是一个父项目,三个子module。子module的打包类型全为jar,父级项目的打包类型为pom

总结目前example项目,父级pom打包类型为pom,三个子项目打包类型全为jar

<properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <elasticsearch.version>6.3.2</elasticsearch.version>
   <netty.all.version>4.1.11.Final</netty.all.version>
   <mapstruct.version>1.3.1.Final</mapstruct.version>
</properties>

之前学习的时候,也对properties元素有一点印象,但是看完这个就不知道为什么了这里要这么写了

其实properties完全可以理解,就是pom中配置,可以把pom文件中重复出现的值抽离出来,这样就不用多次定义了。比如版本号,如果pom中依赖有些依赖的版本号是一样的就可以抽离出来,方便管理。这里的第一个配置是让整个项目统一为utf-8的编码

如下为properties定义的常量,在pom中的使用,在java中发现一个比较有意思的,就是配置文件中的值,基本都可以用${}来获取挺方便

<dependency>
   <groupId>org.elasticsearch.client</groupId>
   <artifactId>transport</artifactId>
   <version>${elasticsearch.version}</version>
</dependency>
<dependency>
   <groupId>org.elasticsearch.client</groupId>
   <artifactId>elasticsearch-rest-client</artifactId>
   <version>${elasticsearch.version}</version>
</dependency>

继续看

<dependencyManagement>
   <dependencies>

      <dependency>
         <groupId>com.github.pagehelper</groupId>
         <artifactId>pagehelper-spring-boot-starter</artifactId>
         <version>1.2.12</version>
      </dependency>

</dependencies>

</dependencyManagement>

看到这里,就能看到dependencyManagement这个元素了。这个元素说实话之前也见过,但是真不懂这玩意是干啥的。。。。

首先说明一点,就是dependencyManagement这个元素一般出现在父级pom配置中。maven使用这个主要就是用它来管理项目依赖版本号的。使用pom中的dependencyManagement能够让所有子项目中引用一个依赖而不用显示列出版本号。

其实这样做的好处很明显,就是许多子项目痘印用同一个依赖,这样就能在父级项目中统一这个依赖的版本号,当依赖升级的时候也好管理,各个子项目如果想使用不同的依赖也可以个性化。

另外有一个很重要的点:dependencyManagement只是负责声明依赖,并不实现引入,所以子项目的pom需要显示声明需要用的依赖。

如下,便是子pom中的使用,可以看到的确是不用声明依赖的版本号的

<!--pagehelper-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>

再来看一个exclusions

<dependency>
   <groupId>org.elasticsearch</groupId>
   <artifactId>elasticsearch</artifactId>
   <version>${elasticsearch.version}</version>
   <exclusions>
      <exclusion>
         <artifactId>jackson-dataformat-yaml</artifactId>
         <groupId>com.fasterxml.jackson.dataformat</groupId>
      </exclusion>
   </exclusions>
</dependency>

之前maven里确实也有看到这个,但是呢发现这个东西真的自己就是不知道他啥意思

我们知道maven最强大的地方就是,他不仅能够帮我们导入依赖,还能帮我们管理依赖之间的关系。当项目需要导入a依赖却不需要a依赖中的某个jar包时,就用exclusions

再来看一个scope

<dependency>
   <groupId>org.mapstruct</groupId>
   <artifactId>mapstruct</artifactId>
   <version>${mapstruct.version}</version>
   <scope>compile</scope>
</dependency>

这个scope你可以看到,啊我也不清楚

其实吧这玩意就是和node中的npm差不多,告诉你这个dependency的使用范围

compile:如果没有指定scope,那么该元素的默认值为compile。被依赖项目需要参与到项目的编译、测试、打包、运行等阶段,打包时通常会包含被依赖项目,是比较强的依赖。

test:表示该依赖项目仅会参与到项目的测试阶段。应用场景:例如,Junit 测试。

再来看一个type

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-dependencies</artifactId>
   <version>1.4.2.RELEASE</version>
   <type>pom</type>
   <scope>import</scope>
</dependency>

这个是干啥用的,dependency中type默认为jar即引入一个特定的jar包。那么为什么还会有type为pom呢?当我们需要引入很多jar包的时候会导致pom.xml过大,我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的pom.xml文件过大。这个时候我们引进来一个type为pom,意味着我们可以将所有的jar包打包成一个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包

再简单看一个build

build就是maven来配置构建规则的,这个东西就先大概了解一下,其实就像npm一样也会对打包进行管理,会明确打包时用到的plugin。同时也会进行一些依赖冲突的解决。

再看最后一个profiles

<profiles>
   <profile>
      <id>dev</id>
      <properties>
         <profile.env>dev</profile.env>
         <project.domain>xx.com</project.domain>
         <profile.jvm>-Xms1024m -Xmx1024m -Xmn512m -XX:MetaspaceSize=100m -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly</profile.jvm>
      </properties>
   </profile>
</profiles>

这个东西其实就是用来指定不同的环境,走不同的参数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值