maven:
是一个 构建工具,基于java平台的 项目构建,依赖管理、项目信息管理。构建:
构建是每一位程序员每天都在做的工作。早上来到公司,我们做的第一件事就是从源码库签出最新的代码,然后进行单元测试,如果发现失败的测试,会找相关的同事一起调试,修复代码错误。接着回到自己的工作上来,编写自己的单元测试及产品代码。构建就是除了编写源代码,还有编译,运行单元测试,生成文档,打包和部署等繁琐切不起眼的工作上。
优势:
跨平台、服务于构建、
标准化、
封装构建过程、
依赖管理工具、
项目规范化 —— 预定优于配置
仓库:
中央仓库:maven的仓库在国外服务器本地仓库:当依赖一个jar包时,首先查询的是本地仓库,如果本地仓库没有,那么从中央仓库下载,下载到本地仓库。依赖时从本地仓库直接依赖
本地仓库默认在${user.home}/.m2/repository
通过maven的conf目录下的settings可以设置本地仓库的位置
<localRepository>D:\\maven_repo\\repository</localRepository>
私服:私有服务器
在企业中一般都是搭建一个私有服务器nexus(nexus),搭建私服后,可以依赖私服。此外一些无法从外部仓库下载的构件也能从本地上传到私服提供局域网中其他人使用
国内私服:开源中国、阿里云
依赖范围:
Compile:编译依赖范围。默认使用该依赖范围,编译、测试、运行都有效。Test:测试依赖范围。只在测试的时候需要。比如:junit。
Provided:已提供依赖范围。对编译和测试有效,运行时无效。比如:servletAPI
Runtime:运行依赖范围。对测试和运行有效,但在编译时无效。比如:JDBC驱动
System:系统依赖范围。一般不适用。
传递性依赖:
依赖有可能产生冲突:冲突场景:
a依赖b,b依赖c,c的版本是1.0
a依赖e,e依赖c,c的版本是2.0
结果: 按照第一个声明的算,1.0版本。
冲突场景:
a依赖b,b依赖c,c依赖d,d的版本1.0
a依赖e,e依赖d,d的版本2.0
结果: 路径最近的有限,2.0版本。
排除依赖:
<dependency>
<groupId>com.siggy.crm</groupId>
<artifactId>crm-user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</exclusion>
</exclusions>
</dependency>
Maven项目的聚合和继承
聚合:
建立一个空的Maven项目作为管理者<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.siggy.crm</groupId>
<artifactId>crm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../crm-core</module>
<module>../crm-user</module>
<module>../crm-login</module>
</modules>
</project>
继承
<parent>
<artifactId>crm-parent</artifactId>
<groupId>com.siggy.crm</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.siggy.crm</groupId>
<artifactId>crm-admin</artifactId>
<version>0.0.1-SNAPSHOT</version>
使用Maven构建web项目
Tomcat7的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户。这里我把所用的权限都添加给admin用户了,具体代码如下:<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="1111" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
Maven的Server的配置:在Maven的安装路径找到conf目录下的setting.xml文件,在<servers>节点中添加tomcat7下配置的用户信息(id可以任意填写,但username和password和上面一致):
<server>
<id>tomcat7</id>
<username>admin</username>
<password>1111</password>
</server>
在web项目的pom.xml文件的<plugins>节点中,添加tomcat7的maven插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- 注意此处的url -->
<url>http://localhost:8080/manager/text</url>
<server>tomcat7</server> <!-- 此处的名字必须和setting.xml中配置的ID一致-->
<path>/mavenProject</path> <!-- 此处的名字是项目发布的工程名-->
</configuration>
</plugin>
最后只需要 mvn tomcat7:deploy 即可(必须事先启动tomcat服务器)