Maven基础学习记录

Maven

笔记是根据视频 https://www.bilibili.com/video/BV1Fz4y167p5 做的学习记录,有不清楚的地方可以参考视频

1.1.Maven的四大特性

1.1.1.依赖管理系统

Maven并不是写死的引用,是可以根据自身需要随意修改的

示例代码如下:

<dependencies>
	<dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-context</artifactId>
	      <version>4.3.7.RELEASE</version>
	 </dependency>
 </dependencies>

上面的groupId arifactId version都是可以根据自身需要随意修改的

groupId:Maven项目隶属的实际项目和公司名称

artifactId:Maven模块-项目名

version:对应的版本号

1.1.2.多模块构建

Maven将一个项目分为多个模块

1.1.3.一致的项目结构

统一了目录结构,在IDEA和eclipse中创建的Maven项目是通用的

1.1.4.一致的构建模型和插件机制

2.Maven的目录结构

Maven的基本目录结构是src->main->java和src->test

一般在main中存储要上交的代码,而在test中存放要测试的代码

3.修改本地仓库和更改镜像

首先要配置Maven,Maven的配置可以参考 https://blog.csdn.net/m0_50292871/article/details/119175964

3.1.修改本地仓库

本地仓库中的所有jar包等都可以被Maven文件共享

在解压的maven包中找到conf中的settings.xml文件。用记事本打开后,搜索localRepository。将代码

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>D:\WorkingSpace\Maven\projects</localRepository>
  -->

中的

<localRepository>D:\WorkingSpace\Maven\projects</localRepository>

提出,中间的路径修改成你自己建立的仓库路径(文件夹),建议不要存在C盘,因为jar包累积后较大。修改后将这段代码复制到注解外面,变为

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>D:\WorkingSpace\Maven\projects</localRepository>
  -->
<localRepository>D:\WorkingSpace\Maven\projects</localRepository>

3.2更改镜像

由于Maven会自动帮助下载资源,而默认的资源都在国外的服务器上,因此我们可以使用阿里云中的镜像来加快下载速度

同样的,在settings.xml中搜索mirror

  <!-- mirrors
   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
   |
   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
   | However, this repository may have problems with heavy traffic at times, so people have mirrored
   | it to several places.
   |
   | That repository definition will have a unique id, so we can create a mirror reference for that
   | repository, to be used as an alternate download site. The mirror site will be the preferred
   | server for that repository.
   |-->
  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <mirror>
      <id>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

在最下面的前添加

<mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

4.手动编译Maven

以下列maven01为例进行配置

首先 在maven中创建一个Hello类路径为D:\WorkingSpace\Maven\projects\maven01\src\main\java\com\demo\Hello.java
可以先构建Hello.txt 在里面输入java代码后更改后缀
在这里插入图片描述

创建后,在maven01路径下,双击路径,标蓝后输入cmd自动执行小黑框
在这里插入图片描述

在小黑框中输入命令 mvn compile 对maven进行编译 如果没有出现ERROR和BUILD FAILURE
在这里插入图片描述

就继续输入命令 mvn exec:java -Dexec.mainClass=“com.demo.Hello” 对Hello.java中的main方法进行编译 如果没有出现ERROR

如果失败了 就从以下三方面进行思考

1.未使用管理员权限执行
2.JDK环境配置有问题,需要重装
3.在输入路径时包名出错了,上方第二个命令的路径实质是包名(xom.demo)+类名(Hello)

5.Maven下的常用命令

5.1.常用命令格式

命令描述
mvn -version显示版本信息
mvn clean清理项目生产时的临时文件
mvn compile编译源代码
mvn package项目打包工具,在target目录下生成jar或war等文件
mvn test测试命令
mvn install将打包的文件复制到本地仓库中供其他模块使用
mvn depioy将打包的文件发布到远程参考,供其他人员进行依赖下载
mvn site生成项目相关的信息的网站
mvn eclipse:eclipse将项目转化为eclipse项目
mvn dependency:tree打印出项目的整棵依赖树
mvn archetype:generate创建Maven的普通java项目
mvn tomcat7:run在tomcat容器中运行web应用
mvn jetty:run调用Jetty插件的Run目标在Jetty Servlet 容器中启动web应用

5.2.命令参数

5.2.1.-D 传入属性参数

mvn package -Dmaven.test.skip=true 是指将maven.test.skip这个属性赋值为true,即在打包时跳过测试文件

5.2.2.-P 使用指定的Profile配置

在项目开发过程之中,会有许多的不同环境,包括本地,测试,开发,正式等等等等,每个环境都会有不同的profile配置,那么在使用Maven时,我们就要指定不同的环境

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
        <id>qa</id>
        <properties>
            <env>qa</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
        <profile>
            <id>pre</id>
            <properties>
                <env>pre</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <env>prod</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

例如mvn package -Pdev -Dmaven.test.skip=true 就是指定了dev这个环境

6.在IDEA中集成的Maven项目

1.在File->setting中搜索Maven
2.在Maven home path中选择自己解压的maven路径

例如 D:/WorkingSpace/Maven/apache-maven-3.8.1

3.在User setting file中勾选Override,并选择上述maven路径下 conf 文件夹中的 settings.xml

例如 D:\WorkingSpace\Maven\apache-maven-3.8.1\conf\settings.xml

请添加图片描述

7.Java项目的创建

如果创建时发现没有src目录请查看另一篇博客:(5条消息) 使用IDEA创建maven项目却没有src目录的问题_Days_of_April的博客-CSDN博客_idea创建maven项目没有src目录

简单地说就是先不要选择quickstart进行创建,就直接创建完,等maven第一次加载完再进行quickstart的创建

7.1.创建步骤

切记,maven的很多内容是现场下载的,发现目录缺失请不要着急,等待几分钟等maven自己全部加载完

1.在File中new一个Project,其中选择Maven对象,首先是在不勾选Create from archetype的情况下,进行一次普通创建并让其加载完所有的内容(直接一按到底,其中的路径等参照后面的方法即可)
2.并勾选Create from archetype,再在下方选择后缀为quickstart的文件

请添加图片描述

3.选择你自己的GroupId和ArtifactId

一般GroupId是com.xxx xxx可以是自己的名字也可以是公司的名字

ArtifactId是自动生成的项目名

请添加图片描述

4.在下一步中,IDEA仍然会让你选择maven路径,你可以直接根据上面设置好的进行

请添加图片描述

5.创建完后一定要等maven加载完,要有耐心

7.2.创建resource目录

1.首先,在main目录和test目录下分别创建一个以resources命名的directory

请添加图片描述

在这里可以直接点击下面的resources,就可以忽略后续步骤

2.若没有上图所示,在main目录下的resources就需要右键创建好的resources选择Mark Directory as中的resources boot
3.在test目录下的resources就需要右键创建好的resources选择Mark Directory as中的Test resources boot

7.3.编译项目

1.点击右上角的Add Configuration

请添加图片描述

2.点击+并选择Maven
3.在Comman line中输入你想要执行的命令,不需要再加上mvn,因为此处已经明确是Maven项目,点击Apply再点击OK

请添加图片描述

4.设置好后点击Add Configuration右边的小三角或虫子即可编译。这与eclipse中的意义是一样的,一个代表普通编译,一个代表调试编译 compile命令执行完后会在左侧红色的target目录中生成.class文件
5.若是package命令 则会在target中生成jar包
6.也可以在右侧Maven中选用常用的命令

请添加图片描述

8.Web项目的创建

8.1.创建步骤

Java中的模板是quickstart,Web中的模板则是webapp 其余一致

创建出来后会有一个index.jsp文件 这是与Java项目不同的地方

8.2.修改部分内容

8.2.1.修改JDK版本至1.8
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
8.2.2.设置单元测试版本至4.12
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
8.2.2.删除pluginManagement
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
8.2.3.添加Web部署的插件(两种常用的服务器)

将下列两段代码分别添加到plugins内部

1.Jetty插件

<!--设置在plugins标签中-->
      <plugin>
        <!-- jetty插件, 设定端口与context path -->
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>maven-jetty-plugin</artifactId>
          <version>6.1.25</version>
          <configuration>
            <!-- 热部署,每10秒扫描一次 -->
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <!-- 此处为项目的对外访问路径 -->
            <contextPath>/Web03</contextPath>
            <connectors>
              <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <!--此处配置了访问的端口号 端口号不得写1-1024-->
              <port>9090</port>
            </connector>
          </connectors>
        </configuration>
      </plugin>

2.Tomcat插件

<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!-- 此处为项目的对外访问路径 -->
          <path>/Web03</path>
          <!--此处配置了访问的端口号 -->
          <port>8081</port>
          <!--字符集编码 -->
          <uriEncoding>UTF-8</uriEncoding>
          <!--服务器名称 -->
          <server>tomcat7</server>
      </configuration>
    </plugin>

添加完后会报红,就需要点击右侧Maven中的循环按钮进行下载

8.3.启动项目

1.加载

与Java项目一致,需要点击右上角的Add Configuration,选择Maven,但在原先Command line处写jetty:run命令

若是tomcat,就在Command line处写tomca7:run

2.启动

jetty:run命令执行后点击右侧绿色三角形,下方会显示加载好的端口

[INFO] Started SelectChannelConnector@0.0.0.0:9090

tomcat7:run命令执行后会告诉是在哪个端口下执行的

[INFO] Running war on http://localhost:8081/Web03

以jetty为例,在浏览器中输入http://localhost:9090/Web03/index.jsp 就可以查询index.jsp中输出的内容

请添加图片描述

8.4.自由确定端口

1.将指定端口的代码整个注释掉
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <!--此处配置了访问的端口号 -->
              <port>9090</port>
            </connector>
2.在Add Configuration中重新写一个Maven

在命令中不再单单输入jetty:run.而是输入jetty:run -Djetty.port=8899 其中8899就是端口的名字

9.Maven仓库的基本概念

9.1.Maven仓库的分类

对于Maven来说,仓库只有远程仓库和本地仓库。远程仓库中涵盖着可供下载的核心插件和jar包等等。本地仓库则包含着所有原先在此电脑上加载过的插件等,可供所有在这个电脑上运行的Maven文件使用。若在远程和本地仓库中都不存在所需要的文件,就会报错。

远程仓库的概念:中央仓库、私服、其他公共库

中央仓库:

中央仓库是默认配置下,Maven下载jar包的地方。由于刚开始运行Maven时,电脑本地仓库是空的,就需要从中央仓库中去下载。

私服:

私服是为了节省带宽和时间,在局域网内架设的一个私有仓库服务器。其可代理外部的远程仓库,也可将内部的项目部署到私服上供其他项目使用。也可以从本地上传一些无法从外部获取的构件

其他公共库:

例如阿里云仓库

9.2.如何去找寻依赖文件

1.在网页中搜索mvn

2.点击Maven Reposity

3.在里面搜索自己想要的文件内容并选择文件版本

4.点击后复制内部代码

5.加入到pom.xml的相关位置中

10.Maven环境下构建多模块项目

将Maven划分成多个模块,既有利于下载,也可以根据自己的需要选择特定的多模块进行下载,以下列四个模块为例

模块意义
maven_parent基模块,也就是常说的parent(pom)
maven_dao数据库的访问层,例如jdbc操作(jar)
maven_service项目的业务逻辑层(jar)
maven_controller用来接收请求,响应数据(war)

10.1.创建maven_parent模块

选择File->new->Project

创建一个无模板的Maven项目 名称改为parent

10.2.创建maven_dao模块

在parent基础上创建新的Module项目 选择模块quickstart

请添加图片描述

10.3.创建maven_service模块

与maven_dao创建方式一致

10.4.创建maven_controller模块

只需要选择webapp模块,别的同上一致

10.5.修改模式配置

1.修改JDK版本

2.单元测试JUnit版本

3.删除多余配置

10.6.设置模块间的依赖

10.6.1.maven_dao

首先 在com.xxxx下建立一个包

在包中建立一个UserDao类

package com.bruce.dao;

public class UserDao {
    public static void tesetDao(){
        System.out.println("UserDao....test....");
    }
}

请添加图片描述

10.6.2.maven_service

创建对dao的依赖

<!--添加dao模块的依赖-->
    <dependency>
      <groupId>com.bruce</groupId>
      <artifactId>dao</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

创建UserService类

package com.bruce;

import com.bruce.dao.UserDao;

public class UserService {

    public  static void testService(){
        System.out.println("UserService Tset....");
        //调用UserDao的方法
        UserDao.tesetDao();
    }
}
10.6.3.maven_controller

创建对service的依赖

<!--创建对service模块的依赖-->
    <dependency>
      <groupId>com.bruce</groupId>
      <artifactId>service</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
<!--添加Servlet的依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

在controller下,我们要自己创建java文件夹,并右键在Mark Directory as里将其作为 Resource Root

在java文件夹下创建UserServlet类

package com.bruce;

import com.bruce.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/user")
public class UserServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("UserServlet Test...");
        //调用service模块的方法
        UserService.testService();
    }
}

在build中添加tomcat服务器

<plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <!-- 此处为项目的对外访问路径 -->
        <path>/Web03</path>
        <!--此处配置了访问的端口号 -->
        <port>8081</port>
        <!--字符集编码 -->
        <uriEncoding>UTF-8</uriEncoding>
        <!--服务器名称 -->
        <server>tomcat7</server>
      </configuration>
    </plugin>
    </plugins>
10.6.4.启动项目

依照上节中tomcat的启动方法进行启动

若启动失败,则需要将四个项目分别用命令install一下(在Add Configuration中Maven下进行install),来供其他项目使用

注意,install设置好后要将4个install全部执行一遍

请添加图片描述

除了最下面是tomcat,其余四个都是install,从parent开始一层一层执行install,最后执行tomcat07即可

11.Maven的打包操作

首先要明确,jar包是Java项目的压缩包,而war包是Web项目的压缩包

11.1.创建一个maven项目

如果内部没有java目录,就需要手动添加,添加过程与上面controller添加一致,将java文件夹其作为 Resources Root(源文件夹)

同理,如果没有resources目录,也要手动添加并将其作为 Resources Root(源文件夹)

请添加图片描述

11.2.创建需要用到的文件夹

如图

请添加图片描述

以dev为例

bean.xml中为

表明是dev的文件

<bean>
    dev
</bean>

在其他文件夹下就依次是test和properties

db.properties中为

分别是用户和密码

uname=root
upwd=root

内容在其余两个地方是可以不一样的,因为账号密码是可以不同的

11.3.添加profile配置

放在里面即可(例如dependencies后面)

        <!--打包环境配置 开发环境 测试环境 正式环境-->
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <env>dev</env>
    </properties>
    <!--未指定环境时,默认打包dev环境-->
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <profile>
    <id>test</id>
    <properties>
      <env>test</env>
    </properties>
  </profile>
  <profile>
    <id>product</id>
    <properties>
      <env>product</env>
    </properties>
  </profile>
</profiles>

这里需要注意的就是env中的值和id中的值,尽量和文件名对应,这样就容易查找

11.4.设置资源文件配置

放入build中

<!--对于项目资源文件的配置放在build中-->
    <resources>
      <resource>
        <directory>src/main/resources/${env}</directory>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>

这里的格式都是固定的,使用时直接copy就好

filtering与文件名的替换有关,这里直接关闭就可以

11.5.输入maven命令

1.在Add Configuration中创建一个新的maven项,命名为package,命令为package
2.在Add Configuration中创建一个新的maven项,命名为package_dev命令为clean compile package -Pdev -Dmaven.test.skip=true

因为在外网用户访问你的项目时,人家是直接拿来用的,不需要使用test文件,因此在打包的时候跳过test的相关文件

请添加图片描述

以此类推创建package_test,package_product

11.6.在target目录下,就可以访问war压缩包

例如执行package_test时,里面的对应bean.xml和db.properties就是我们自己设定好的对应值 以此类推,会根据自身的执行来进行覆盖

12.Maven依赖的基本概念

12.1.依赖的基本配置

1.基本坐标:groupId,artifactId,version 基本坐标是最重要的Maven需要根据坐标才能找到需要的数据
2.Type:依赖的类型 一般默认为jar
3.依赖范围 Scope

compile:编译依赖范围,没有指定时就会默认使用该依赖范围

test:测试依赖范围,只对测试classpath有效

provided:已提供依赖范围,在运行时不需要,对编译和测试classpath有效

runtime:运行时依赖范围,对测试和运行classpath有效

system:系统依赖范围,和provided的有效范围一致,但由于与systemPath元素显式指定依赖路径有关,可能造成构建的不可移植,因此应该谨慎使用

12.2.依赖范围

Maven在编译主代码时会使用到一套classpath,具体即上面的五种依赖范围

12.3.传递性依赖

比如A->B->C,我们在使用A的时候,不用去考虑依赖了什么,有无多余的依赖,Maven会解析各个依赖的pom,将必要的间接依赖以传递性依赖的方式引入到当前项目中。

但传递性依赖可能会造成冲突问题。

即A->B->C‘ 和 A->E->C’’ 这两个C的版本是不一样的,就会造成冲突,那么就需要添加如下代码

    <dependencies>
        <dependency>
            <groupId>A</groupId>
            <artifactId>A</artifactId>
            <version>xxx</version>
            <exclusions>
                <exclusion>
                    <groupId>C</groupId>
                    <artifactId>C</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>B</groupId>
            <artifactId>B</artifactId>
        </dependency>
    </dependencies>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值