首页 > 技术文章 > Springcloud 学习笔记20--项目管理工具Maven(settings文件)、Idea配置maven信息、将代码jar发布到远程仓库以及常用使用技巧

luckyplj 2019-07-29 10:30 原文

1.Maven概念

Maven 的正确发音是[ˈmevən]。Maven  在美国是一个口语化的词语,代表专家、内行的意思。

一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模型 (POMProject Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。

2.Maven的作用

可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种 必不可少的事情要做,下面列举几个感受一下:

  1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

  2、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

  3、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型 打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

  试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理  jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗?Maven 就可以解决上面所提到的这些问题。

maven的依赖管理:

 

3.Maven软件的安装

maven安装包在百度云中

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 E:\toolsoftware\apache-maven-3.5.2 下面。解压后目录结构如下:

 

bin:存放了 maven 的命令,比如我们前面用到的mvn tomcat:run

boot:存放了一些 maven 本身的引导程序,如类加载器等

conf:存放了 maven  的一些配置文件,如 setting.xml   文件

lib:存放了 maven 本身运行所需的一些 jar 包

至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。

setting文件可从百度云下载

4.maven和jdk配置

(1)配置系统变量

打开系统变量设置

新建---MAVEN_HOME

(2)找到系统变量的path,新建%MAVEN_HOME%\bin(建议手动输入)

(3)检查 maven 是否安装成功

<1>win+R进入cmd窗口

<2>mvn -version

5.maven仓库的种类、Maven项目标准目录结构

在maven的安装目录下:E:\toolsoftware\apache-maven-3.5.2\conf,找到settings.xml文件,进行修改。

本地仓库位置:Default: ${user.home}/.m2/repository

修改本地仓库的位置:<localRepository>E:\toolsoftware\maven_repository</localRepository>

仓库分为3类:本地仓库、

 maven项目标准目录结构

maven项目的生命周期

6.Maven的pom文件解决jar依赖的原理

在pom.xml配置好了jar包依赖之后,那么就会自动下载该jar包到本地仓库中去。
具体地址在maven的安装配置哪里. conf/setting.xml。
如果没配置xml。默认在C:\Users\admin\.m2\repository

例如:json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包,在pom文件中添加如下依赖

<dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

  </dependencies>

若本地仓库中没有此jar包,则会到远程的maven仓库中下载,下载完成后,进入本地仓库可见jackson的相关文件

7.IDEA集成maven的相关配置

File--->Settings 配置 maven

根据图片指示,选择本地 maven 安装目录,指定 maven 安装目录下conf 文件夹中 settings 配置文件。

解决maven项目创建慢的方法:

修改VM-Option为:-DarchetypeCatalog=internal

参考经验贴:

https://blog.csdn.net/qq_35437792/article/details/80631434(超级好用)

maven创建的javaweb项目无法自动创建servlet:

解决方案:

 javaweb项目报错:

原因:tomcat 6.0.29与jdk1.8不兼容

解决方案:参考文献:https://blog.csdn.net/u011781521/article/details/53713162

pom文件中添加

<plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <port>8888</port>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>

再调用:

 8.IntelliJ IDEA修改maven默认仓库地址(重要)

(1)左上角【File】—— 【Other Settings】 —— 【Default Settings】

 

(2)查找Maven,并更改为本地配置:

 9.maven项目依赖无法添加报错

出现红色波浪线

解决方案:打开本地仓库,对应的存储位置将文件删除,重新下载即可。

10.Maven项目依赖大量出错,终极解决方法

创建一个新的maven仓库,idea中重新配置地址

11 snapshot快照库和release发布库

        在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。

       maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写),如下:

    <groupId>com.ttbank.flep</groupId>
    <artifactId>flep-task-timing</artifactId>
    <version>1.0-SNAPSHOT</version>

  maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。

在pom文件中配置snapshot和release库的地址

    <!--定义snapshots库和releases库的nexus地址-->  
    <distributionManagement>  
        <repository>  
            <id>nexus-releases</id>  
            <url>  
                http://172.17.103.59:8081/nexus/content/repositories/releases/  
            </url>  
        </repository>  
        <snapshotRepository>  
            <id>nexus-snapshots</id>  
            <url>  
                http://172.17.103.59:8081/nexus/content/repositories/snapshots/  
            </url>  
        </snapshotRepository>  
    </distributionManagement>  

 

推荐阅读