简介
maven对于Java相当于cocoaPods对于iOS。
官网:http://maven.apache.org/download.cgi
下载后的Maven: apache-maven-3.3.3-bin.zip
配置maven的环境变量:
本地仓库
默认本地仓库在:
系统当前用户目录下.m2
下
Maven缺省的本地仓库路径为${user.home}/.m2/repository
本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能是有些jar包的新版本没有在Maven仓库中及时更新。
修改本地创库:
在D盘下新m2\repository文件夹
可以通过修改${user.home}/.m2/settings.xml配置本地仓库路径
修改Maven安装目录下的 conf/文件夹内的setting.xml文件,新增一行:
<localRepository>D:\m2\repository</localRepository>
表示本地仓库的地址为:D:\m2\repository)
将setting.xml复制一份到
D:\m2\repository目录下
修改Eclipse中的maven配置:
更新本地仓库:
最后打开CMD,执行
mvn help:system
会发现Maven从远程库下载的jar包都会放到新修改后的路径
IntelliJ IDEA转换普通java项目为maven项目
项目上右键 Add Framework Support
,选择maven
pom.xml
Project Object Model,项目对象模型
通过xml格式保存的pom.xml文件。
作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
一个完整的pom.xml文件,放置在项目的根目录下。
<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>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
<packaging>war</packaging>
</project>
- groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
- artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
- version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
- packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par
POM之间的关系
主要用于POM文件的复用。
a)依赖关系:依赖关系列表(dependency list)是POM的重要部分
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
…
</dependencies>
b)继承关系:继承其他pom.xml配置的机制。
比如父pom.xml:
<project>
[...]
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
[...]
</project>
在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):
[...]
<parent>
<groupId>com.devzuz.mvnbook.proficio</groupId>
<artifactId>proficio</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
[...]
在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:
可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pom
c)聚合关系:用于将多个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>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<modules>
<module>my-project<module>
</modules>
</project>
Maven属性
maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:
1. env.X:操作系统环境变量,比如${env.PATH}
2. project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
3. settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
4. Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
5. 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}
Maven构建设置
构建有两种build标签:
<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">
…
<!– "Project Build" contains more elements than just the BaseBuild set –>
<build>…</build>
<profiles>
<profile>
<!– "Profile Build" contains a subset of "Project Build"s elements –>
<build>…</build>
</profile>
</profiles>
</project>
build中的主要标签:Resources和Plugins。
Resources:用于排除或包含某些资源文件.
<resources>
<resource>
<targetPath>META-INF/plexus</targetPath>
<filtering>false</filtering>
<directory>${basedir}/src/main/plexus</directory>
<includes>
<include>configuration.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
Plugins:设置构建的插件
<build>
…
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.0</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>test</classifier>
</configuration>
<dependencies>…</dependencies>
<executions>…</executions>
</plugin>
---
maven 项目在pom.xml中添加jar包:
参考:http://jingyan.baidu.com/article/e75057f2dc8e90ebc91a8915.html
Maven是基于项目对象模型,提供程序构建能力、更是提供高级的项目管理工具
在开发中,我们能节约不少的磁盘开销能力,同步更新上传svn(只是一种)上的项目,也不用每次更新jar包,把jar包放在磁盘的某一处,项目中多次使用。
---
**maven 添加jar包**
1) 输入http://mvnrepository.com
![图片.png](http://upload-images.jianshu.io/upload_images/1197462-2ce1a052a583d529.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2) 搜索jar包,比如:junit
![图片.png](http://upload-images.jianshu.io/upload_images/1197462-155cca670dccdb4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3) 一般选择使用人数最多,点击进去
4)使用人数和最新有一个权衡,选一个
![图片.png](http://upload-images.jianshu.io/upload_images/1197462-815fa75ac35a140e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5) 复制这个dependency
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
6) 粘贴到`pom.xml`中去
**Maven 太慢**
Uploading Maven Repositorty Indices...太慢
我们需要换下源:
参考:
maven:
http://www.cnblogs.com/origalom/p/5987931.html (这个是aliyun的源)
1) 替换settings.xml的镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2)如果还不行,就clean 下
mvn clean, mvn install