您的位置:首页 > 其它

maven学习总结

2016-02-15 11:13 148 查看
maven学习小结

一、关于maven的坐标

1、为什么要使用坐标

在我们开发maven项目的时候,需要为其指定适当的坐标,使用maven的坐标可以精确的定位到一个jar包或者war包。

2、坐标详解

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.0.13</version>

</dependency>

GroupID :定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向一一对应。

artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。比如上例中的logback。

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应。

二、关于maven的依赖

依赖是会被传递

A-->C B-->A ==>B-->C(这种依赖是基于compile这个范围进行传递)

在dependency配置中如果没有写scope默认就是compile范围,依赖的传递主要是针对compile作用域

依赖的范围:

test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖

compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去

provided范围指的是在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突

runtime在运行的时候依赖,在编译的时候不依赖

依赖冲突

1、如果a依赖于b的1.0版本,c依赖于b的1.1版本,d依赖于a和c,这时在d的pom中哪一个依赖先写就使用先写依赖的版本

2、如果a依赖于b的1.0版本,c依赖于b的1.1版本,d依赖于a和c,f依赖于d和c,依赖的路径的长短不一致就选择最小的

3、如果希望精确的控制依赖包,可以使用依赖的排除功能——>exclusions来排除

三、maven依赖范围

maven依赖关系中Scope的作用

Dependency Scope

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:

compile,缺省值,适用于所有阶段,会随着项目一起发布。

provided,在编译和测试过程有效,最后生成war包时不会被加入,比如servlet-api.jar,因为这个包tomcat容器是有提供的。

Runtime,在运行的时候依赖,编译的时候不依赖,如jdbc的驱动包。

Test,测试的时候依赖,打包和编译的时候不加入。

system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用。

四、常用命令

mvn clean 清除项目target包下的文件

mvn compile 编译源代码

mvn package 将代码打包成war包或jar

mvn install 将包打到本地仓库

mvn clean package -dmaven.test.skip=true 打包项目但是不打包test下的代码

mvn eclipse:eclipse 将maven 项目转换成eclipse支持的项目

mvn idea:idea 将maven 项目转换成idea支持的项目

mvn clean package -dmaven.test.skip=true jetty:run 将项目打包但不打包test下的

代码并在jetty中启动

参考链接 :/article/7027835.html

五、Maven-jetty-plugin插件的使用

在pom.xml中配置

<build>

<finalName>web</finalName>

<plugins>

<!-- jetty插件 -->

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<configuration>

<webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>

<!-- 每隔10秒刷新一次 --><scanIntervalSeconds>10</scanIntervalSeconds>

<!-- 访问项目路径-->

<contextPath>/</contextPath>

<connectors>

<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

<!-- 监听端口-->

<port>8088</port>

</connector>

</connectors>

</configuration>

</plugin>

</plugins>

</build>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: