Maven学习笔记

Maven的简介

简介

Maven【[ˈmevən]】这个词可以翻译为"专家",“内⾏”。 作为Apache组织中的⼀个颇为成功的开源项⽬, Maven主要服务于基于java平台的项⽬构建,依赖管理和项⽬信息管理。 ⽆论是⼩型的开源类库项⽬,还是⼤型的企业级应⽤; ⽆论是传统的瀑布式开发,还是流⾏的敏捷开 发,Maven都能⼤显身⼿。

项目构建

不管你是否意识到,构建(build)是每⼀位程序员每天都在做的⼯作。早上来到公司,我们做的第⼀ 件事就是从源码库签出最新的代码,然后进⾏单元测试,如果测试失败,会找相关的同事⼀起调试修复错误代码。 接着回到⾃⼰的⼯作上来,编写⾃⼰的单元测试及产品代码。

我们会发现,除了编写源代码,我们每天有相当⼀部分时间花在了编译,运⾏单元测 试,⽣成⽂档,打包和部署等繁琐且不起眼的⼯作上,这就是构建。 如果我们现在还⼿⼯这样做,那成 本也太⾼了,于是有⼈⽤软件的⽅法让这⼀系列⼯作完全⾃动化,使得软件的构建可以像全⾃动流⽔线 ⼀样,只需要⼀条简单的命令,w所有繁琐的步骤都能够⾃动完成,很快就能得到最终结果。

项目构建工具

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编写, ⽬前⽐较新型的构建⼯具⼀些初创互联⽹公司会使⽤, 以后会有很⼤的使⽤空间。

Maven的四大特性

依赖管理系统

Maven为Java世界引⼊了⼀个新的依赖管理系统jar包管理 jar 升级时修改配置⽂件即可。在Java世界中,可以⽤groupId、artifactId、version组成的Coordination(坐标)唯⼀标识⼀个依赖。

任何基于Maven构建的项⽬⾃身也必须定义这三项属性,⽣成的包可以是Jar包,也可以是war包或者 jar包。⼀个典型的依赖引⽤如下所示:

<dependency>
 <groupId>javax.servlet</groupId> com.baidu
 <artifactId>javax.servlet-api</artifactId> ueditor echarts
 <version>3.1.0</version>
</dependency>

坐标属性的理解

  • groupId

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

  • artifactId

该元素定义实际项⽬中的⼀个Maven模块-项⽬名, 推荐的做法是使⽤实际项⽬名称作为artifactId的前 缀。 ⽐如: spring-bean, spring-webmvc等。

  • version

该元素定义Maven当前所处的版本

项目的多模块构建

项⽬复查时 dao service controller 层分离将⼀个项⽬分解为多个模块已经是很通⽤的⼀种⽅式。 在Maven中需要定义⼀个parent POM作为⼀组module的聚合POM。在该POM中可以使⽤ 标签来定义⼀ 组⼦模块。parent POM不会有什么实际构建产出。⽽parent POM中的build配置以及依赖配置都会⾃动继承给⼦module。

一致的构建模型和插件机制
<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>maven-jetty-plugin</artifactId>
 <version>6.1.25</version>
 <configuration>
 <scanIntervalSeconds>10</scanIntervalSeconds>
 <contextPath>/test</contextPath>
 </configuration>
</plugin>

Maven的安装配置和目录结构

Maven的安装与配置

在这里插入图片描述

打开cmd窗口,通过命令查看maven是否安装成功

在这里插入图片描述

认识Maven的目录结构

在这里插入图片描述

创建一个文件夹作为项目的根目录
  • 在根目录中创建一个pom.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.xxxx</groupId>
     <artifactId>maven01</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>jar</packaging>
     <name>maven01</name>
     <url>http://maven.apache.org</url>
     <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
     <dependencies>
     <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
     </dependency>
     </dependencies>
    
    </project>
    

PS:标签定义解释

/**
根⽬录下的第⼀个⼦元素 ModelVersion指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0 。指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

groupId:定义了项目属于哪一个组,这个组通常和项目所在的组织和公司存在关联
比如:com.xxxx

artifactId 定义了当前Maven项⽬在组中唯⼀的ID。
Version X.X.X-⾥程碑
⽐如:1.0.0-SNAPSHOT
第⼀个X ⼤版本 有重⼤变⾰
第⼆个X ⼩版本 修复bug,增加功能
第三个X 更新
⾥程碑版本:
SNAPSHOT (快照,开发版)
alpha(内部测试)
beta(公开测试)
Release | RC( 发布版)
GA(正常版本)
使⽤name标签声明⼀个对于⽤户更为友好的项⽬名称,虽然不是必须的,但还是推荐为每个Pom声明name,以⽅便信息交流。
**/
编写主函数
package com.xxxx.demo;
public class Hello{
 public static void main(String[] args) {
 System.out.println("hello maven");
 }
}
cmd下编译并且运行

cmd下面,进入项目根目录

1.编译Java文件

mvn compile

2.执行main方法

mvn exec:java -Dexec.mainClass=“com.xxxx.demo.hello”

在这里插入图片描述

注:第⼀次下载会⽐较慢,要修改maven解压之后的conf⽬录下的settings.xml。

1.1.修改默认仓库位置
打开maven⽬录 -> conf -> settings.xml
添加仓库位置配置
<localRepository>F:/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>

如果编译不成功,可能出现的问题

1.不是使用管理员权限执行的dos命令

2.JDK环境配置有问题,重装JDK

3.代码编写时,类里面没有设置包名

Maven命令

作为开发利器的maven,为我们提供了⼗分丰富的命令,了解maven的命令⾏操作并熟练运⽤常⻅的 maven命令还是⼗分必要的,即使譬如IDEA等⼯具给我提供了图形界⾯化⼯具,但其底层还是依靠 maven命令来驱动的。

Maven的命令格式如下:

maven [plugin-name] : [goal-name]

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

maven命令描述
mvn clean清理项⽬⽣产的临时⽂件,⼀般是模块下的target⽬录
mvn compile编译源代码,⼀般编译模块下的src/main/java⽬录
mvn package项⽬打包⼯具,会在模块下的target⽬录⽣成jar或war等⽂件
mvn test测试命令,或执⾏src/test/java/下junit的测试⽤例
mvn -version显示版本信息
mvn install将打包的jar/war⽂件复制到你的本地仓库中,供其他模块使⽤
mvn deploy将打包的⽂件发布到远程参考,提供其他⼈员进⾏下载依赖
mvn site生成项目相关信息的网站
mvn eclipse:eclipse将项目转换为Eclipse项目
mvn dependency:tree打印出整个项目的依赖树
mvn archetype:generate创建maven的普通Java项目
mvn tomcat:run在tomcat容器中运行web应用
mvn jetty:run调用jetty插件的Run目标在jetty servlet容器中启动web应用

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

命令参数

上⾯列举的只是⽐较通⽤的命令,其实很多命令都可以携带参数以执⾏更精准的任务。

-D传入属性参数

例如:

mvn package -Dmaven.test.skip=true

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

-P使用指定的Profile配置

⽐如项⽬开发需要有多个环境,⼀般为开发,测试,预发,正式4个环境,在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>
 		<resource>
 			<directory>src/main/resources</directory>
			 <filtering>true</filtering>
 		</resource>
	 </resources>
 ......
</build>

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值