当前位置: 首页 > news >正文

上海做网站公司做网站的公司百度平台营销收费标准

上海做网站公司做网站的公司,百度平台营销收费标准,网站维护难做,广州信息流推广公司在Maven项目中通常会引入大量依赖,但依赖管理不当,会造成版本混乱冲突或者目标包臃肿。因此,我们以SpringBoot为例,从三方面探索依赖的使用规则。 1、 依赖传递 依赖是会传递的,依赖的依赖也会连带引入。例如在项目中…

在Maven项目中通常会引入大量依赖,但依赖管理不当,会造成版本混乱冲突或者目标包臃肿。因此,我们以SpringBoot为例,从三方面探索依赖的使用规则。

1、 依赖传递

依赖是会传递的,依赖的依赖也会连带引入。例如在项目中引入了spring-boot-starter-web依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version>
</dependency>

那么业务项目不仅直接引入了spring-boot-starter-web依赖,还间接引入了spring-boot-starter-web的依赖项:

spring-boot-starterspring-boot-starter-jsonspring-boot-starter-tomcatspring-webspring-webmvc

Maven依赖关系如下图所示:

其中,spring-boot-starter-web是直接依赖,spring-boot-starter-web的依赖项:spring-boot-starterspring-boot-starter-jsonspring-boot-starter-tomcatspring-webspring-webmvc为间接依赖。

2、依赖管理

2.1、dependencyManagement

maven中的dependencyManagement节点主要用来统一管理依赖项的版本号。如果依赖中,未指定版本号,则采用dependencyManagement引入的pom文件中的版本号。dependencyManagement只用来指定依赖的版本,不会真正引入依赖。

假如pom文件中引入了如下依赖:  

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.3.1</version><scope>import</scope></dependency></dependencies>
</dependencyManagement>

那么在引入具体依赖时,可以不指定版本号:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

此时, spring-boot-starter-web会自动引入spring-boot-dependencies中指定的版本号3.3.1

2.2、parent

Maven 借鉴了面向对象中的继承思想,提出了 POM 继承思想。一个项目可通过继承父模块的 POM 来获得对相关依赖的声明。其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 pom。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent>

此时,对于spring-boot-starter-web依赖,会自动引用spring-boot-starter-parent中指定的版本号2.7.18

2.3、dependency

对于普通的依赖,大家用的最多的也便是这种,在声明依赖时直接指定版本号:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.15</version>
</dependency>

这种方式最直观,但依赖过多时,不便于统一管理。 

2.4、依赖优先级

如果我们将上述三种方式混合使用,放在同一个项目中,且指定了不同的版本号,会产生什么效果呢?

 先展示结果如下图:

可以看到直接依赖spring-boot-starter-web的版本为2.6.15,但间接依赖spring-******的版本均为2.7.18。所以结论如下:

优先级:dependence指定版本 > parent指定版本 > dependencyManagement指定版本

dependence指定版本仅限于直接依赖的版本,间接依赖仍然采用parent所指定的版本,dependencyManagement指定的版本最次之。

3、 依赖作用域

在Maven中,可以使用scope来指定当前依赖项的作用域,常见的值有:compile、provided、runtime、test、import等。

3.1 compile

compile也是默认的作用域,如果引入依赖时,没有明确指定作用域,则依赖作用域为compile。

compile作用域的依赖,在编译、测试和运行时均有效,并参与项目的打包过程,该依赖会传递给依赖该模块的其他模块。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.6.15</version><scope>compile</scope>
</dependency>

3.2 provided

provided作用域的依赖,仅在编译和测试时有效,在运行时不可用,且不会参与项目的打包过程,也不会传递给引用项目。

例如,Lombok模块仅用于编译时生成相应的Contructor、Getter、Setter、ToString等方法,但在运行时并不需要这个依赖,因此通常指定为provided,打包后的目标文件中也不包含该依赖:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope>
</dependency>

3.3 runtime

runtime作用域的依赖,在测试和运行时是可用的,但在编译时是不可用的,也会参与项目的打包过程,其依赖传递给引用该模块的项目。

runtime作用域的模块在编译时不可用,就说明该引用中的类在java代码中也不能直接使用,否则无法编译通过。

例如,mysql数据库驱动在代码中不需要直接调用,代码通常使用mybatis或者java.sql包下的类。因此引入依赖时,通常指定为runtime,在运行时,该驱动包直接注册到程序中:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version><scope>runtime</scope>
</dependency>

3.4 test

test作用域的依赖,仅在测试时可用(测试代码的编译和执行),其不会参与项目的打包过程,也不会传递给其他模块。

这些依赖中的类只能在src/test/java中使用,无法用于src/main/java中的代码。

测试相关的均属于此类,比如:spring-boot-starter-test、junit等:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

3.5 import

每个项目,一般都会继承自一个父项目,这个父项目可能是公司的一个基础项目,也可能是一个框架项目,比如开头提到的springboot:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version>
</parent>

这个父项目中,父项目的父项目是spring-boot-dependencies,spring-boot-dependencies中会使用dependencyManagement标签对依赖项的版本统一管理,子项目中,可以按需引入dependencyManagement中依赖即可,可以省略版本号。

但是Maven最多只能有一个parent项目,如果把所有的dependencyManagement都加入到parent项目中,又会导致parent项目太臃肿,依赖杂乱不好管理。因此,import作用域便可以解决这个问题。import可以通过非继承的方式批量引入另一个依赖项中。

说明:<scope>import</scope>只能用在dependencyManagement下type为pom的dependency中。

3.6 作用域总结

作用域编译时测试时运行时打包时传递性
compile
provided×××
runtime×
test××××
import×××
http://www.yayakq.cn/news/714492/

相关文章:

  • 我的世界做封面网站中国移动app免费下载安装
  • 外贸网站如何做推广是什么网架公司排名
  • 温州网站建设方案表一个虚拟空间做两个网站
  • 怎么制作手机网站买个域名就可以建立网站吗
  • 重庆网站建设cqhtwl梵克雅宝官网报价
  • 烟台网站制作开发添加到wordpress视频库中
  • 电脑上做网站wordpress淘客分销
  • 建设快三网站wordpress匿名投稿
  • 万网有域名怎么建网站域名防红短链接
  • 石家庄网站建设哪里好wordpress分页伪静态
  • 北京最新消息情况今天佛山网站优化服务
  • vue.js合作做网站么如何做网站美工
  • 个人做电子商务网站备案iis访问网站打开要很久
  • 如何用手机建设一个网站网络营销方式对比
  • 东莞官方网站做收费网站
  • 成都制作网站公司家庭带宽100m做网站
  • 免费的代码分享网站安庆跨境电商建站哪家好
  • 北京南站到北京站网络推广方案百度百科
  • 请简述网站建设流程图北京网站建设费用
  • 网站建设服务合约辽阳企业网站建设价格
  • 青岛seo精灵长沙关键词优化平台
  • 怎么做网站内部搜索功能现在企业做门户网站
  • 个人备案的网站名称合肥做网站加盟
  • 双线主机可以做彩票网站吗南京seo整站优化技术
  • 虚拟机做网站服务建设网站需要设备
  • 东莞网站排名优化费用如何查询自己二建的状态
  • 网站 流量 不够用煤炭网站建设规划书
  • wap网站开发招聘上海小程序网站开发公司
  • 承德的网站建设公司移动ui设计 网站
  • 网站建设越来越注重用户体验网站制作替我们购买域名