参考:
类似于Github仓库管理代码,maven使用本地仓库与远程仓库管理jar包;
本地仓库,默认位于 C:\Users\用户名.m2 目录下,项目首先会从本地仓库中获取 jar 包,当无法获取指定 jar 包的时候,本地仓库会从 远程仓库(或 中央仓库)* 中下载 jar 包,并放入本地仓库中以备将来使用。这个远程仓库是 Maven 官方提供的,可通过 http://search.maven.org/ 来访问。
安装maven可以使用官网下载的方式详见:
https://www.cnblogs.com/jingmoxukong/p/5591368.html#maven%E6%98%AF%E4%BB%80%E4%B9%88
本文使用IDEA可以直接创建maven项目
首先New Project->Maven->勾选Creat…->选择XXX-quick-start
然后填写项目名
然后可以修改maven配置,包含配置文件setting.xml和本地仓库地址,如果已经安装maven,还可以在maven路径栏选择,默认的话IDEA会自动下载,其下载的默认网址在setting.xml中配置;在此可以修改国内下载源以获得更快速度
在此修改为阿里云,setting.xml如下:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups />
<proxies />
<servers />
<localRepository>D:/server/maven/repositorylocalRepository>
<mirrors>
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/repositories/central/url>
mirror>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>centralid>
<name>Maven Repository Switchboardname>
<url>http://repo1.maven.org/maven2/url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>repo2id>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://repo2.maven.org/maven2/url>
mirror>
<mirror>
<id>ibiblioid>
<mirrorOf>centralmirrorOf>
<name>Human Readable Name for this Mirror.name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/url>
mirror>
<mirror>
<id>jboss-public-repository-groupid>
<mirrorOf>centralmirrorOf>
<name>JBoss Public Repository Groupname>
<url>http://repository.jboss.org/nexus/content/groups/publicurl>
mirror>
<mirror>
<id>google-maven-centralid>
<name>Google Maven Centralname>
<url>https://maven-central.storage.googleapis.com
url>
<mirrorOf>centralmirrorOf>
mirror>
<mirror>
<id>maven.net.cnid>
<name>oneof the central mirrors in chinaname>
<url>http://maven.net.cn/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
settings>
点击确认后,IDEA会自动下载maven及其依赖包,完成项目构建后会出现以下目录结构:
-- pom.xml(maven项目配置文件)
-- src
-- main
-- java(java源代码目录)
-- resources(资源文件目录)
-- test
-- java(单元测试代码目录)
-- target(输出目录,所有的输出物都存放在这个目录下)
--classes(编译后的class文件存放处)
pom.xml 称为 Project Object Model(项目对象模型),它用于描述整个 Maven 项目,所以也称为 Maven 描述文件。
以下面的pom.xml文件讲解maven项目中的属性
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.smartgroupId>
<artifactId>smart-demoartifactId>
<version>1.0version>
<packaging>warpackaging>
<name>smart-demo Maven Webappname>
<url>http://maven.apache.orgurl>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
dependencies>
<build>
<finalName>smart-demofinalName>
build>project>
modelVersion:这个是 POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改。
groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven **坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 **Maven 构件。
packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。
name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。
dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。
build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 smart-demo.war,这里的 finalName 还可以使用另一种方式来定义(下面会描述)。
maven把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。
这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。
除了上述使用IDEA完成maven项目构建,还可以使用maven命令构建项目,首先了解一下基本命令
为了保证maven命令可以在terminal中使用,首先要在环境变量path中添加maven的路径
生命周期 | 阶段描述 |
---|---|
mvn validate | 验证项目是否正确,以及所有为了完整构建必要的信息是否可用 |
mvn generate-sources | 生成所有需要包含在编译过程中的源代码 |
mvn process-sources | 处理源代码,比如过滤一些值 |
mvn generate-resources | 生成所有需要包含在打包过程中的资源文件 |
mvn process-resources | 复制并处理资源文件至目标目录,准备打包 |
mvn compile | 编译项目的源代码 |
mvn process-classes | 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement) |
mvn generate-test-sources | 生成所有包含在测试编译过程中的测试源码 |
mvn process-test-sources | 处理测试源码,比如过滤一些值 |
mvn generate-test-resources | 生成测试需要的资源文件 |
mvn process-test-resources | 复制并处理测试资源文件至测试目标目录 |
mvn test-compile | 编译测试源码至测试目标目录 |
mvn test | 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布 |
mvn prepare-package | 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现) |
mvn package | 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR |
mvn pre-integration-test | 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境 |
mvn integration-test | 如果有必要的话,处理包并发布至集成测试可以运行的环境 |
mvn post-integration-test | 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。 |
mvn verify | 执行所有检查,验证包是有效的,符合质量规范 |
mvn install | 安装包至本地仓库,以备本地的其它项目作为依赖使用 |
mvn deploy | 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关) |
参考
https://www.bilibili.com/video/BV1u4411T78k?p=1
标准单元测试框架,使用最广泛
Junit特点
JUnit的设计
Assert断言使用
JUnit执行逻辑
初始化测试资源称为 Fixture
@Test(expected = ArithmeticException.class)
public void testDivideByZero(){
System.out.println("testDivideByZero");
cal.divide(4,0);
}
JUnit超时测试
@Test(timeout = 2000)
public void testDivide() {
for(;;);
}
忽略测试方法
@Ignore
public void testMultiply() {
fail("Not yet implemented");
}
参数化测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.*;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.*;
@RunWith(Parameterized.class)
public class AbsTest {
@Parameters
public static Collection<?> data() {
return Arrays.asList(new Object[][]{
{0, 0}, {1, 1}, {-1, 1}
});
}
int input;
int excepted;
/**
* 构造器
*/
public AbsTest(int input, int expected) {
this.excepted = expected;
this.input = input;
}
@Test
public void testAbs(){
int r=Math.abs(this.input);
assertEquals(this.excepted,r);
}
}
TestNG是Java中的一个测试框架
TestNG比JUnit功能强大的多。 测试人员一般用TestNG来写自动化测试。 开发人员一般用JUnit写单元测试。