Maven学习总结

简介

Maven有两大功能: 一个是jar管理(也可称依赖管理), 另一个是一键部署(需要配合插件来使用).

Maven的使用主要是围绕配置文件:pom.xml. 该文件主要的有两部分, 一个是依赖管理, 包含在<dependencies>标签中; 另一个是插件管理, 包含在<plugins>标签中. 一个简单web项目pom.xml文件中这两部分的配置如下:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
</dependencies>

  <build>
    <plugins>
      <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>
      
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8888</port>
        </configuration>
      </plugin>
    </plugins>
</build>

在该文件中配置了3个jar包分别是用于测试的的junit, 用于编写servletserverlet-api, 以及编写jspjsp-api; 同时该文件还配置了两个插件, 一个是maven的jdk插件maven-compiler-plugin, 配置的jdk版本是1.8, 另一个是maven的tomcat插件tomcat7-maven-plugin.

解决jar包冲突

在上面的pom.xml中, 对两个jar包都增加了<scope>provided</scope>:

 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

这是为了让这2个jar只在编译与测试时使用, 而在运行时不使用. 如果运行时依然提供这两个jar包, 就会存在相同的jar包发生jar冲突. 这是因为在运行时插件tomcat7-maven-plugin也提供了这两个jar. 下面是该插件的具体配置信息:

<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>

注意: 如果在idea中新建的module会自动依赖project的jar包, 如果存在module与project中依赖了相同的jar, 也会发生jar包冲突.

jar包管理中的依赖范围

在上文中为解决jar包冲突, 为这两个jar包设置了<scope>provieded</scope>, 其中的provieded就是指jar包管理中的依赖范围. 一共有5种依赖范围, 他们分别是complie, test, provieded, runtime, system. 默认是complie.

增加<repositories>标签

maven存放jar包的仓库有本地仓库与远程仓库, 当本地仓库没有对应的jar包时, maven会从远程仓库下载jar包, 这些仓库的配置信息存放在maven安装目录下的etc/conf.xml文件中. 但有时候我们会为项目单独设置远程仓库, 这时就需要在pom.xml添加一个<repositories>标签, 其基本格式如下

<repositories>

   <repository>

     <id>远程仓库唯一标识符</id>

     <url>远程仓库的url</url>

  </repository>

</repositories>

Maven 进阶: 继承与聚合

Maven还能够管理项目的层级关系, 父项目需要在pom.xml中设置打包方式为pom.

补充

Maven相比idea的优势

idea本身也有依赖管理, 也能够对web工程进行一键部署, 那为什么还需要使用Maven.

  • 更灵活的jar包管理, 比如配合使用Maven的继承机制.
  • 方便团队协作, 通过pom.xml文件就能实现项目环境的搭建, 无论在idea还是eclipse中都能使用.

idea中配置Maven的3要素

  • Maven setting.xml文件位置, idea中file->setting搜索"maven":
    在这里插入图片描述
  • 本地仓库路径配置,在setting.xml中配置如下:
    在这里插入图片描述
  • 远程仓库:阿里云远程(默认为maven官方远程仓库, 下载速度慢), 在setting中配置如下:
    在这里插入图片描述

idea中加载Maven项目

在Maven项目中选择添加, 之后选择一个Maven项目文件夹中的pom.xml文件就可以.

在这里插入图片描述

原文地址:https://www.cnblogs.com/bitbitbyte/p/12536571.html