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>
一、关于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>
相关文章推荐
- GPU 加速下的图像视觉
- eclipse git 的用法
- Selenium启动Chrome时,加载用户配置文件
- Autolayout(VFL)自动适配
- 简单工厂模式自我理解
- JMeter简介及使用JMeter来访问网站
- nginx代理本地JBoss访问吃力的问题
- 何为知识管理?
- MySQL 版本号说明及查看方法
- iOS8 以上的指纹识别开发
- 使用css3 实现旋转的立方体
- [Python]字典Dictionary、列表List、元组Tuple差异化理解
- Appirater激励用户为你的app评分
- linux学习笔记三: secureCRT小键盘输入数字键的时候,出现字母的解决方法:
- Moq测试基础说谈(四)——Mock类,创建对象,实用工厂
- 关于OO思想的解说
- 欢迎使用CSDN-markdown编辑器
- Selenium+log4j+eclipse相关问题及解决方案
- CTO干点啥?
- QQ最新版布局猜想