MAVEN基础入门

1MAVEN简介
Maven是一个项目管理工具,能够很方便的帮你管理项目的构建(编译、测试、打包、发布)和依赖(项目编译和运行需要的jar包)。

Maven使用pom.xml(项目对象原型)来描述项目的管理信息;使用本地仓库(localRepository)来存储项目生成的jar包和项目依赖的jar包;使用远程仓库来下载依赖的jar包、发布本地生成的jar包给别人使用。

Maven使用生命周期(lifecycle)的概念来管理项目的构建流程,每个生命周期会执行对应的插件(plugin)来生成产出物,比如说编译插件生成class文件,打包插件生成jar包。

Maven对项目的目录结构有一些约定。

maven概念
在这里插入图片描述
MAVEN生命周期
Maven有三套独立的生命周期:Clean、Default、Site,每个生命周期都由几个不同的阶段(Phase)组成。

Clean周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
Default周期包含的阶段比较多,这里只解释一些比较重要和常用的阶段::

validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,给其它项目提供依赖。
deploy 将最终的包复制到远程的仓库,给其它开发人员和项目提供依赖。
Site生命周期的各个阶段:

pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
我们通常执行的mvn clean install指令,实际上包含了Clean周期的pre-clean、clean阶段和Default周期的从validate到install阶段。Site阶段比较少用。

MAVEN目录结构
src/main/java: 存放项目的java文件。
src/main/resources: 存放项目的配置及资源文件,如spring,hibernate的配置文件。编译后,这些文件会被编译到classpath下。
src/main/webapp: 存放WEB资源文件,WEB-INF/web.xml和html、js、css、images等等。
src/test/java: 存放所有的测试的java文件。
src/test/resources: 存放测试用的资源文件。
target: 项目输出位置。
pom.xml 项目管理信息描述文件,描述项目的分组(groupId)、标识(artifactId)、版本(version)、依赖包(dependence)、插件配置(plugin)等等。

MAVEN原型创建项目
maven提供一些项目模板,即原型(archetype),maven原型插件(maven-archetype-plugin)能够根据这些原型生成一个项目骨架。

下面介绍在eclipse中使用maven-archetype-quickstart原型创建一个简单的helloworld工程。

打开eclipse,菜单中选择File,New,Maven Project,第一个对话框用于选择项目位置和工作集,直接点击Next。

第二个对话框用于选择原型,请选择maven-archetype-quickstart,点击Next。

第三个对话框用于填写项目信息。groupId填写com.tansun,artifact Id 填写helloworld。点击Finish。

可以看到helloworld工程已经创建完成,包含src/main/java,src/test/java,pom.xml,以及App.java和AppTest.java两个源文件。

打开pom.xml文件,点击pom.xml选项卡,可以看到helloworld项目配置信息。


4.0.0

com.tansun
helloworld
0.0.1-SNAPSHOT
jar

helloworld
http://maven.apache.org

junit junit 3.8.1 test 其中packaging指定了项目最终打包成jar包。dependencies指明项目依赖junit的3.8.1的版本。 project.build.sourceEncoding指明项目使用UTF-8编码构建。

maven构建项目

在打开的pom文件上右键选择Run As,可以看到eclipse已经内置了一些maven指令。

选择不带快捷键的那个maven build,会打开运行配置对话框。其中Goals填写clean install。点击Run。

[INFO] Scanning for projects…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building helloworld 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ helloworld —
[INFO] Deleting /Users/zhaoj/workspace/helloworld/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ helloworld —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/zhaoj/workspace/helloworld/src/main/resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ helloworld —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/zhaoj/workspace/helloworld/target/classes
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ helloworld —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/zhaoj/workspace/helloworld/src/test/resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/zhaoj/workspace/helloworld/target/test-classes
[INFO]
[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ helloworld —
[INFO] Surefire report directory: /Users/zhaoj/workspace/helloworld/target/surefire-reports


T E S T S

Running com.tansun.helloworld.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ helloworld —
[INFO] Building jar: /Users/zhaoj/workspace/helloworld/target/helloworld-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] — maven-install-plugin:2.4:install (default-install) @ helloworld —
[INFO] Installing /Users/zhaoj/workspace/helloworld/target/helloworld-0.0.1-SNAPSHOT.jar to /Users/zhaoj/.m2/repository/com/tansun/helloworld/0.0.1-SNAPSHOT/helloworld-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/zhaoj/workspace/helloworld/pom.xml to /Users/zhaoj/.m2/repository/com/tansun/helloworld/0.0.1-SNAPSHOT/helloworld-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.712 s
[INFO] Finished at: 2018-03-05T20:04:12+08:00
[INFO] Final Memory: 17M/212M
[INFO] ------------------------------------------------------------------------
在控制台中可以看到项目BUILD SUCCESS。控制台信息从头看起,可以发现maven-clean-plugin插件执行了删除target目录的动作;

maven-resources-plugin插件负责资源拷贝,但是我们的工程没有src\main\resources目录,所以跳过了; maven-compiler-plugin插件将App.java编译成class; maven-surefire-plugin插件调用junit测试框架将测试类跑了一遍; maven-jar-plugin插件将以上步骤生成的文件打成了jar包; 最终,maven-install-plugin插件将jar包和项目描述信息发布到了本地仓库。

你也可以单独执行maven指令(不用像上面一样一次填写两条),各指令的作用:

clean 移除所有上一次构建生成的文件
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
install 将包安装至本地仓库,给其它项目提供依赖。=======

MAVEN常用命令

1 编译源代码:

mvn compile
2 编译测试代码:

mvn test-compile
3 运行测试:

mvn test
4 打包:

mvn package
5 在本地Repository中安装jar:

mvn install
6 清除产生的项目:

mvn clean
7 生成eclipse项目:

mvn eclipse:eclipse
8 生成idea项目:

mvn idea:idea
9 组合使用goal命令,如只打包不测试:

mvn -Dtest package
10 编译测试的内容:

mvn test-compile
11 只打jar包:

mvn jar:jar
12 只测试而不编译,也不测试编译:

mvn test -skipping compile -skipping test-compile
( -skipping 的灵活运用,当然也可以用于其他组合命令) 13 清除eclipse的一些系统设置:

mvn eclipse:clean
14 查看当前项目已被解析的依赖:

mvn dependency:list
15 上传到私服:

mvn deploy
16 强制检查更新,由于快照版本的更新策略(一天更新几次、隔段时间更新一次)存在,如果想强制更新就会用到此命令:

mvn clean install -U
17 源码打包:

mvn source:jar

mvn source:jar-no-fork
mvn compile与mvn install、mvn deploy的区别 mvn compile,编译类文件 mvn install,包含mvn compile,mvn package,然后上传到本地仓库 mvn deploy,包含mvn install,然后,上传到私服

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值