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上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...
随机推荐
- 搭建es6开发与非开发环境babel-browser
前言 最近打算把es6应用到项目中,但是如何在开发环境(浏览器端)直接运行es6?es6已经发布一段时间了,现在大部分是在node.js环境运行,或者通过babel编译之后运行.babel-brows ...
- Kafka 源代码分析之Log
这里分析Log对象本身的源代码. Log类是一个topic分区的基础类.一个topic分区的所有基本管理动作.都在这个对象里完成.类源代码文件为Log.scala.在源代码log目录下. Log类是L ...
- PHP实现简单的评论与回复功能还有删除信息
我们首先先看一下功能 上面黑色的是评论的下面红色的字体是回复的 再来看看怎么实现的 1.发布评论 <form action="pinglunchili.php" method ...
- 富文本编辑器嵌入指定html代码
先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...
- c++ new delete 常踩的坑
WeTest 导读 c++ 是公司开发最常用的语言之一, 那New和Delete 这两个函数是所有开发者即爱又恨的函数.由new 和delete引发的bug , coredump , 让多少程序员加了 ...
- 95后实习生的远程办公体验(asp.net mvc\C#技术栈)
这个月我们做了一件别人看起来很疯狂的事情,就是让一批95后的实习生实行远程办公,效果还不错,于是写此文总结一下. 其实认真算算,我自己的远程工作经验有十年了吧,在北京工作的时候天气不好就申请在家办公, ...
- js实现存储对象的数据结构hashTable和list
以下代码是typescript语言来写的,其实和es6面向对象的写法基本一致.大家阅读后都明白这些方法的作用. hash hash结构用于处理和表现类似key/value的键值对,其中key通常可用来 ...
- ASP.NET Core 开源论坛项目 NETCoreBBS
ASP.NET Core 轻量化开源论坛项目,ASP.NET Core Light forum NETCoreBBS 采用 ASP.NET Core + EF Core Sqlite + Bootst ...
- Android不编译某个模块
Android 5.1 源码,编译相关的文件一般在build目录下build/target/product 放了很多mk文件:一般不同的产品会有不同的目录 假设我不想编译OpenWnn,在build目 ...
- Out of mind - 魔术纸
魔术纸 显示屏与纸张的完美结合.类似电子墨水.柔性显示器.魔术纸柔软似真正的纸张.用魔术纸做成的电子书,控制器在书轴处. 每一页能显示不同的东西.一本书可以完全按页显示在电子书上.可以换一本书来显示. ...