IDEA版Maven详细笔记

该笔记根据网课https://www.bilibili.com/video/BV1KX4y1K7vK?p=1,与自己实际操作整理

Maven

1.主要内容

在这里插入图片描述

2.Maven的简介

2.1 简介

    Maven这个词可以翻译为“专家”“内行”。Maven主要服务于基于Java平台的项目构建,以来管理和项目信息管理。

    无论是小型的开源类库项目,还是大型的企业级项目应用;无论是传统的瀑布开放式,开始流行的敏捷开发,Maven都能大显身手。

2.2 项目构建

   不管你是否意识到,构建是每一个程序员每天都在做的工作。早上来到公司,我们做的第一件事就是从源码库迁出最新的代码,然后进行单元测试,如果测试失败,会找相关的同事一起调试,修复错误代码。接着回到自己的工作上来,编写自己的单元测试产品代码。

    仔细总结一下,我们会发现,除了编写源代码,我们每天有相当一部分时间花在了编译,运行单元测试,生成文档,打包和部署等繁琐且不起眼的工作上,这就是构建。如果我们现在还在手工这样做,那成本太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有的繁琐步骤都能自动完成,很快就能得到最终结果。

2.3 项目构建工具

Ant构建
    最早的构建工具,基于IDE,大概是2000年有的,当时是最流行的java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制的特别好。

Maven【Java】
    项目对象模型,通过其描述信息来管理项目构建,报告和文档的软件项目管理工具。它填补了Ant缺点,Maven第一次支持了从网络上下载的功能,仍采用xml作为配置文件格式。Maven专注的是依赖管理,使用java编写。

Gradle
    属于结合以上两个优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具,它最大的区别是不用xml作为配置文件格式,采用了DSL格式,使得脚本更加简洁。

    目前市面上Ant比较老,所以一般是一些比较传统的软件企业公司使用,Maven使用java编写,是当下大多数互联网公司会使用的一个构建工具,中文文档也比较齐全,gradle是用groovy编写,目前比较新型的构建工具一些初创互联网公司会使用,以后会有很大的使用空间。

2.4 Maven的四大特性

2.4.1 依赖管理系统

    Maven为java世界引入了一个新的依赖管理系统jar包管理 jar升级时修改配置文件即可。在java世界中,可以用groupId,artifactId,version组成的Coorrdination(坐标)唯一标示一个依赖。

    任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以时jar包,也可以是war包或者jar包。一个典型的依赖引用 如下所示:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

坐标属性的理解
    Maven坐标为各种组件引入了秩序,任何一个组件必须明确定义自己的坐标。

groupId
    定义当前Maven项目隶属的实际项目-公司名称。(jar包所在仓库路径)由于Maven中模块的概念,一次一个实际项目往往会被划分为很多模块,比如spring是一个实际项目,其对应的Maven模块会有很多,如spring-core,spring-webmvc等。

artifactId
    该元素定义实际项目中的一个Maven模块-项目名,推荐的做法是使用实际项目名作为artifactId的前缀。比如:spring-bean,sping-webmvc等。

version
    该元素定义Maven项目当前所处在的版本。

2.4.2 多模块构建

    项目复查时 dao service controller层分离将一个项目分解为多个模块已经是很通用的一种方式
    在Maven中需要顶一个parent POM作为一组module的聚合POM。在该POM中可以使用<moudles>标签来定义一组子模块。parent POM不会有什么实际构建产出。而parent POM中的build配置以及依赖配置都会自动继承给子module。

2.4.3 一致的项目结构

    Ant时代大家构建java项目目录时比较随意,然后通过Ant配置指定哪些属于source,哪些属于testSource等。而Maven在设计之初的理念就是Conversion over configuration(约定大于配置)。其制定了一套项目目录结构为标准的java项目结构,解决不同IDE带来的文件目录不一致问题。

2.4.4 一致的构建模型和插件机制
<!--tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <url>http://127.0.0.1:8080/manager</url>
          <server>tomcat</server>
          <port>8080</port>
          <path>/maven01</path><!--WEB应用上下文路径-->
          <contextReloadable>true</contextReloadable>
        </configuration>
      </plugin>

3.Maven的安装配置和目录结构

3.1Maven的安装配置

3.1.1 检查JDK的版本

   JDK版本1.7及以上

3.1.2 下载Maven

   下载地址http://maven.apache.org/download.cgi.在这里插入图片描述

3.1.3 配置Maven环境变量

   解压后把Maven的根目录配置到环境变量MAVEN_HOME, 将bin目录配置到path变量中。注:maven解压后存放的目录不要包含中文和空格

新建系统变量 MAVEN_HOME,变量值为maven解压目录中的bin目录
新建系统变量 MAVEN_HOME,变量值为maven解压目录中的bin目录
编辑系统变量 Path,添加变量值:%MAVEN_HOME%编辑系统变量 Path,添加变量值:;%MAVEN_HOME%

3.1.4 检查Maven是否安装成功

   打开dos窗口,执行 mvn -v
如果出现Maven信息则配置成功

3.2 认识Maven目录结构

${basedir}
|-- pom.xml
|-- src
|	|-- main
|	|	`-- java
|	|	`-- resources
|	|	`-- filters
|	`-- test
|	|	`-- java
|	|	`-- resources
|	|	`-- filters
|	`-- it
|	`-- assembly
|	`-- site
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt
  • src/main/java项目的源代码所在的目录
  • src/main/resources 项目的资源文件所在的目录
  • src/main/filters项目的资源过滤文件所在的目录
  • src/main/webapp如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。
  • src/test/java测试代码所在的目录
  • src/test/resources测试相关的资源文件所在的目录
  • src/test/filters测试相关的资源过滤文件所在的目录
    上面的目录结构,我们接触的比较多,而下面的这些目录结构,用的相对不是很多:
  • src/it集成测试代码所在的目录,主要是供别的插件使用的。
  • src/assembly组件(Assembly)描述符所在的目录
  • src/site站点文件
  • LICENSE.txt项目的许可文件
  • NOTICE.txt该项目依赖的库的注意事项
  • README.txt项目的readme文件

3.3 修改Maven配置

1.1 修改默认仓库位置
打开maven目录-> conf -> settings.xml
添加仓库配置位置
<localRepository>E:/developer_tools/Maven/m2/repository</localRepository>
注:仓库位置改为自己本机的指定目录,"/"不要写反

1.2 更换阿里镜像,加快依赖下载
<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>central</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
注:添加到<mirrors></mirrors>标签内

4.Maven命令

   作为开发利器的Maven,为我们提供了十分丰富的命令,了解maven的命令行操作并熟练运用常见的maven命令还是十分必要的,即使IDEA等工具给我们提供图形界面化工具,但其底层还是靠maven命令来驱动的。

   Mavne的命令格式如下:

	mvn [plugin-name]:[goal-name]

   命令代表的含义:执行plugin-name插件的goal-name目标

4.1 常用命令

命令描述
mvn -version显示版本信息
mvn clean清理项目产生的临时文件,一般是模块下的target目录
mvn compile编译源代码,一般编译模块下的src/main/java目录
mvn package项目打包工具,会在模块下的target目录生成.jar或者.war文件
mvn test测试命令,或执行src/test/java/下的junit的测试用例
mvn install将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy将打包的文件发布到远程参考,提供其他人员进行下载依赖
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应用

注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。

4.2 命令参数

   上面列举的知识比较通用的命令,其实很多命令都可以携带参数以执行更精准的任务。

4.2.1 -D 传入属性参数

例如:
   mvn package -Dmaven.test.skip=true
   以==-D开头,将maven.test.skip的值设置为true==,就是告诉maven打包的时候跳过单元测试,同理,mvn deploy -Dmaven.test.skip=true代表部署项目并且跳过单元测试。

4.2.2 -P 使用指定的Profile配置

   比如项目开发需要多个环境,一般为开发,测试,预发,正式四个环境,在pom.xml中的配置如下:

<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>
	</profile>
	<profile>
		<id>pre</id>
		<properties>
			<env>pre</env>
		</properties>
	</profile>
	<profile>
		<id>prod</id>
		<properties>
			<env>prod</env>
		</properties>
	</profile>
</profiles>
......
<build>
	<filters>
		<filter>config/${env}.properties</filter>
	</filters>
	<resources>
		<resouce>
			<directory>src/main/resource</directory>
			<filtering>true</filtering>
		</resource>
	</resources>

   profiles定义了各个环境变量的idfilters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profile中定义定义的值,resources中是定义哪些目录下的文件会被配置文件中定义的变量替换。
   通过maven可以实现按不同环境进行打包部署,例如:

	mvn package -Pdev -Dmaven.test.skip=true

   表示打包本地环境,并跳过单元测试


5.IDEA编辑器集成Maven环境

5.1 设置Maven版本

在这里插入图片描述
在这里插入图片描述

6.Maven项目的创建

6.1 创建Java项目

6.1.1 新建项目

1.新建Maven项目
在这里插入图片描述

2.设置项目名、命名空间、groupId等在这里插入图片描述
3.检查Maven环境,选择“Finish”
在这里插入图片描述
4.修改配置文件pom.xml
在这里插入图片描述

注:IDEA创建Maven项目,目录可能不全,如需要其他目录自己手动创建即可。例:创建resous目录。
1、新建目录
在这里插入图片描述
2、点击下方resources,即可完成创建
在这里插入图片描述
3、创建resources之后的目录。
在这里插入图片描述

6.1.2 编译项目

1、点击右上角的“Add Configurations”,打开“Run/Debug Configurations”窗口
在这里插入图片描述
在这里插入图片描述
2.设置编译项目的命令
在这里插入图片描述
3.执行编译命令,两个图标分别代表“普通模式”和“调试模式”
在这里插入图片描述
4.编译成功

6.2 创建Web项目

6.2.1 创建项目

1.创建web项目与创建java项目步骤基本一致,区别在于选择Maven模板(web项目选择webapp),如图:
在这里插入图片描述
2.项目目录结构如下
在这里插入图片描述

6.2.2 启动项目

6.2.2.1 修改JDK的版本
<!--JDK的版本修改为1.11-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.11</maven.compiler.source>
    <maven.compiler.target>1.11</maven.compiler.target>
  </properties>
6.2.2.2 修改单元测试的版本
<!--Junit的版本修改为4.12-->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
6.2.2.3 删除pluginManagement标签
<!--将这个标签及标签中的内容全部删除-->
  <pluginManagement>
  ...
  </pluginManagement>
6.2.2.4 添加web部署的插件

在build标签中添加plugins标签
1.Jetty插件

	<!--设置在plugins标签中-->
     <plugin>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>9.4.11.v20180605</version>
        <configuration>
          <!--热部署,每10s扫描一次-->
          <scanIntervalSeconds>10</scanIntervalSeconds>
          <webAppConfig>
            <contextPath>/test</contextPath>
          </webAppConfig>
        </configuration>
      </plugin>

2.Tomcat插件

 <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port><!--启动端口,默认8080-->
          <path>/test</path><!--项目的站点名,即对外访问路径-->
          <uriEncoding>UTF-8</uriEncoding><!--字符集编码 默认:ISO-8859-1-->
          <server>tomcat7</server><!--服务器名称-->
        </configuration>
      </plugin>

3.配置完之后,Reload project加载插件
在这里插入图片描述

6.2.2.5 启动项目

1.点击左上角的“Add Configigurations”,打开“Run/Debug Configurations”窗口
在这里插入图片描述
2.jetty插件配置
在这里插入图片描述
3.点击启动图标,启动服务
在这里插入图片描述
4.启动成功
在这里插入图片描述
浏览器访问效果
在这里插入图片描述
Tomcat同理,把命令换成tomcat7:run,如图所示:
在这里插入图片描述

7.Maven仓库的基本概念

   当第一次运行Maven命令的时候,需要Internet链接,因为它需要从网上下载一些文件,那么它从哪里下载呢?它是从Maven默认的远程库下载的。这个远程仓库有Maven的核心插件和可供下载的jar文件。
   对于Maven仓库来说,仓库只分为两类:本地仓库和远程仓库。
   当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。
   远程仓库分为三种:中央仓库,私服,其它公共库。
   中央仓库是默认配置下,Maven下载jar包的地方,

   私服是一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。
   一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
   默认情况下,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。有时候,因为某些原因(如C盘空间不足),需要修改本地仓库目录地址。
   对于仓库路径的修改,可以通过maven配置文件conf目录下的settings.xml来指定仓库路径。

<!-- 本地仓库的地址,用来存放jar包-->
<localRepository>E:/developer_tools/Maven/m2/repository</localRepository>

7.1 中央仓库

   由于原始的本地仓库就是空的,maven必须知道至少一个可用的远程仓库,才能在执行maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库。
   maven-model-builder-3.3.9.jar maven自动的jar中包含了一个超级POM。定义了默认中央仓库的位置。中央仓库包含了2000多个开源项目,接受每天1亿次以上的访问。

7.2 私服

   私服是一种特殊的远程仓库,它是假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的maven用户使用。当maven需要下载构件时,它去私服当中找,如果私服没有,则从外部远程仓库下载,并缓存在私服上,再为maven提供。
   此外,一些无法从外部仓库下载的构件也能从本地上传到私服提供局域网中供他人使用。

7.3 其他公共库

   常用的阿里云仓库配置

    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

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

   使用maven提供的多模块构建的特性完成maven环境下多个模块的项目的管理与构建。

这里以四个模块为例来搭建项目,以达到通俗易懂的初衷

模块 maven_parent -- 基模块,就是常说的parent (pom)

模块 maven_dao -- 数据库的访问层,例如jdbc从操作(jar)

模块 maven_service -- 项目的业务逻辑层(jar)

模块 maven_controller -- 用来接收请求,响应数据(war)

8.1创建maven_parent项目

1.选择File-> New -> Project
在这里插入图片描述
2.设置相关信息
在这里插入图片描述

8.2 创建maven_dao模块

1.选择项目maven_parent,右键选择New,选择Module
在这里插入图片描述
2.选择Maven项目的模板(普通Java项目)
在这里插入图片描述
3.设置子模块的相关信息
在这里插入图片描述
在这里插入图片描述

8.3 创建maven_service模块

创建maven_service的步骤与maven_dao模块一致。

8.4 创建maven_controller模块

创建maven_controller模块的步骤与maven_dao模块基本一致,只需要将第一步的Maven模板设置为web项目即可。(模板类型:maven-archetype-webapp)

模块全部创建完成后效果如下:
在这里插入图片描述

8.5 修改模块的配置

  • 设置JDK版本
  • 单元测试JUnit版本
  • 删除多余的配置

8.6 设置模块之间的依赖

8.6.1 maven_dao

1.新建包
在这里插入图片描述
2.在包中创建UserDao类
在这里插入图片描述
3.在类中添加方法

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

1.添加maven_dao的依赖

    <!--加入maven_dao模块的依赖-->
    <dependency>
      <groupId>com.xxxx</groupId>
      <artifactId>maven_dao</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>

2.在项目中添加UserService类,并添加方法

public class UserService {

    public static void testService(){
        System.out.println("UserService Test....");
        //调用UserDao的方法
        UserDao.testDao();
    }
}
8.6.3 maven_controller

1.添加maven_service的依赖

    <!--加入maven_service模块的依赖-->
        <dependency>
            <groupId>com.xxxx</groupId>
            <artifactId>maven_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2.添加Servlet的依赖

<!--加入Servlet的依赖-->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

3.新建Java类,继承HttpServlet类并重写service方法
在这里插入图片描述

@WebServlet("/user")
public class UserServlet extends HttpServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("UserServlett Test...");
        //调用maven_service模块的方法
        UserService.testService();
    }
}

4.添加Tomcat插件

<!--添加tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/web</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                </configuration>
            </plugin>

启动项目
在这里插入图片描述

如果启动项目失败,就把maven_parent项目install一下
在这里插入图片描述
6.启动成功
在这里插入图片描述

访问
在这里插入图片描述
控制台输出结果
在这里插入图片描述

9.Maven的打包操作

   对于企业级项目,无论是进行本地测试,还是测试环境测试以及最终的项目上线,都会涉及项目的打包操作。对于每个环节下的项目打包,对应的项目所需要的配置资源会有所差别,实现打包的方式有很多种,可以通过ant,或者通过idea自带的打包功能实现项目打包,但当项目很大并且需要的外界配置很多时,此时打包的配置就会异常复杂,对于maven项目,我们可以通过pom.xml配置的方式来实现打包时的环境选择,相比较其他形式打包工具,通过maven只需要通过简单的配置,就可以轻松完成不同环境下的项目的整体打包。
   比如下面这样一个项目,项目中配置了不同环境下所需要的配置文件,这时候需要完成不同环境下的打包操作,此时通过修改pom.xml如下:

9.1 建立对应的目录结构

   使用idea创建目录,目录结构可能会确实,需要手动添加对应的目录。
1.添加java源文件夹
在这里插入图片描述
2.添加resources文件夹
在这里插入图片描述
在这里插入图片描述
3.添加对应的文件夹目录,添加不同环境下对应的配置文件。(本地环境、测试环境、正式环境)
在这里插入图片描述

9.2 添加Profile配置

<!--打包环境配置,开发环境、测试环境、正式环境-->
  <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>

9.3 设置资源文件配置

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

9.4 执行打包操作

打开Run/Debug Configuarations窗口,输入对应的打包命令
在这里插入图片描述

打包成功在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值