Maven:
Maven是一个基于项目对象模型,即POM;拥有约定优于配置思想的管理工具。
可以通过一小段描述信息(配置文件)来管理项目的构建,报告和文档的软件项目管理工具。
Maven的主要功能:
①、项目的构建
创建一个maven project,可以创建一个jar、war和pom项目,一般pom项目是一个父类,用于子类管理依赖版本;jar是java项目;war是web项目
②、依赖的管理
Maven很好的一个功能就是项目之间的依赖关系管理,即版本的管理。
作为一个项目管理工具,maven管理包含了:
①、一个项目对象模型(POM),工程的根目录下有pom.xml 用来管理依赖
②、一组标准集合,一系列的配置
③、一个项目的生命周期:清理、编译、测试、报告、打包、部署
④、一个依赖管理系统只需要配置pom.xml即可管理项目(jar、war)
注意:
当第一次配置maven文件确定依赖关系的时候,maven会自动从网上指定的位置下载项目,第一次使用maven需要连接网络。
简单的使用maven:
一、 maven为第三方工具,需要下载:http://maven.apache.org/download.cgi
二、 配置maven的环境变量。需要依赖jdk环境,使用配置在jdk之后。
三、 配置环境变量和jdk方式一样,在path中加上%MAVEN_HOME/bin%
四、 测试maven,在cmd中输出maven -v
如图,则配置成功。
本地仓库:
使用maven开发项目的时候,从网络下载的依赖包会下载在本地的仓库中,以后如果有需要使用的话,会从本地仓库中找;没有在从网上的中央仓库查询。
配置本地仓库,主要设置maven\conf\setting.xml,内容为本地仓库地址
<localRepository>D:\repository\bin</localRepository>
Setting.xml配置文件:
localRepository:配置本地仓库的目录
InteractiveMode:是否需要和用户交互以获得输入。如果Maven需要和用户交互以获得输入,则设置为true,默认为true
Offline:是否需要在离线模式下运行,默认为false
PluginGroups:插件组。默认情况下该列表包含了org.apache.maven.plugins
Proxies:通过代理访问外部库,既可以通过代理去访问私服或其他项目的仓库
Servers:配置服务端的设置,用于安全认证;如私服的配置,账号admin,密码admin123
<server>
<id>releases</id> <!-- 发布版本 -->
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>Snapshots</id> <!-- 测试版本 -->
<username>admin</username>
<password>admin123</password>
</server>
Mirrors:镜像库。确定使用的仓库,即使用私服的仓库
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://localhost:8080/nexus/content/groups/public/</url>
<!-- url的地址为:指定的ip下的nexus -->
</mirror>
Profiles:根据环境参数来调整构建配置的列表,在配置私服的时候需要用上,需要激活才可以生效
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://repo1.maven.org/maven2/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
ActiveProfiles:手动激活profiles的列表(在activeprofiles的名称需要和profiles的id一致)
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
Maven项目的详细见解:
Pom:(pom.xml)pom.xml是maven项目的核心文件,它是指示maven如何工作的元数据文件,在pom.xml中进行各版本的依赖管理。
GroupId:groupid是一个工程的在全局的唯一的标识符,一般地,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其他有类似名称的工程区别出来。
Artifact:artifact是工程将要产生或需要使用的文件,它可以是jar文件,源文件,二进制文件,war文件,pom文件。每个Artifact都是由groupId和artifactid组合的标识符唯一识别。需要被使用(依赖)的Artifact都要放在仓库中,否则maven无法找到它们。
Dependency:为了能够build或者运行,在pom.xml中需要使用dependency来依赖管理。
Plugin:Maven是由插件组织的,它的每一个功能都是由插件提供的。插件提供goal,并根据在POM中找到的元数据去完成工作。主要的Maven插件要是由Java写成的,但它也支持用Beanshell或Ant脚本写成的插件。
<!--<dependencyManagement> 如果在子类中可以有选择性的选择依赖,则要再父类中的依赖用dependencyManagement包含 -->
<dependencies>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- http://localhost:8999/demo4 -->
<port>8888</port>
<path>/demo1</path>
</configuration>
</plugin>
</plugins>
</build>
Maven的常用命令:
在cmd下使用命令
编译:mvn compile 测试:mvn test 清除:mvn clean 打包:mvn package 安装和发布:mvn install 、 mvn deploy(安装和发布都是放在本地仓库)
Eclipse使用maven:
要想在eclipse中使用maven,也需要进行配置。
首先、需要在maven选项下的installations,把maven的包引入。
然后、在maven选项下的user setting,把maven包的setting.xml引入,是为了在eclipse中引入本地仓库。
最后、跳转到maven视图,在local repository中选择rebuild index,便会去加载在user setting中配置的setting.xml中定义的本地仓库。
需要运行web项目的话,需要运行tomcatX:run ,插件为tomcatX,X为几。
仓库的分类(了解即可):
中央仓库:
<distributionManagement>
<repository>
<id>releases</id>
<name>Internal Releases</name>
<!-- 在url中的地址需要写出服务器的ip --> <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>Snapshots</id>
<name>Internal Snapshots</name>
<url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由Maven自己维护的,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。
如果在本地仓库去找jar没有找到,就会默认去中央仓库查找
内部中心仓库(私服):
由公司内部构建的,一般是由一个小团队使用的。
私服只是为了在内部使用的。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率。
①、要把nexus.war的项目放在tomcat的webapps下
②、要把syno的项目放在用户的home目录下
除了在setting.xml中定义了私服外,在pom.xml也需要定义
依赖调节和规则:
第一原则:路径近者优先原则
在一层一层的往下依赖中,较前的声明比较优先
第二原则:第一声明者优先原则
在一层的往下依赖中,当路径相同时,同时出现两个相同的依赖,则首先定义的依赖比较优先