Maven:java
Maven是Apache公司开源项目。是一个项目构建工具。用来依赖管理。web
一样的项目,使用Maven开发项目相对于传统方式开发项目占用的空间要小,由于Maven项目没有Jar包信息。由于Maven项目的Jar包信息都在Jar包仓库(又称Maven仓库)中。tomcat
Maven查找Jar包的过程主要的核心就是依赖管理。当Maven项目中须要某一个Jar包,只须要在Maven项目中配置须要Jar包坐标信息。Maven程序根据Jar包坐标信息去Jar包仓库中去查找Jar包。app
坐标信息实例:struts2-core-2.3.24.jar Apache(公司名称/域名)+struts2(项目名称)+2.3.24(版本信息)eclipse
好处:webapp
一、再也不拷贝jar包。项目不须要存放jar包。致使项目源代码体积小。
二、使用maven开发的项目,若环境统一导入别的maven的项目不会报错。
三、代码耦合度进一步下降。
四、方便项目进行升级。
五、节省人力成本。maven
优点如何实现:ide
Maven的俩大核心:
依赖管理:对jar包进行管理的过程。
项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署一系列的操做都是经过命令来实现。工具
经过maven命令将web项目发布到tomcat:
一、cmd命令行进入该发布项目的根目录。
二、运行命令:mvn tomcat:run单元测试
配置:
配置环境变量:
变量名:MAVEN_HOME
变量值:指定到maven解压后的根目录。
将maven_home环境变量配置到path变量中。
配置本地仓库:
在maven中的setting.xml中配置:
<localRepository>jar包仓库根目录</localRepository>
maven项目核心配置文件:pom.xml
Maven的cmd经常使用命令:
clean:清理。mvn clean 去除项目中根目录的target目录。
compile:编译。mvn compile 将编译完成的.class文件存放在项目根目录的target下。
test:单元测试。mvn test 将项目根目录下的src/test/java中的单元测试类所有执行。在src/test/java下的类名有XXXTest.java的要求。
package:打包。mvn package 将项目打包,打包项目根目录下的target目录。
install:安装。解决本地多个项目公用一个jar包。mvn install 打包并放在jar包本地仓库。
Maven项目生命周期:
在maven中存在”三套“生命周期,每一套生命周期都是相互独立的,互不影响。在一套生命周期内,执行后面的命令前面命令会自动执行。
CleanLifeCycle:清理生命周期。clean命令
defaultLifeCycle:默认生命周期。compile、test、package、install、deploy命令
siteLifeCycle:站点生命周期。site命令
配置Eclipse中的Maven环境:
一、配置m2e插件,Mars2版本自带maven插件。
二、配置maven程序:
window >> preferences >> Maven >> Installations >> Add >> 单击Directory选择解压的maven安装包.OK >> 勾选配置的maven >> OK
三、配置userSetting,让eclipse知道本地仓库的位置:
window >> preferences >> Maven >> User Settings >> 在User Settings中选择解压maven的安装包的conf/settings.xml配置文件。
四、构建索引:
window >> show view >> maven Repository >> 右击Local Repository(路径) >> Rebuild Index 来构建索引
建立Maven项目:
建立Maven项目后,勾选Create a simple project ,group id 域名、Artifact Id 项目名、Version 版本。Maven项目建好以后在src/main/webapp下会缺失WEB-INF/web.xml文件,须要手动建立。在pom.xml中设置编译版本。而后 右击项目名 >> maven >> update project >> 选择当前项目 >> OK 会指定编译版本。
查找依赖:
项目创建完成后,须要查找依赖(就是jar包):打开pom.xml,选择Dependencies >> Add >> 选择版本,添加依赖(jar包)。
依赖范围:
依赖范围:默认值 complie。
complie:做用在在编译、测试、运行期间。
test:做用在测试期间。
provided:做用在编译、测试期间。
runtime:做用在测试、运行期间。
system:做用在编译、测试期间。
运行就是部署到tomcat。若是使用到tomcat自带jar包,须要将项目中依赖做用范围设置为provided。
运行Maven:
右击项目>>run as/debug as >> maven build...
而后在Goals中手动输入运行命令tomcat:run。而在debug as调试运行时,在该界面须要选择source选项关联下源码才能调试:
source >> Add >> project >> 选择调试的项目 >> OK
传递依赖冲突解决:
传递依赖:A(项目)依赖B(jar包),B依赖C(jar包),那么B就是A的直接依赖,C是A的传递依赖。若导入依赖D,D依赖C,B和D依赖的C版本不一样。则会形成版本依赖冲突。
Maven调解原则:
一、第一声明者优先原则:使用先声明定义的传递依赖。
二、路径近者优先原则:直接依赖级别高与传递依赖。
Maven排除依赖:
在pom.xml中选择Dependency Hierarchy >> 右击要排除的依赖 >> Exclude Maven Artifact... >> OK
Maven版本锁定:
指定项目中依赖的版本。
<!-- 属性 --> <properties> <test.version>版本号</test.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <!-- OGNL表达式 --> <version>${test.version}</version> </dependency> <dependency> <groupId></groupId> <artifactId></artifactId> <!-- 也能够直接指定版本号 --> <version>x.x.x</version> </dependency> ...... </dependencies> </dependencyManagement>
经过Maven对项目进行拆分、聚合:
建立maven父工程:
一、在父工程中只有pom.xml文件,父工程不进行编码。
二、项目中须要的依赖信息,只须要在父工程中定义,子模块继承。
三、将建立好的父工程发布到本地仓库。若父工程未发布到本地仓库,那么在发布子工程时会报错。
单元测试:
批量加载Spring配置文件:
classpath:applicationContext.xml 加载本项目的指定配置文件。
classpath:applicationContext-*.xml 加载本项目中以applicationContext-开头的配置文件。
classpath*:applicationContext-*.xml 加载本项目和依赖包中全部以applicationContext-开头的配置文件。
私服安装:
一、安装包nexus-x.x-bundle.zip解压。
二、使用管理员打开dos,在dos下执行命令安装私服。
三、进入解压包下的bin目录,执行:nexus install
四、启动服务:nexus start
五、默认端口号8081,http://ip:8081/nexus/
私服仓库类型:
hosted:宿主仓库。存放本公司开发的jar包
> Snapshots:测试版本
> Releases:正式版本
> 3rd party:第三方,存在版权问题-Oracle
proxy:代理仓库
> Central:代理中央仓库
> Apache Snapshots:Apache下测试版本的jar包
group:组仓库;包含宿主参数和代理仓库。
virtual:虚拟仓库。
上传Jar包到私服:
一、在maven目录下conf/setting.xml认证:配置用户名/密码。
<server> <!-- 宿主仓库id --> <id>releases</id> <!-- 用户名 --> <username>admin</username> <!-- 密码 --> <password>admin123</password> </server> <server> <!-- 宿主仓库id --> <id>snapshots</id> <!-- 用户名 --> <username>admin</username> <!-- 密码 --> <password>admin123</password> </server>
二、在将要上传的项目的pom.xml中配置jar包上传路径url
<distributionManagement> <repository> <id>releases</id> <url>http://ip:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://ip:8081/nexus/content/repositories/snapshot</url> </snapshotRepository> </distributionManagement>
执行命令上传项目到私服:deploy
下载Jar包到本地仓库:在Maven目录下conf/settings.xml配置模板。
激活模板:
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>