初识Maven
初识Maven:
一、什么是Maven?
Maven是java开发的,Maven是一个项目管理和综合工具。Maven不仅是构建工具,还是一个依赖管理工具和项目管理工具,它提供了中央仓库,能帮我自动下载构件(jar包)。
二、Maven下载、安装
下载地址:http://maven.apache.org/download.cgi
下载完成后,得到一个压缩包,解压,可以看到maven的组成目录
Maven目录分析
- bin:含有mvn运行的脚本
- boot:含有plexus-classworlds类加载器框架
- conf:含有settings.xml配置文件
- lib:含有Maven运行时所需要的java类库
- LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
Maven安装
1、首先要确保电脑上已经安装了JDK(要jdk 1.6+的版本),配置好JDK的环境变量,使用如下的命令检查JDK安装的情况。
Java -version
2、对apache-maven-3.2.3-bin.zip进行解压缩
3、设置系统环境变量:MAVEN_HOME
验证Maven安装是否成功
输入"mvn –v"命令 查看Maven的相关信息,如下图所示:
能够出现这样的信息就说明Maven的安装已经成功了。
三、maven常用命令
mvn clean:表示运行清理操作(会默认把target文件夹中的数据清理)。
mvn clean compile:表示先运行清理之后运行编译,会将代码编译到target文件夹中。
mvn clean test:运行清理和测试。
mvn clean package:运行清理和打包。
mvn clean install:运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用。
mvn clean deploy:运行清理和发布(发布到私服上面)。
四、maven配置文件详解
配置文件位置如下:
settings.xml的作用
它是用来设置Maven参数的配置文件。并且,settings.xml是Maven的全局配置文件。settings.xml中包含类似本地仓库、远程仓库和联网使用的代理信息等配置。
Maven 允许我们在这里定义我们自己的 settings.xml,如果需要在这里定义我们自己的settings.xml的时候就可以把Maven安装目录下面的settings.xml文件拷贝到C盘下的用户目录的.m2目录下,然后改成自己想要的样子。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| 该值表示构建应用时本地仓库的路径,当我们添加了maven坐标在配置文件中是,从远程仓库下载的jar包也是存放在当前的位置
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- interactiveMode
|作用:表示maven是否需要和用户交互以获得输入。
|如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。
| Default: true
<interactiveMode>true</interactiveMode>
-->
<!-- offline
| 作用:这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。
| 如果构建系统需要在离线模式下运行,则为true,需要联网拉取jar则为false, 默认为false。
| 当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
| Default: false
<offline>false</offline>
-->
<!-- pluginGroups
| 作用:在pluginGroups元素下面可以定义一系列的pluginGroup元素。表示当通过plugin的前缀来解析plugin的时候到哪里寻找。
pluginGroup元素指定的是plugin的groupId。默认情况下,Maven会自动把org.apache.maven.plugins 和 org.codehaus.mojo 添加到pluginGroups下。
|-->
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups>
<!-- proxies
| 作用:用来配置代理列表,只有当前代理列表下的主机可以访问网络
|-->
<proxies>
<!-- proxy
| 配置代理信息
<proxy>
<!-- 代理的唯一定义符,用来区分不同的代理元素 -->
<id>Myproxy</id>
<!--该代理是否是激活的那个。true则激活代理。当我们声明了一组代理,而某个时候只需要激活一个代理的时候,该元素就可以派上用处。-->
<active>true</active>
<!--代理的协议。 协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<protocol>http</protocol>
<!--代理的主机名。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<host>proxy.host.net</host>
<!--代理的端口。协议://主机名:端口,分隔成离散的元素以方便配置。 -->
<port>80</port>
<!--代理的用户名,用户名和密码表示代理服务器认证的登录名和密码。 -->
<username>proxyuser</username>
<!--代理的密码,用户名和密码表示代理服务器认证的登录名和密码。 -->
<password>proxypass</password>
<!--不该被代理的主机名列表。该列表的分隔符由代理服务器指定;例子中使用了竖线分隔符,使用逗号分隔也很常见。 -->
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies>
<!-- servers
| 作用:一般,仓库的下载和部署是在pom.xml文件中的repositories 和 distributionManagement |元素中定义的。
然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在 | settings.xml 中
-->
<servers>
<!-- server
| 需要连接到服务器时,配置服务器需要的信息
<server>
| 这是server的id(注意不是用户登陆的id),该id与POM文件中distributionManagement中repository元素的id相匹配。
<id>deploymentRepo</id>
| 鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码
<username>repouser</username>
| 鉴权密码
<password>repopwd</password>
</server>
-->
<!-- Another sample, using keys to authenticate.
<server>
<id>siteServer</id>
| 鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。
将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明
<privateKey>/path/to/private/key</privateKey>
| 鉴权时使用的私钥密码
<passphrase>optional; leave empty if not used.</passphrase>
</server>
-->
</servers>
<!-- mirrors
| 作用:用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载jar包的时候所使用的远程仓库。但是有时候这个远程仓库会比较忙,
所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,
这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载jar包的时候Maven就可以从我们定义好的mirror站点来下载,
这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。
|-->
<mirrors>
<!-- mirror
| 给定仓库的下载镜像
<mirror>
| 该镜像的唯一标识符。id用来区分不同的mirror元素
<id>mirrorId</id>
| 镜像名称
<name>Human Readable Name for this Mirror.</name>
| 该镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。
这必须和中央仓库的id central完全一致
<mirrorOf>repositoryId</mirrorOf>
| 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<!-- 一般maven使用国外的仓库地址下载jar比较慢, 通常需要换成国内的镜像地址 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<!-- profiles
| 作用:根据环境参数来调整构建配置的列表。
settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了id、activation、repositories、pluginRepositories和 properties元素。
这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。
如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。当所有的约束条件都满足的时候就会激活这个profile
|-->
<profiles>
<!-- profile
<profile>
<!-- profile的唯一标识 -->
<id>jdk-1.4</id>
<!-- 作用:自动触发profile的条件逻辑。这是profile中最重要的元素。跟pom.xml中的profile一样,settings.xml中的profile也可以在特定环境下改变一些值,
而这些环境是通过activation元素来指定的。activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。
profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。 -->
<activation>
<!-- 表示当jdk的版本满足条件的时候激活 -->
<jdk>1.4</jdk>
</activation>
<!-- 用于定义远程仓库的,当该profile是激活状态的时候,这里面定义的远程仓库将作为当前pom的远程仓库。它是maven用来填充构建系统本地仓库所使用的一组远程仓库 -->
<repositories>
<repository>
<id>jdk14</id>
<name>Repository for JDK 1.4 builds</name>
<url>http://www.myhost.com/maven/jdk14</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>
</profile>
-->
| Here is another profile, activated by the system property 'target-env' with a value of 'dev',
| which provides a specific path to the Tomcat instance. To use this, your plugin configuration
| might hypothetically look like:
|
| ...
| <plugin>
| <groupId>org.myco.myplugins</groupId>
| <artifactId>myplugin</artifactId>
|
| <configuration>
| <tomcatLocation>${tomcatPath}</tomcatLocation>
| </configuration>
| </plugin>
| ...
|
| NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
| anything, you could just leave off the <value/> inside the activation-property.
|
<profile>
<id>env-dev</id>
<activation>
<property>
<name>target-env</name>
<value>dev</value>
</property>
</activation>
<!-- 用于定义属性键值对的。当该profile是激活状态的时候,properties下面指定的属性都可以在pom.xml中使用。对应profile的扩展属性列表。 -->
<properties>
<tomcatPath>/path/to/tomcat/instance</tomcatPath>
</properties>
</profile>
</profiles>
<!-- activeProfiles
| 作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。
<activeProfiles>
<!-- 要激活的profile id -->
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
-->
</settings>