Maven学习笔记(一)

一,Maven的定义
        Maven是一个项目管理工具,包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。

二,约定优于配置
   Maven遵循约定优于配置的原则。
   所谓约定优于配置,是指Maven虽然支持配置方式,但是有配置好的默认值,比如使用约定好的目录结构等。

三,Maven的安装
1,安装JDK
2,下载:http://maven.apache.org/download.cgi
3,对 apache-maven-3.5.0-bin.zip进行解压缩
4,设置系统环境变量,MAVEN_HOME
5,设置path
6,检验安装是否成功(mvn -v)
7,可以修改默认仓库的位置,pache-maven-3.1.1\conf\setting.xml

因为默认的本地仓库是user.home下,所以修改为本地的路径

并创建相应路径的仓库文件夹,即G:\MavenStudio\repository,并在其同级目录下copy一份setting.xml的文件。



四,命令创建Maven项目


创建Maven的Web项目:mvn archetype:generate -DgroupId=packageName -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeGroupId=org.apache.maven.archetypes -DinteractiveMode=false
创建Maven的普通java项目:mvn archetype:generate -DgroupId=packageName -DartifactId=projectName -DinteractiveMode=false


编译生成eclipse项目

mvn eclipse:eclipse

清除

mvn eclipse:clean

五,Maven常用命令 

1. 创建Maven的普通java项目: 
mvn archetype:create 
-DgroupId=packageName 
-DartifactId=projectName 
2. 创建Maven的Web项目: 
mvn archetype:create 
-DgroupId=packageName 
-DartifactId=webappName 
-DarchetypeArtifactId=maven-archetype-webapp 
3. 编译源代码: mvn compile 
4. 编译测试代码:mvn test-compile 
5. 运行测试:mvn test 
6. 产生site:mvn site 
7. 打包:mvn package 
8. 在本地Repository中安装jar:mvn install 
9. 清除产生的项目:mvn clean 
10. 生成eclipse项目:mvn eclipse:eclipse 
11. 生成idea项目:mvn idea:idea 
12. 组合使用goal命令,如只打包不测试:mvn -Dtest package 
13. 编译测试的内容:mvn test-compile 
14. 只打jar包: mvn jar:jar 
15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile 
( -skipping 的灵活运用,当然也可以用于其他组合命令) 
16. 清除eclipse的一些系统设置:mvn eclipse:clean 


六,Maven项目目录说明

--src
-----main
----------java
----------resources
-----test
---------java
---------resources

--target

--pom.xml

src/main/java application library sources - java源代码文件
src/main/resources application library resources - 资源库,会自动复制到classes文件夹下
src/main/filters resources filter files - 资源过滤文件
src/main/assembly assembly descriptor - 组件的描述配置,如何打包
src/main/config configuration files - 配置文件
src/main/webapp web application sources - web应用的目录,WEB-INF,js,css等
src/main/bin 脚本库
src/test/java 单元测试java源代码文件
src/test/resources 测试需要的资源库
src/test/filters 测试资源过滤库
src/site 一些文档
target/ 存放项目构建后的文件和目录,jar包,war包,编译的class文件等;Maven构建时生成的
pom.xml 工程描述文件
LICENSE.txt license
README.txt read me


七、Maven的生命周期

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。

Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。


三套生命周期


Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。

1、clean生命周期:清理项目,包含三个phase。

1)pre-clean:执行清理前需要完成的工作

2)clean:清理上一次构建生成的文件

3)post-clean:执行清理后需要完成的工作

2、default生命周期:构建项目,重要的phase如下。

1)validate:验证工程是否正确,所有需要的资源是否可用。
2)compile:编译项目的源代码。 
3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
4)Package:把已编译的代码打包成可发布的格式,比如jar。
5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
6)verify:运行所有检查,验证包是否有效且达到质量标准。
7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

3、site生命周期:建立和发布项目站点,phase如下

1)pre-site:生成项目站点之前需要完成的工作

2)site:生成项目站点文档

3)post-site:生成项目站点之后需要完成的工作

4)site-deploy:将项目站点发布到服务器


命令行和生命周期


各个生命周期相互独立,一个生命周期的阶段前后依赖。

举例如下:

1、mvn clean

调用clean生命周期的clean阶段,实际执行pre-clean和clean阶段

2、mvn test

调用default生命周期的test阶段,实际执行test以及之前所有阶段

3、mvn clean install

调用clean生命周期的clean阶段和default的install阶段,实际执行pre-clean和clean,install以及之前所有阶段


八,Maven常用的仓库网址

九,Maven加载外部jar包的步骤

 1)下载外部jar文件

     2)将步骤1下载的jar文件拷贝到maven工程所在的目录,例如我新建了一个名称为test_proj的maven工程,将jar文件放到~/workspace/test_proj目录下即可

     3)执行如下命令:

            mvn install:install-file -DgroupId=xxx(jar文件的groupId) -DartifactId=xxx(jar文件的artifactId) -Dversion=xxx(jar文件的版本号) -Dfile=xxx(jar文件名称) -Dpackaging=jar -DgeneratePom=true


        例如,导入java_memcached-release_2.5.3.jar、ueditor-1.0.jar、sqljdbc4-1.0.jar、fastjson-1.1.41.jar的语句依次为:

mvn install:install-file -DgroupId=com.danga -DartifactId=memcached -Dversion=2.5.3 -Dfile=java_memcached-release_2.5.3.jar -Dpackaging=jar -DgeneratePom=true

mvn install:install-file -DgroupId=com.baidu.ueditor -DartifactId=ueditor -Dversion=1.0 -Dfile=ueditor-1.0.jar -Dpackaging=jar -DgeneratePom=true

mvn install:install-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=1.0 -Dfile=sqljdbc4-1.0.jar -Dpackaging=jar -DgeneratePom=true

mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.41 -Dfile=fastjson-1.1.41.jar -Dpackaging=jar -DgeneratePom=true



十,Maven的依赖作用范围说明

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath(注意是与classpath)的关系. 主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效。

有些依赖在主代码中需要import,在测试代码中也需要import,打包的时候还需要一起打包上传服务器,则scope是compile。

2.test:测试依赖范围。只对于测试classpath有效

有些代码是测试需要import,而主代码中不需要,我们不需要把junit打包上传到服务器,则scope是test
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api

以servlet-api为例,tomcat中已经提供了servlet-api的jar包,但是本地写代码的时候,只需要import进去,而不需要把servlet-api的jar包打包到服务器上,如果打包了,可能会产生jar包冲突,这个时候用provided。
4.runtime:运行时提供。例如:jdbc驱动

例如MySQL的jdbc驱动,在本地写代码的时候,我们都是引入的jdbc接口,并不需要引入具体的jdbc驱动实现,所以写代码的石灰石并不需要,而运行的时候,我们需要使用具体的驱动,这样的jar包我们的scope为runtime。



猜你喜欢

转载自blog.csdn.net/hhq12/article/details/75452482