美文网首页
Maven 学习

Maven 学习

作者: CSeroad | 来源:发表于2022-02-17 15:33 被阅读0次

    前言

    众多的java项目均由maven构建,迄今为止未系统学习过maven,这里来梳理一下。

    maven 概念

    maven是一款服务于java的自动化构建工具。

    构建项目

    • 清理
      清除之前项目编译的字节码文件
    • 编译
      把程序源代码编译成class字节码文件
      批量:maven 可同时编译多个字节码文件
    • 测试
      maven 可执行测试程序代码
      批量:maven 可同时执行多个测试代码,测试多个功能
    • 报告
      生成测试结果的文件
    • 打包
      将项目中所有的 class 文件,配置文件等所有资源放在一个压缩文件中
      java 普通程序打包为 jar 包
      web 应用工程打包为 war 包
    • 安装
      把打包生成的文件(jar、war)安装到本机仓库指定的位置,提供依赖
    • 部署
      将动态web工程生成的war包复制到servlet容器的指定目录下,使其运行

    maven 下载

    在maven官网 https://maven.apache.org/ 下载apache-maven-3.8.4版本并解压。
    并在mac上配置环境变量

    export M2_HOME=/Users/cseroad/apache-maven-3.8.4
    export PATH=$PATH:$M2_HOME/bin
    

    生效并重启后验证。

    source ~/.bash_profile
    
    image.png

    maven 配置

    1、修改本地仓库地址。
    修改conf/setting.xml文件

    <localRepository>/Users/cseroad/maven/repository</localRepository>
    

    2、修改仓库镜像
    同样修改conf/setting.xml文件

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

    pom.xml 文件

    pom全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件。

      <!-- Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0-->
        <modelVersion>4.0.0</modelVersion>
        <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如org.example -->
        <groupId>org.example</groupId>
     
        <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
        <artifactId>maven01</artifactId>
     
        <!-- 版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT -->
        <version>1.0</version>
    

    properties用来定义一些配置属性。

        <properties>
            <!--源码编译jdk版本-->        
            <maven.compiler.source>1.8</maven.compiler.source>
            <!--运行代码的jdk版本-->
            <maven.compiler.target>1.8</maven.compiler.target>
            <!--项目构建使用的编码,避免中文乱码-->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!--生成报告的编码-->
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>
    

    dependencies 依赖第三方的类库。在https://mvnrepository.com/ 查找需要的依赖。

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

    依赖范围有几种:

    compile test provided runtime
    对主程序有效 对主程序无效 对主程序有效 对主程序有效
    对测试程序有效 对测试程序有效 对测试程序有效 对测试程序有效
    参与打包 不参与打包 不参与打包 参与打包
    参与部署 不参与部署 不参与部署 不参与部署
    如:commons-logging 如:junit 如:servlet-api 如:log4j

    maven 命令

    maven的命令对应着maven的生命周期。命令的执行必须在pom.xml所在目录。

    mvn clean 清理
    mvn compile 编译 main/java 下的 java 程序
    mvn test-compile 编译 test/java 下的 java 程序
    mvn test 测试
    mvn package 打包生成jar包或者war包
    mvn install 安装,把本工程打包后,保存到本地仓库中
    mvn deploy 部署,会保存到私服仓库中,并自动将项目部署到web容器中
    

    手动创建一个maven工程

    maven_test
    |-- pom.xml            # maven的核心文件(maven项目必须有)
    |-- src
        |-- main           # 放主程序java代码和配置文件
        |   -- resources   # 放java程序中要使用到的配置文件    
        |   -- java       # 放程序包和包中的java文件
        |      -- com
        |          -- example
        |             -- TestHello.java
        |
        |-- test           # 放测试程序代码和配置文件 (可以没有)
        |   -- resources   # 测试程序中要使用到的配置文件    
        |   -- java       # 放测试程序包和包中的java文件
        |      -- com
        |          -- example
        |             -- TestHello.java
    

    TestHello.java 为代码

    package com.example;
    
    
    public class TestHello{
        
        public static void main(String[] args){
            TestHello hello = new TestHello();
            System.out.println("hello test");
        }
    }
    

    在pom.xml目录下输入mvn compile可正常编译。

    image.png

    java 命令再运行target/classes下代码

    image.png

    maven 在 idea 的配置

    在maven设置项里配置和本地maven相同的目录和配置文件。

    image.png

    maven 创建普通Java 项目

    点击新建project,选择maven-archetype-quickstart项目创建普通项目

    image.png image.png

    在运行配置里,输入命令compile代表编译该程序

    image.png image.png

    输入命令package打包为jar包

    image.png

    maven 创建Java Web 项目

    新建project时,选择maven-archetype-webapp项目创建Java Web 项目。
    其余和普通项目一样。
    导入依赖包

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

    servlet继承HttpServlet

    public class TestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("GET请求");
        }
    }
    

    输入命令package打包为war包。

    image.png

    移动至tomcat/webapps/下,可正常访问。

    也可以在pom.xml中的build标签配置plugins标签

                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.25</version>
                    <configuration>
                        <!-- 热部署,每10秒扫描一次 -->
                        <scanIntervalSeconds>10</scanIntervalSeconds>
                        <!-- 此处为项目的上下文路径 -->
                        <contextPath>/test</contextPath>
                        <connectors>
                            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                <!--此处配置了访问的端口号 -->
                                <port>9090</port>
                            </connector>
                        </connectors>
                    </configuration>
                </plugin>
    

    设置jetty启动。

    image.png image.png

    访问9090端口

    image.png

    总结

    学习了maven如何创建、导入、导出项目。

    参考资料

    http://qibinaoe.top/2021/01/19/Maven%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
    https://www.bilibili.com/video/BV1Fz4y167p5?p=1
    https://www.bilibili.com/video/BV134411T7nB?p=2&spm_id_from=pageDriver

    相关文章

      网友评论

          本文标题:Maven 学习

          本文链接:https://www.haomeiwen.com/subject/toaqcrtx.html