maven学习(上)- 基本入门用法

 公司新闻     |      2020-01-25 07:27

  先到官网下载最新版本(目前是3.1.1),下载完成后,解压到某个目录(本文中是C:\Java\maven-3.1.1)

  首次运行完mvn -version后,会在用户目录下创建一个.m2的目录(比如:C:\Users\当前用户名\.m2\),这个目录是maven的“本地仓库”,仓库是maven中一个很重要的概念。拉菲2手机登录网址

  试想一下,我们会在工作中同时创建很多项目,每个项目可能都会引用一些公用的jar包是dll文件),一种作法是每个项目里,都复制一份这些依赖的jar包(或dll文件),这样显然不好,相同的文件在硬盘上保存了多份,太占用空间,而且这些依赖的jar包(或dll文件)的版本也不太好管理(比如某个公用的jar包,从1.0升级到2.0,如果所有引用这个jar包的项目都需要更新,必须一个个项目的修改)。

  maven的仓库则很好的解决了这些问题,它在每台机器上创建一个本机仓库,把本机上所有maven项目依赖的jar包统一管理起来,而且这些jar包用“坐标”来唯一标识(注:坐标是另一个重要的概念,后面还会讲到,这里只要简单理解成“唯一识别某个jar包文件名、版本号”的标识即可),这样所有maven项目就不需要再象以前那样把jar包复制到lib目录中,整个maven项目看起来十分清爽。

  maven项目在编译、测试、打包里,会需要从maven的中央仓库(即:maven组织公布在互联网上的一个站点,里面已经收录了目前绝大多数主流的jar包)下载jar包等文件,如果使用代理服务器上网,需要配置代理服务器。

  把注释去掉,host这里填写代理服务器的地址(可以用IP)以及port端口,如果需要用户名/密码认证,则填写username/password节点,否则username/password这二个节点去掉,nonProxyHosts表示某些地址不需要经过代理服务器,多个地址之间用分隔,支持通配符,比如172.156.*

  首次运行时,mvn会从远程中央仓库下载一些必需的文件到本地仓库 - (如果你有兴趣,可以在等待下载过程中,观察一下C:\Users\当前用户名\.m2\repository到底下载了些啥东东)

  下载完成后(下一篇会讲解如何,在局域网环境中搭建“私服”,直接从局域网的代理仓库中下载这些依赖项),会自动进入交互模式,会让你输入一些基本信息,类似下面这样:

  注意上面带红色的目录名,maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。这是全世界maven项目的通用约定,请记住这些固定的目录结构。

  这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息

  注:从输出上可以发现,test前,会先执行compile,即先编译,再执行单元测试.

  通常我们会把java项目打包成jar包或war包,maven中打包的命令为

  注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包

  该项目中的App.java中有main方法,可以直接运行,常规方式下,我们如果想直接运行class文件,得敲一段很长的命令,maven中不必这么复杂,先用记事本打开项目根目录下的pom.xml文件,增加下面这节内容:

  就能自动将web项目部署到jboss中(前提是jboss web server已经成功启动),因为刚才我们创建的是一个最基本的maven项目,并非web项目,所以执行这条命令,应该会失败,后面会讲如何在eclipse中用插件部署web项目,这里可以先跳过。

  有时候,我们的项目是一个类库,只是封装一些方法供其它项目引用,对于这种项目,我们可以用mvn clean install把生成的jar包,安装到“本地仓库”中,这样本机其它项目需要使用该jar包时,只要在pom里配置依赖项即可,不用把jar包复制到当前项目中。

  然后Finish完成项目创建。整个过程其实跟前面提到的纯手式命令行完全类似,只不过借助于插件,以图形化的方式更友好而已,直接Finish

  实际使用中,发现eclipse与maven之间并非整合得天衣无缝,有时候eclipse中项目图标经常会莫名其妙的出现一些红叉,以下是一些个人经验:

  c) 有时候b)步骤操作完以后,仍然会有红色感叹号或红叉,但是eclipse编译、调试都OK,拉菲2这就要具体问题具体分析了,可以尝试把Problems面板调出来,逐个分析