.Net转Java自学之路—Maven篇
Maven:
Maven是Apache公司开源项目。是一个项目构建工具。用来依赖管理。
同样的项目,使用Maven开发项目相对于传统方式开发项目占用的空间要小,因为Maven项目没有Jar包信息。因为Maven项目的Jar包信息都在Jar包仓库(又称Maven仓库)中。
Maven查找Jar包的过程主要的核心就是依赖管理。当Maven项目中需要某一个Jar包,只需要在Maven项目中配置需要Jar包坐标信息。Maven程序根据Jar包坐标信息去Jar包仓库中去查找Jar包。
坐标信息实例:struts2-core-2.3.24.jar Apache(公司名称/域名)+struts2(项目名称)+2.3.24(版本信息)
好处:
1、不再拷贝jar包。项目不需要存放jar包。导致项目源代码体积小。
2、使用maven开发的项目,若环境统一导入别的maven的项目不会报错。
3、代码耦合度进一步降低。
4、方便项目进行升级。
5、节省人力成本。
优势如何实现:
Maven的俩大核心:
依赖管理:对jar包进行管理的过程。
项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署一系列的操作都是通过命令来实现。
通过maven命令将web项目发布到tomcat:
1、cmd命令行进入该发布项目的根目录。
2、运行命令: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环境:
1、配置m2e插件,Mars2版本自带maven插件。
2、配置maven程序:
window >> preferences >> Maven >> Installations >> Add >> 单击Directory选择解压的maven安装包.OK >> 勾选配置的maven >> OK
3、配置userSetting,让eclipse知道本地仓库的位置:
window >> preferences >> Maven >> User Settings >> 在User Settings中选择解压maven的安装包的conf/settings.xml配置文件。
4、构建索引:
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调解原则:
1、第一声明者优先原则:使用先声明定义的传递依赖。
2、路径近者优先原则:直接依赖级别高与传递依赖。
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父工程:
1、在父工程中只有pom.xml文件,父工程不进行编码。
2、项目中需要的依赖信息,只需要在父工程中定义,子模块继承。
3、将创建好的父工程发布到本地仓库。若父工程未发布到本地仓库,那么在发布子工程时会报错。
单元测试:
批量加载Spring配置文件:
classpath:applicationContext.xml 加载本项目的指定配置文件。
classpath:applicationContext-*.xml 加载本项目中以applicationContext-开头的配置文件。
classpath*:applicationContext-*.xml 加载本项目和依赖包中所有以applicationContext-开头的配置文件。
私服安装:
1、安装包nexus-x.x-bundle.zip解压。
2、使用管理员打开dos,在dos下执行命令安装私服。
3、进入解压包下的bin目录,执行:nexus install
4、启动服务:nexus start
5、默认端口号8081,http://ip:8081/nexus/
私服仓库类型:
hosted:宿主仓库。存放本公司开发的jar包
> Snapshots:测试版本
> Releases:正式版本
> 3rd party:第三方,存在版权问题-Oracle
proxy:代理仓库
> Central:代理中央仓库
> Apache Snapshots:Apache下测试版本的jar包
group:组仓库;包含宿主参数和代理仓库。
virtual:虚拟仓库。
上传Jar包到私服:
1、在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>
2、在将要上传的项目的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>