30分钟Maven入门到精通

mac2022-06-30  24

  Maven是近年来最流行的项目构建与管理工具。不仅简化了我们开发过程中对jar包依赖的导入,还对项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等所有构建过程进行了抽象和统一,方便了我们对项目的管理。maven依赖是我们最为熟知的特性,单个项目的依赖管理并不难,但是要管理几个甚至几十个模块时,那这个依赖有应该怎么管理呢?

一:maven的常用命令

  mvn validate:验证工程是否正确,所有需要的资源是否可用   mvn compile:编译源代码   mvn test-compile:编译测试代码   mvn test:运行测试   mvn package:打包   mvn clean:清理项目   mvn install:安装到本地仓库   mvn deploy:上传到私服   mvn dependency:tree:显示maven依赖树   mvn dependency:list:显示maven依赖列表

二:依赖的传递顺序

  1. 近者优先     比如A项目依赖了C项目的1.1版本,同时又依赖了B项目,但是B项目里面有依赖了C项目的1.0版本。此时A里面生效的是C1.1版本。     A > B > C-1.0.jar     A > C-1.1.jar  2. 第一申明优先     B项目依赖D的1.0版本,C项目依赖D的1.1版本。A项目同时依赖B和C,此时A项目里面生效的是D1.0,因为A先引用的是B项目。     A > B > D-1.0.jar     A > C > D-1.1.jar

三:依赖的作用范围

  *complie:这是默认范围,编译依赖对项目所有的classpath都可用。而且编译的依赖会传递到依赖的项目。

  

  *provided:只有在测试和编译时有效,但在打包时会做exclude操作。jdk或者运行的容器包含这个依赖,我们就可以将作用域设置为provided。(例如开发web应用编译时需要servlet-api.jar,但是运行容器已有了这个依赖,我们就能修改它的作用域范围了)  

  *runtime:测试和运行时有效,编译时无效。(比如项目编译时不需要jdbc相关的jar包,但是运行时会需要相关的驱动包)

  

  *test:只在编译测试代码 和 运行测试代码时有效。

  

  *system:和provided类似,但是system作用域的依赖必须指定一个本地路径。因为它不会去maven仓库去找,而是直接从本地系统中读取的。

  

  *import:它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置。maven和java一样是单继承的,假如我不想继承、或者是继承多个又该怎么处理呢?比如我现在有一个叫base-parent1父模块,里面有junit、log4j两个依赖。但是我另一个工程可能也需要这两个依赖 但是有不想重复引入又该怎么办呢?  先看parent1的代码:

  

  此时,我的另一个项目只需要import这个项目,就能把 parent1 的依赖引用过来了。

  

   *exclusion:依赖排除,比如jedis包里面还包含commons-pool2包,但是我不想引用这个jar包,就可以用<exclusion>标签把它排出去。

  

  *optional:依赖可选,例如:A依赖B,B依赖C,B将C标记为可选,这样A就不会依赖到C了。

  

四:Maven的生命周期

  maven的生命周期分为三个阶段,他们分别是clean、default、site。   * clean生命周期的目的是清理项目     pre-clean:执行一些清理前需要完成的工作     clean:清理上一次构建生成的文件     post-clean:执行一些清理后需要完成的工作   * default生命周期的目的是构建项目     validate:验证工程是否正确     compile:编译项目的源代码     test:使用单元测试框架运行项目,测试代码不会被打包或者部署     package:把编译好的代码,打包成可发布的格式,如JAR、WAR。     verify:运行所有检查,验证包是否有效     install:将包安装到maven本地仓库,供本地其它maven项目使用     deploy:将最终的包复制到远处仓库,供其它开发人员和maven项目使用   * site生命周期的目的是建立项目站点     pre-site:执行一些在生成项目站点之前需要完成的工作     site:生成项目站点文档     post-site:执行一些在生成项目站点后需要完成的工作     site-deploy:将生成的项目站点发布到服务器上

五:Maven私服搭建

  1. 首先安装好jdk和maven,并配置环境变量  2. 下载nexus https://www.sonatype.com/download-oss-sonatype  3. 解压tar -zxvf nexus-2.14.13-01-bundle.tar.gz 会得到nexus-2.14.13-01   sonatype-work两个文件夹  4. 进入bin目录,可使用两个命令启动①./nexus start ②./nexus run(初次启动建议使用此命令,会显示启动日志)  5. 日志文件所在路径 /sonatype-work/nexus/log/nexus.log  

  

  6. 需要设置环境变量来解决上面问题vim /etc/profile加入export RUN_AS_USER=root,然后source /etc/profile使环境变量立即生效。   

  

   7. 这时候./nexus stop停止后再启动就好了,如果问题还没解决需要 vim nexus-2.14.13-01/bin/nexus添加下面配置,然后重启就好了

  

   8. 启动成功之后 localhost:8081/nexus就能访问了

   

六:nexus私服实战

  1. 仓库类型:点击左边的仓库,则会展示出所有的仓库名称和类型。

     

    * hosted:本地仓库,公司自己的工具类可以打成jar包,发布到这里。    * proxy:代理仓库,用来代理远程的公共仓库 如:maven中央仓库。用户无法上传jar包只能下载。    * group:仓库组,用来合并hosted/proxy仓库,如果需要同时依赖好几个jar包时,直接引用group就好了,不用一个个引用。    * virtual:虚拟仓库基本废弃不用了。

  2. 新建仓库

     

  3. 修改maven的settings.xml文件

<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 本地仓库 --> <localRepository>D:\config\repository</localRepository> <pluginGroups> </pluginGroups> <proxies> </proxies> <servers> <!-- 1. 配置maven私库的授权信息 --> <server> <id>wulei-releases</id> <!--自定义,id会再pom文件中使用,必须保持一致--> <username>admin</username><!--nexus账号--> <password>admin123</password><!--nexus密码--> </server> <server> <id>wulei-snapshots</id> <!--自定义,id会再pom文件中使用,必须保持一致--> <username>admin</username><!--nexus账号--> <password>admin123</password><!--nexus密码--> </server> </servers> <mirrors> <!-- 2. 指定镜像地址 --> <mirror> <id>nexusMirror</id> <!--自定义,id标签在一组镜像中必须是唯一的--> <name>local maven</name> <!-- 自定义 --> <!-- 这里填仓库组的存储地址 --> <url>http://192.168.100.100:8081/nexus/content/groups/public/</url> <mirrorOf>nexus,central</mirrorOf> </mirror> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <profiles> <!-- 3. 添加仓库 --> <profile> <id>mynexus</id><!--自定义,id标签在一组镜像中必须是唯一的--> <repositories> <repository> <id>demo-maven</id><!-- 自定义 --> <!-- 这里填仓库组的存储地址 --> <url>http://192.168.100.100:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>false</enabled></snapshots> </repository> </repositories> </profile> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles> <!--4. 使配置生效--> <activeProfiles> <!--和profile的id标签一致--> <activeProfile>mynexus</activeProfile> </activeProfiles> </settings> settings.xml

  3.1 指定nexus的账号密码 

    

   3.2 指定仓库组的地址

    

   3.3 使添加的信息生效

    

  3.4 在项目pom文件指定仓库路径

    

    (注:我这里是2.14版本所以pom文件是上面配法,3.+按照下面来配置)

    

   3.5 mvn clean 先清理,mvn package打完包,mvn deploy 就能上传到服务器了。 

    

 

   * 最后复制上面jar包的地址,就能在项目中使用这个jar包的方法了~

转载于:https://www.cnblogs.com/wlwl/p/11300142.html

相关资源:maven实战从入门到精通
最新回复(0)