Maven 学习

前言

众多的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容