Maven入门--基础篇
来源:互联网 发布:仿真软件下载fxtrn 编辑:程序博客网 时间:2024/06/05 10:56
本博目录:
- 一 什么是Maven
- 二 Maven的安装及配置
- 三 Maven详解
- 1 Maven坐标
- 2 maven依赖
- 3 maven仓库
- 3-1 远程仓库的配置
- 3-2 远程仓库的认证
- 3-3 部署到远程仓库
- 4 Maven生命周期和插件
- 4-1Maven生命周期
- 4-2Maven插件
- 四 maven常用命令
很早就在项目中接触过Maven,但对Maven没有很深入的了解,犹如《西游记》中五庄观偷吃人参果的猪悟能,囫囵吞食,不知其味。在拜读了《Maven 实战》之后,对Maven有了一定的了解,特记录一些知识如下。
一、 什么是Maven?
Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven作为跨平台的项目管理工具,最重要的用途—->”服务于构建”,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告、再到打包和部署。
二、 Maven的安装及配置
Maven的安装教程,自己可百度安装即可,在这就不赘述了。apache-maven-3.1.0/conf目录中有一个settings.xml文件,我们来剖析下Maven配置文件settings.xml,内容如下代码:
<?xml version="1.0" encoding="UTF-8"?><settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><!--̹本地仓库地址--> <localRepository>C:\chao\repository</localRepository><!--servers配置认证信息,如下表示:连接id为nexus-snapshots的远程仓库的用户名和密码--> <servers> <server> <id>nexus-snapshots</id> <username>swc</username> <password>swc123</password> </server> <server> <id>nexus-releases</id> <username>swc</username> <password>swc123</password> </server> <server> <id>tomcat7</id> <username>swc</username> <password>swc</password> </server> <!-- 结合私服,使用镜像代替中央仓库--> <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf><!-- 匹配所有远程仓库--> <name>internal nexus repository</name> <url>http://loaclhost:8081/nexus/content/groups/public/</url> </mirror> </mirrors> <proxies> <!-- 公司设置代理上网,就要在此配置HTTP 代理--> <proxy> <id>petrochina</id> <active>true</active><!-- 激活代理--> <protocol>http</protocol> <host>10.22.96.29</host> <port>8080</port> <nonProxyHosts>10.*|*.com|*.cnpc|*.local</nonProxyHosts> <!-- <username></username> <password></password> --> </proxy> </proxies></settings>
(附:Maven安装包下载地址:http://pan.baidu.com/s/1qYG8jEk)
三、 Maven详解
Maven项目中默认的主代码目录是src/main/java,默认的测试代码目录是src/test/java,任何一个maven项目都需要定义自己的坐标,当这个maven项目作为其他maven项目的依赖时,这组坐标就体现了其价值,。
3.1 Maven坐标
Maven定义了这样一组规则:世界上任何一个构件(任何一个依赖、插件或者项目构建的输出,都称之为构件)都可以使用Maven坐标唯一标示。Maven坐标的元素包括:groupId、artfactId、version、packaging、classifier。例如下面就是Mysql驱动的坐标:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency>
参数说明:
groupId:定义当前Maven项目隶属的实际项目
artfactId:该元素定义实际项目中的一个Maven项目
version:该元素定义Maven项目当前所处的版本
packaging:该元素定义Maven项目的打包方式,(jar或war)默认是jar
classifier:该元素用来帮助定义构建输出的一些附属构件
3.2 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/xsd/maven-4.0.0.xsd"> <modelVersion>...</modelVersion> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <name>...</name> <packaging>...</packaging> <description>...</description> <dependencies> <dependency> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <scope>...</scope> <optional>...</optional> <exclusions> <exclusion> <groupId>...</groupId> <artifactId>...</artifactId> </exclusion> </exclusions> </dependency></project>
参数说明:
groupId、artfactId和version是Maven坐标的基本元素
type:依赖的类型
scope:依赖的范围。依赖范围就是用来控制依赖与(编译classpath、测试classpath、运行classpath的关系,包括compile、test、provided、runtime、system、import。 Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
3.3 maven仓库
Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。
对于Maven来说,仓库可以分为两类:本地仓库和远程仓库,如图所示。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库有此构件,则直接使用;如果没有,或者需要查看是否有更新的构件版本,Maven就会到远程仓库查找,找到构件下载到本地再使用。
中央仓库是Maven核心自带的的远程仓库。
私服是一种特殊的远程仓库,是在局域网内架设私有的仓库服务器。用其代理所有外部的远程仓库,供局域网内的Maven用户使用,从而降低中央仓库的负荷。
3.3-1 远程仓库的配置
<repositories> <repository> <id>nexus-snapshots</id> <name>Nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
参数说明:
releases的值为true,表示开启Nexus仓库的发布版本下载支持
snapshots的值为true,表示开启Nexus仓库的快照版本下载支持
updatePolicy配置从远程仓库检查更新的频率,有never/always/interval:x,默认是daily
checksumPolicy配置Maven检查检验和文件的策略,其值为:warn/fail/ignore,默认是warn。
3.3-2 远程仓库的认证
大部分远程仓库无须认证就可以访问,但出于安全考虑,我们需要提供认证信息才能访问一些远程仓库。Maven使用settings.xml文件中的server元素配置仓库认证信息。
<servers> <server> <id>nexus-snapshots</id> <username>swc</username> <password>swc123</password> </server> <server> <id>nexus-releases</id> <username>swc</username> <password>swc123</password> </server> <server> <id>tomcat7</id> <username>swc</username> <password>swc</password> </server> </servers>
3.3-3 部署到远程仓库
Maven除了能对项目进行编译、测试和打包之外,也可将项目生成的构建部署到仓库中。在pom文件中配置如下,在命令行运行mvn clean deploy
Maven就会将项目构建输出的构建部署到配置对应的远程仓库。
<distributionManagement> <repository><!--发布版本构件的仓库 --> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository><!--快照版本构件的仓库 --> <id>nexus-snapshots</id> <name>Nexus Snapshots Repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
3.4 Maven生命周期和插件
3.4-1Maven生命周期
Maven的生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤,生命周期是抽象的,不做任何实际的工作,都交由插件来完成。
Maven拥有三套相互独立的生命周期:clean(清理项目)、default(构建项目)、site(建立项目站点)。在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行。
clean生命周期一共包含了三个阶段:
pre-clean 执行一些clean之前完成的工作clean 清理上一次构建生成的文件post-clean 执行一些clean之后完成的工作
Maven的最重要的default生命周期,绝大部分工作都发生在这个生命周期中。
validateinitializegenerate-sourcesprocess-sourcesgenerate-resources process-resources #处理项目主资源文件,一般来说,是对src/main/resources目录内容复制到项目输出的classpath目录中。compile # 编译项目的源代码。一般来说,是编译src/main/java目录下的java文件至项目输出的classpath目录中。process-classes generate-test-sources process-test-sources #处理项目测试资源文件一般来说,是对src/test/resources目录内容复制到项目输出的classpath目录中。generate-test-resourcesprocess-test-resources #复制并处理资源文件,至目标测试目录。test-compile #编译测试源代码。一般来说,是编译src/test/java目录下的java文件至项目输出的classpath目录中。process-test-classes test #使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。prepare-packagepackage #接受编译好的代码,打包成可发布的格式,如 JAR 。pre-integration-testintegration-testpost-integration-testverify install #将包安装至Maven本地仓库,供本地其它项目依赖。deploy #将最终的包复制到远程仓库,以让其它开发人员与项目共享。
Site生命周期的各个阶段:
pre-site 执行一些需要在生成项目站点之前完成的工作site 生成项目的站点文档post-site 执行一些需要在生成项目站点之后完成的工作,并且为部署做准备site-deploy 将生成的项目站点部署到特定的服务器上
3.4-2Maven插件
在pom文件中配置插件仓库,
<pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories>
添加插件配置
<build> <!-- 插件列表 --> <finalName>${project.name}</finalName> <plugins> <!-- compiler插件, 设定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>false</showWarnings> <showDeprecation>false</showDeprecation> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.1.v20140609</version> <configuration> <httpConnector> <port>8080</port> </httpConnector> <webAppConfig> <contextPath>/${project.name}</contextPath> </webAppConfig> </configuration> </plugin> </plugins> </build>
四 、maven常用命令
mvn dependency:list 了解项目中所有依赖的基本信息
mvn dependency:tree 生成依赖树,查看依赖信息。
maven clean:清理上一次构建生成的文件。
mvn test 运行测试
mvn compile 编译项目
mvn deploy:将项目构建输出的构件部署到配置对应的远程仓库。
mvn install 将项目的构建输出文件安装到本地仓库。
mvn package -Dmaven.test.skip=ture 打包时跳过测试
- Maven入门--基础篇
- Maven入门基础-环境篇
- Maven 环境搭建基础入门篇
- maven的基础入门
- maven入门基础
- MAVEN基础入门
- maven 零基础入门
- Maven基础--入门
- Maven入门基础
- Maven基础入门
- maven入门基础
- Maven基础学习(一)—Maven入门
- Maven基础学习(一)—Maven入门
- Maven基础学习—Maven入门
- Maven学习之基础入门
- Java开发基础——Maven入门
- MAVEN入门学习之路--基础
- 【maven学习笔记】maven基础入门学习中文教程
- kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决
- config:invalid url donmain
- 增强for循环
- Python RSA, ECDSA384签名/验证
- 项目文件包含 ToolsVersion="12.0"。(或者14.0)解决方法
- Maven入门--基础篇
- 以太坊智能合约的设计模式
- 私有云落地解决方案之网络篇-关键技术-VRRP
- 上市公司财务报告的那点事(6):用自己的语言解读《投资中最简单的事:投资理念》)
- 在eclipse里启动tomcat浏览器不能访问
- Oracle 用sqlplus登录的时候在输入口令时怎么不能输入字符?
- 开发中点滴积累图片点击放大的实现
- 哈夫曼树
- 单位Units和 全局变量Globally Available Variables