maven入门

网友投稿 255 2022-10-30


maven入门

本文可作为,孔浩maven课程的学习笔记

下载,安装

自己去看看

mvn基本概念

使用groupId,artifactId,version三个只来指定一个项目

例如

org.apache.tomcat tomcat-jdbc 9.0.0.M4

groupId一般是公司名称.项目名称

artifactId一般是就是上面那个大项目的子项目名称

version就是x.x.x-里程碑

里程碑包括

SNAPSHOT(程序员正在开发的版本)

alpha(程序员内部测试的版本)

beta(用户测试版本)

Release(RC 正式发布版)

GA(General Availability 广泛可用,官方推荐的使用版本)

在maven中一般用的是SNAPSHOT或者release

mvn 常用命令汇总

mvn compile

会在src的同级目录下生成target/classes

mvn test

会在src的同级目录下生成target/test-classes,target/surefire,target/surefire-report

mvn clean

删除target文件夹

mvn package 是打成jar

mvn install 是打成jar,并且把jar放到仓库里(本机的仓库)

mvn archetype:generate 就是产生一个maven项目

如果是第一次运行这个命令,首先会下载很多相关文件

然后列出项目模板...

然后进入互动界面

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): xxx

会默认给出一个项目模板(所以直接回车即可)

然后选择对应的项目模板的版本号(一般会默认给出,直接回车即可)

选择groupId,artifactId,version等等

然后回默认指定package,此时直接回车即可

如下图,comfirm properties configuration下需要键入y,别的就是回车

依赖的作用域

compile,import,provided,runtime,system,test

import和system暂且不说

compile 编译的时候就把依赖加入,打包的时候也会加入

provided 编译和测试的时候会加入,打包的时候不会加入 例如tomcat的lib下那些jar

runtime 运行是依赖,编译的时候不会加入 例如myslq的连接包

test 只在test的时候加入,编译和打包的时候不要  例如junit

compile是maven默认的

依赖传递

如果项目A->spring-bean-2.2.3.jar

如果项目B->spring-bean-2.2.4.jar

项目C->A,B

那么项目c内加入的就会是spring-bean-2.2.3.jar

为什么?

因为在pom.xml里先写的是A#

如果项目A1->A2->spring-bean-2.2.3.jar

如果项目B->spring-bean-2.2.4.jar

项目C->A,B

那么项目c内加入的就会是spring-bean-2.2.4.jar

为什么?

因为从c到spring-bean-2.2.4.jar比从c到spring-bean-2.2.3.jar的距离短

依赖排除

如果我不想使用spring-bean-2.2.4.jar

怎么办?

在项目c里引用b的时候加上

com.dlf B 0.0.1-SNAPSHOT spring-framework spring-bean

另外maven dependency 里面有个optional选项

默认为false

项目b的pom中引用了组件c,且c的optional是false  那么如果项目a引用项目b的时候 也会默认的把组件c加上

如果b的pom中引用了组件c,且c的optional是true 那么如果项目a引用项目b的时候 就不会引用组件c 如果还需要组件c 那么只能多加一个dependency

项目聚合

我们可以使用maven带有的聚合功能

我们在eclipse里新建一个maven工程,packaging选择pom

在新项目的pom.xml的project下加入:

../user-core ../user-service

然后对这个工程的test compile都会依次对它所聚合的项目进行test,compile

项目继承

在子项目里写下

../user-parent/pom.xml

同时,可以在父项目里把子项目需要的jar包都写入

例如

子项目的pom的dependency就不需要写

version和scope了

另外再说明一下

在父项目里

直接写

子项目也会默认加载父项目所依赖的jar

如果是dependencyManagement

那么需要在子项目里显式的加入dependency

那父项目的dependencyManagement到底干了什么事呢?

统一了项目中依赖的外部组件的版本

另外如果myeclipse报这错误

ArtifactDescriptorException: Failed to read artifact descriptor for com.alibaba:druid:jar:0.2.23: ArtifactResolutionException: Failure to transfer com.alibaba:druid:pom:0.2.23 from was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.alibaba:druid:pom:0.2.23 from/to central (The operation was cancelled.

项目右键-->Maven4MyEclipse-->update project Configuration

选择上force update of snapshots/releases 然后OK 即可


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网易笔试题 找朋友 真的是找朋友
下一篇:java实现播放背景音乐
相关文章

 发表评论

暂时没有评论,来抢沙发吧~