Maven项目管理工具
Maven简介
Maven全称是Apache Maven Project–Apache的优秀开源项目,Maven是java项目的构建和管理工具。Maven这个词翻译为“专家”或者“内行”,是跨平台的项目管理工具。Maven主要服务于Java平台的项目构建,依赖管理,项目信息管理等。
接下来是项目构建的过程,通常项目构建的过程分为这六个步骤:
理想的项目构建是高度自动化、跨平台,可重用的组件,使用Maven就可以帮助我们完成上述项目构建的完整过程。
再有就是依赖管理。所谓的依赖管理其实就是使用Maven来管理项目中所使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。
注意Maven的使用依赖于Java,因此需要提前安装Java。
Maven的安装
Maven的用途很大,这里简单说一下:
1、用Maven可以方便的创建项目,基于archetype可以创建多种类型的java项目;
2、Maven仓库对jar包(artifact)进行统一管理,避免jar文件的重复拷贝和版本冲突;
3、团队开发,Maven管理项目的release(正式版本)和snapshot(开发版本)版本,方便多模块(module)项目的各个模块之间的快速集成。
点击这里使用镜像下载Maven:maven下载
选择所需要的的版本后,接着选择binaries这个文件夹,再选择以.zip结尾的文件就可以了,然后进行下载,解压。接下来介绍Maven解压后的目录结构,如下图所示:
bin:含有mvn运行的脚本;
boot:含有plexus-classwords类加载器框架;
conf:含有setting.xml配置文件;
lib:含有Maven运行时所需要的java类库;
后面的3个txt文件主要针对Maven版本,第三方软件进行简单介绍。
接下来进行Maven环境变量的配置:我的电脑–>属性–>高级系统设置–>环境变量–>系统变量–>新建:变量名:M2_HOME
;变量值:G:\Application\Maven\apache-maven-3.6.0
(也就是Maven解压后的目录),接着找到Path在环境变量值尾部加入;%M2_HOME%\bin;
注意前面的分号 !
最后检查Maven是否安装成功: 打开dos窗口运行命令mvn -version
,出现如下图所示的信息说明安装成功:
修改Maven本地仓库位置
通常Maven会将下载的类库(jar包)放置到本地的一个目录下(默认情况是C:\我的文档中\.m2.\repository
),如果想重新定义这个目录就需要修改Maven本地仓库的配置,这个过程也很简单,只需要四步:
第一步:在自己指定的位置处创建一个文件夹repo(名称随意),本人创建的位置是:G:\Application\Maven\repo
;
第二步:在Maven文件夹下找到conf文件夹,并找到其中的settings.xml文件,然后复制settings.xml文件放于G:\Application\Maven
,其实就是直接放在与你新建的repo文件夹同一目录:
第三步:修改这个settings.xml及前面conf文件里的settings.xml(也就是两个settings.xml文件),找到55行,修改Maven默认的仓库位置,如下图所示:
第四步:测试效果,打开dos窗口运行命令mvn help:system
,出现如下图所示的信息说明配置成功(这个过程需要一定时间):
接下来介绍Maven项目的目录结构:
创建一个Maven项目
此处使用IDEA创建一个Maven项目,先在IDEA里面进行Maven的配置:
点击上面的新建图片的首页,点击Configure–>Settings:
注意这里maven的解压路径,还有如果你的maven是默认安装,那么使用默认配置即可。由于我在前面修改了Maven的配置,因此那个Maven home directory
就需要设置为Maven的解压路径。注意一下这里的USer settings file
,你可以使用conf目录下的settings.xml,也可以使用repo同级下的settings.xml。最后的Loacl resposity
设置为你repo文件所在路径即可。按照图上所示进行配置,然后单击ok就好。
接下来正式开始创建一个Maven空白项目:
然后一直next就可以了,然后系统会自动创建项目。(GroupId是项目名称,ArtifactId是项目中某一模块的名称,Version是版本号)创建完成如图所示:(第一次使用maven可能会花一点时间,因为maven的中央仓库里面还没有文件,你需要去下载)
如果在此过程中出现c:/users/Administor/AppData/Local/Temp/archetype
,请参考这篇文章:解决办法
打开里的pom.xml文件,它的作用就是配置一些jar包的引用地址:
1 | <?xml version="1.0" encoding="UTF-8"?> |
这里面有很多,目前先关注这个:
1 | <dependencies> |
这个就是jar包的依赖配置,这里是配置了junit这个jar包,关于包的查找可以点这里:maven官方仓库,你需要什么就去这个网站进行搜索,然后复制dependency标签即可。groupId是仓库中生成包的路径,artifactId当前存放包的最终一个目录,version就是版本号。
下面是一些常用的maven命令:
清除命令:mvn clean
(删除target,不会删除本地仓库)
编译命令: mvn compile
编译、运行、发布命令:mvn install
编译、运行、不负责发布命令:mvn package
编译、如果test包下有Java代码也会编译和运行,但也一样不会发布到本地仓库:mvn test
跳过单元测试:mvn clean package -Dmaven.test.skip=true
mvn package
与mvn install
的区别:主要区别就是package命令不会将target内容发布到本地仓库。(因此建议一般使用mvn install
)
但是我们一般不会直接去使用这些命令,因为IDEA里面已经集成了这些命令。点击IDEA右侧的Maven Projects:
Lifecycle是Maven项目的生命周期,而Plugins则是针对第三方依赖包的管理。详细参看这篇文章:maven lifecycle 与 plugin
clean:用于清除之前构建生成的所有文件,其中具体为清除Target目录中的所有文件,包括该目录。
validate:用于验证项目是否真确,并且其说有必要信息是否都可用。
compile:编译项目的源代码,主要是java文件,一般是编译scr/main/java或是scr/test/java里面的文件。
test:用合适的测试框架来进行测试,测试compile中编译出来的代码,测试的东西一般不加包和部署。
package:获取compile中编译好的代码并将其打包成可分类的格式,如jar。
vertify:这步是用来验证test,检查test的结果是否满足标准。
install:将软件包安装到本地存储库中,确保本地其他项目可能需要使用它,也就是说某个项目被打包成jar包,必须先install才能被引入使用。(例如,装了core才能用oms)。
一般都是先clean,后complie,再package,接着install,最后deploy。
演示编译
接下来演示如何将一个项目打包为jar,在前面的app同级目录新建一个util包,在里面新建一个StringUtil.java文件:
1 | public class StringUtil { |
注意此处仅仅是演示,所以不再新增其他的业务逻辑。然后点击右侧的Maven Projects,按照顺序依次运行相应命令:
然后你会发现项目结构发生了变化,左侧多了一个target文件及一个demo.jar包:
接下来新建一个Web项目,然后引入刚才的jar:
然后一直next就可以了,然后系统会自动创建项目,创建完成如图所示:(第一次使用maven可能会花一点时间,因为maven的中央仓库里面还没有文件,你需要去下载)
然后配置tomcat访问(注意使用war exploded,具体可参考IDEA中的war和war exploded的区别,说白了war是打包启动,war xxx是热启动。通俗点就是当你资源发生修改时,后者可以跟着重新启动修改,而前者需要手动启动)。
接下来便是项目文件和测试文件目录的创建:在 main 文件下面创建一个java文件夹 ,然后按照如下操作:光标移到java文件夹上面,然后右键拉到底部,找到Make Directory AS ,再单击出现的Sources Root即可,会发现该文件变成了蓝色。
紧接着在src文件下,创建mian文件的测试文件夹,名称为test,然后再在test文件夹下面新建java文件夹 ,然后按照如下操作:光标移到java文件夹上面,然后右键拉到底部,找到Make Directory AS ,再单击出现的Test Sources Root即可,会发现该文件变成了绿色。
接下来开始引入jar包,打开之前那个mavendemo项目的pom.xml文件,找到关于这个项目的描述信息:
1 | <groupId>com.test.app</groupId> |
也就是这个:
然后回到helloweb项目,打开它的pom.xml文件,找到 <dependencies></dependencies>
标签,新建一个 <dependency></dependency>
标签,将之前那三行代码放进去,然后你会发现Maven会自动导入这个文件:
你可以尝试将前面那个 <dependency></dependency>
标签删除,发现这jar包又没了。
然后在mian文件下的java包中新建一个Test.java,来尝试测试一下:
1 | public class Test { |
运行结果:true。说明测试通过,我们成功的引入了jar包。
如何引入本地的jar包
前面修改过Maven的本地仓库地址为:G:\Application\Maven\repo
,因此请注意你所有在pom.xml文件中配置的依赖其实已经下载到了这个文件夹下面,例如里面的的junit的配置:
1 | <dependency> |
因此通过这个可以推断出这个juint文件的位置为:G:\Application\Maven\repo
+\junit\junit\4.11
,不信的话去看一下本地的目录结构:
确实如此,所以当你知道某个文件在哪里,那么你也可以配置依赖。
按照这种方式配置Servlet的依赖:G:\Application\Maven\repo\javax\servlet\servlet-api\2.5
,那么您在pom.xml中的依赖配置为:
1 | <dependency> |
注意到没,我们在 <groupId>
中导入的是javax.servlet
而不是javax
,因为那样可以避免依赖层级过多,降低可读性。
登录系统演示
接下来通过Servlet来编写一个登录系统,这样能体验完整的Maven功能。
在java包下面新建一个com.test.servlet包,接着新建一个LoginServlet.java文件,让它继承HttpServlet类,并重写doGet和doPost方法(忽略导包代码)
1 | public class LoginServlet extends HttpServlet { |
然后去web.xml文件中配置访问路由:
1 | <web-app> |
接着修改index.jsp页面信息为:
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> |
继续新建一个fail.jsp页面,里面的代码为:
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
同样也需要新建一个success.jsp页面,里面的代码为:
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
然后运行项目,在浏览器地址栏中输入地址:http://localhost:8080/
,发现项目测试通过。
GroupID和ArtifactID
GroupID和ArtifactID在Maven项目中是经常能看到的,那么它们分别代表什么呢?
GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
GroupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的GroupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,ArtifactId是tomcat。
比如我创建一个项目,我一般会将GroupId设置为com.envy,com表示域为全球,envy是我个人英文姓名,ArtifactId设置为springone,表示你这个项目的名称是springone,依照这个设置,在你创建Maven工程后,新建包的时候,包结构最好是com.envy.springone开头的,如果有个StudentDao类(属于Dao层),那么它的全路径就是com.envy.springone.dao.StudentDao
。