maven是优秀的项目管理和构建工具,能让我们更为方便的来管理和构建项目.
没有它会怎么样
自己下载jar包 管理依赖呗.(自己下载的jar放在lib目录)
和它类似的还有那些
ant gradle
maven和ant的区别
maven 和 ant 关注于项目的管理与构建。maven 中加入了依赖管理,ant偏重于项目的构建,更灵活定制更好,总之各有优劣,具体根据项目的规模,项目的构建方式来选择。
一、maven 是什么
maven是什么基于项目对象模型(pom)可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
类似npm 的东西。项目移植的时候不会因为环境而不一样。因为声明了依赖。
用它来更有效的管理项目,它也是一套自动化的管理工具,覆盖了我们的编译,测试,清理,打包和部署等整个项目构建的周期。它提供了一个叫仓库的概念。统一的帮我们管理项目所依赖的第三方架包。最大可能的避免由于环境的配置的不同所产生的差异。
二、下载和安装
- 下载
maven.appache.org
- 配置环境变量:
M2_HOME=E:apache-maven-3.3.9
Path=%M2_HOME%in
- 测试成功与否和查看版本
mvn -v
$ mvn -v
[1mApache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)[m
Maven home: e:javaapache-maven-3.5.2
Java version: 1.8.0_162, vendor: Oracle Corporation
Java home: c:Program FilesJavajdk1.8.0_162jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
能够查看到maven、java、系统版本号就说明安装成功了
三、目录结构:
bin 包含mvn脚本 m2.conf配置文件
boot 类加载器的框架 使用这个jar加载类库(maven的类库加载机制)
config 配置文件 settings.xml经常用到
lib maven运行时所有的类库,除了自己的还有第三方以来的类库
四、maven 项目结构
src
├─main
│ └─java
│ └─package (java文件)
└─test
│ └─java
│ └─package(Java文件
├─resources
pom.xml
- main目录 项目的主的目录(必要的)
- test目录 项目的测试目录 (必要的)
- resources 资源目录 (简单的可以不要)
五、第一个例子(代码有问题,看最后)
- 写main文件
package com.oneboi.maven01
public class Hello {
public String say(){
return "hi";
}
}
- 写test文件
package com.oneboi.maven01
import org.junit.*;
import org.junit.Assert*;
public class TestHello {
@Test
public void testHello(){
Assert.sssertEquals("hello world", new hello().say());
}
}
- 写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.oneboi</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
六、pom.xml 说明
1. <modelVersion>:maven版本。固定
2. <groupId>:项目的包名。项目所在位置
3. <artifactId>:模块名。
4. <version>:0.0.1SNAPSHOT快照版本
<project> //声明项目
<dependencies> //声明依赖
<dependency>
</dependency>
</dependencies>
</project>
七、运行项目(编译主程序
1. 进入根目录(src同级目录,pom.xml同级)
2. 编译主程序
mvn compile
编译的时候本地目录下载了很多依赖的包
本地仓库,编译的时候自动生成 :
C:UsersAdministrator.m2
epository
下载第三方插件和maven依赖的jar
编译的时候会去下载程序所需要的包和依赖
编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,可能会比较费时。
编译的时候做了哪些事
- 仓库下载了很多依赖
- 项目根目录下生成了target文件夹
- classes 字节码文件夹(targetclassescomoneboimodel0Hello.class
- maven-status 状态文件夹(targetmaven-statusmaven-compiler-plugincompiledefault-compile)
3.运行单元测试
mvn test
运行应用程序中的单元测试target目录生成test-classes和surefire-reports文件夹
- 测试程序字节码放在test-classes下
- surefire-reports文件夹下面存放是的所生成的测试报告
4.打包程序
mvn package
会在target目录下生成一个maven01-0.0.1-SNAPSHOT.jar和maven-archiver目录
为什么是这个名字
pom.xml中定义的
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
正确的代码:
main
package com.oneboi.model01;
public class Hello {
public String say(){
return "hssssssssi";
}
}
test:
package com.oneboi.model01;
import org.junit.*;
import org.junit.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Assert.assertEquals("hssssssssi",new Hello().say());
}
}
│ pom.xml
│
└─src
├─main
│ └─java
│ └─com
│ └─oneboi
│ └─model01
│ Hello.java
│
└─test
└─java
└─com
└─oneboi
└─model01
HelloTest.java
<?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.oneboi</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>