maven系列小技巧之Top3 MVQ(most valuable question)
首先声明,文章系个人原创 ,欢迎转载,转载请注明出处。
对于maven,有大神曾说过:如果你爱他,就请让他用Maven,因为那里是天堂,如果你恨他,就请让他用Maven,因为那里是地狱。尤其是maven+git+intellij idea的黄金搭档确实是一绝。虽然初次接触maven是在2年前并在工作中应用了半年左右,但并没有过多深入的接触,之前用的主要是ant,随着对maven的逐渐了解,在使用过程中确实深刻感受到了这句话的哲理性和准确性。
言归正传,本文主要介绍本人在工作中用到的系列问题以及相应的解决方案,并从中遴选出个人目前认为最实用最有价值的3个小技巧,暂且称为top3 MVQ(Most Valuable Question)吧,既算记录个人的技术积累历程,也希望能帮助有需要的同志。(嗯,一定是王者农药玩多了,老想着MVP,至于是否真的最实用最有价值,纯粹是为了好玩点,看了后印象深刻点,各位看官不喜勿碰哈)
1、怎样使用maven命令将第三方jar包部署到maven本地仓库和远程仓库?
有时候,我们需要引入一个第三方jar包,但是发现私服库中没有这个jar包,怎么办?这就可以使用maven命令将该jar包不熟到本地仓库中,这样项目的pom文件中添加相应的依赖就行了。
部署到本地仓库命令:
mvn install:install-file -Dfile=D:\\commons-lang.2.6.jar -DgroupId=com.dafy -DartificalId=commons-lang -Dversion=1.0.0 -Dpackaging=jar
这个命令很好理解,mvn install:install-file就是执行maven的install命令,install的内容是个文件,-Dfile指明文件所在的位置,-DgroupId和-DartificalId是指明该文件在本地仓库的位置,也就是坐标,-Dversion是版本信息,-Dpacking=jar指明要打包的是个jar文件。
部署到远程仓库命令:
mvn deploy:deploy-file -DgroupId=com.test -DartifactId=service-api -Dversion=2.5.0-SNAPSHOT -Dpacckaging=jar -Dfile=service-api-2.5.0-SNAPSHOT.jar -DrepositoryId=snapshots -Durl=http://www.hello.com:8787/archiva/repository/snapshots
这个命令也很好理解,基本参数也都差不多,就不再解释了。
2、pom文件中pluginManagement属性和plugins有什么区别?类似的,dependencyManagement和Dependencies有什么区别?
在pom.xml文件中,经常会看到类似下面这种代码:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
那么,pluginManagement和plugins到底有什么区别呢?为什么要这么写呢?这么写有什么用呢?
其实,pluginManagement只是一种插件声明(类似变量声明),但是不在plugins里(第10行开始里的)使用的话,是不会被maven加载执行的。这样主要是为了统一对插件进行管理,因为maven项目通常有很多模块,各个模块之间可能有继承和依赖关系,如果在父pom里声明了,在子pom里直接使用类似第11~14行代码就可以使用这个插件了。注意红色内容(重点来了):pluginManagement是不会被继承的,子pom.xml中必须声明才会有效,而不是有了父子关系就能在子模块中生效。简单来说,pluginManagement的2个特效就是:①声明但不执行。②不能继承
说了pluginManagement,再说plugins就好理解了,maven会调用plugins节点里的插件并执行,因此,如果需要使用某个maven插件,就必须放在plugins里。类似的还有dependencyManagement和Dependencies也可以这么理解。
3、怎样使用maven将项目打成可执行jar包?
项目开发完成后,通常需要将项目打包成可执行jar包或者ZIP格式的包,那么maven怎么做呢?强大的maven插件让这一切都变得很简单。假如有个springboot项目,需要打包成可执行jar包,可以使用spring-boot-maven-plugin插件,直接将下面的代码加入到pom.xml文件中的plugins节点下就行了:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
看到没,只需加上spring-boot-maven-plugin就可以了,是不是既简单又强大?mainClass指明启动类,也就项目main函数所在的类,goal节点指明目标是repackage。其实,spring-boot-maven-plugin的工作过程是首先调用maven-jar-plugin插件,将项目打包成jar包,但是这个jar包是不包含依赖的jar包的,所以再执行repackage再打包命令,将所依赖的jar等等都加入到新的jar包中,这个包就是最终可以通过java -jar的可执行jar包,而原来的jar包会被重命名为.original的jar包。如下:


总的来说,spring-boot-maven-plugin可以看作maven-jar-plugin的升级版,通过这简单的几行代码就达到我们的目的了
总结下,本文主要介绍了几个maven使用过程中的简单使用的小技巧,至于对各位来说是否真的是mvq不要较真哈,看看就好,如有错误和建议,也欢迎提出指正~
maven系列小技巧之Top3 MVQ(most valuable question)的更多相关文章
- 内网环境下搭建maven私服小技巧
背景 最近接手一个其他公司的项目,因为工程中使用了maven,而且里面有很多他们自己封装很多自己的构件(就是jar.war等等),需要将他们maven私服迁移到我们的私服上去,因为网络环境不通,所以不 ...
- 玩转Windows服务系列——Windows服务小技巧
伴随着研究Windows服务,逐渐掌握了一些小技巧,现在与大家分享一下. 将Windows服务转变为控制台程序 由于默认的Windows服务程序,编译后为Win32的窗口程序.我们在程序启动或运行过程 ...
- 玩转Windows服务系列——Windows服务小技巧
原文:玩转Windows服务系列——Windows服务小技巧 伴随着研究Windows服务,逐渐掌握了一些小技巧,现在与大家分享一下. 将Windows服务转变为控制台程序 由于默认的Windows服 ...
- Java开发小技巧(三):Maven多工程依赖项目
前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...
- Maven在Eclipse中的实用小技巧
前言 我们在开发的工程中很多都是Maven项目,这样更加便于我们jar包的管理.而我们一般使用的IDE都是Eclipse,由于我们在日常的开发过程中会经常要用到一些Maven的操作,所以我今天 ...
- 【Xamarin挖墙脚系列:代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧(转)】
正愁如何选择构建项目中的视图呢,现在官方推荐画板 Storybord...但是好像 xib貌似更胜一筹.以前的老棒子总喜欢装吊,用代码写....用代码堆一个HTML页面不知道你们尝试过没有.等页面做出 ...
- Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作
首先声明:该文虽以Ubuntu 13.04为例,同样适用于Fedora 17(已测试),但在较低版本的Ubuntu下可能有所差异,具体看后面的注意事项. 技巧目录: 解决Ubuntu下每隔几分钟自动锁 ...
- STM32之ADC+步骤小技巧(英文)
神通广大的各位互联网的网友们.大家早上中午晚上好好好.今早起来很准时的收到了两条10086的扣月租的信息.心痛不已.怀着这心情.又开始了STM32的研究.早上做了计算机控制的PID实验,又让我想起了飞 ...
- Windows Azure一些小技巧集合
我最近做了一个Windows Azure上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...
随机推荐
- 【Android Developers Training】 97. 序言:访问通讯录数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 68. 序言:添加动画
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 微信小程序开发者注册流程
一,首先打开浏览器,搜索微信公众平台 点击进入,此时还没有注册微信小程序开发账号,我们需要点击注册 进入注册页面,会出现四种账号,我们选择小程序账号 然后根据提示就可以进行注册了 注册时,需填写一下个 ...
- java网络编程之socket
网络编程是什么 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据. ...
- Pycharm直接连接Github
Pycharm可以说是使用Python语言开发者的必备利器.高校学生有学生邮箱就可以免费使用,着实省了我不少银两.附个license图: Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很 ...
- lsdslam代码笔记
0.1. question 0.2. 算法框架 0.3. 代码解析 0.3.1. 数据结构 0.3.1.1. Frame 0.3.1.2. FrameMemory 0.3.1.3. FramePose ...
- 网络流入门—用于最大流的Dinic算法
"网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...
- 51Nod 1509加长棒
传送门 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 现在有三根木棒,他们的长度分别是a,b,c厘米.你可以对他 ...
- java的字符串操作和for循环的使用
/* "12 0 99 -7 30 4 100 13" 要求对字符串中的数值进行排序.生成一个数值从小到大新字符串. "-7 0 4 12 13 30 99 100&qu ...
- PostGreSQL数据库安装教程
windows 10 x64 pro 1703安装postgresql-9.6.3-2-windows-x64.exe数据库,步骤如下: 第一:下载数据库安装程序,下载地址为:https://www. ...