套用一下常用的what, why, how 对maven进行了解。
首先,what? maven是什么?
1、Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
2、Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
总结:
- 项目管理工具,类似.net 的nuget and node.js 中的npm(yarn or cnpm);
- 包含一个对象模型,一组标准集合,一个项目的生命周期等等。(听着有些复杂,好像意思就是说,对这个管理工具进行一个解释,这个工具的作用就是管理插件,但是它又存在标准,依赖管理系统)
- 通过第二点,可以看出maven的作用还可以管理项目报告,生成站点,管理jar文件等。
3. Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:
其次, Why? 用这玩意儿,有什么好处?
- maven不仅是构建工具,它还是依赖管理工具和项目管理工具,提供了中央仓库,能够帮我们自动下载构件。 2.为了解决的依赖的增多,版本不一致,版本冲突,依赖臃肿等问题,它通过一个坐标系统来精确地定位每一个构件(artifact)。 3.还能帮助我们分散在各个角落的项目信息,包括项目描述,开发者列表,版本控制系统,许可证,缺陷管理系统地址。 4.maven还为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源软件。通过衍生工具(Nexus),我们还能对其进行快速搜索 5.maven对于目录结构有要求,约定优于配置,用户在项目间切换就省去了学习成本。
最后,how?
Maven 的安装与配置
下载地址:http://maven.apache.org/download.cgi
设置环境变量,添加M2_HOME, 并添加到path中。 验证maven安装配置是否成功:
跟node.js 切换源的方式类似,找到setting.xml, 修改中央仓库地址,和设置本地仓库地址。
line : 53
<localRepository>E:\mavenRepo</localRepository>
line: 153
<mirror>
<id>aliyun</id>
<mirrorOf>*</mirrorOf>
<name>aliyun Maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
Maven的使用
Maven Repository website: https://mvnrepository.com/ 在这个仓库里面,可以找到java中开源的框架,并加以引用。 例1:写一个HelloWorld类, 并在该类下写一个Say()方法,并且使用Junit写一个对它的单元测试。这个时候就需要用到Junit,此时在pom.xml 里面添加对Junit的依赖即可: Maven Repository website的使用方式:
pom.xml 添加如下代码:
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
此时,你会发现,在左侧的Maven Dependencies下会多出你添加的依赖的jar包。
测试代码: 此处使用了手动执行单元测试的方式,也使用maven的命令的方式执行了一次执行测试方法的方式:
最后再看一下, 如何使用maven 创建一个web项目。
创建过程就不详细说了,注意修改一下packaging的格式,为war。 项目创建好以后,在项目下添加如下内容(web.xml可来自tomact, index.jsp自己随意,servlet通过maven获取):
此时的pom.xml内容:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance http://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
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.iotzzh.mavenWebDemo</groupId>
<artifactId>mavenWebDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
其实我本地安装的时tomact9, 然而我在使用maven build的时候也是可以正常build,所以可见,此处的tomact跟本地的tomact并不相关。 可见以下两种方式的运行方式: