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上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...
随机推荐
- win 10 开机后无法显示桌面
我整理了几种方法,可以试一下 1> win + x 然后运行explorer.exe 2> 1/// shift + ctrl + esc 进入 任务管理器 2/// 点击 ...
- 【LeetCode】118. Pascal's Triangle
题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,R ...
- css实现居中的五中方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue.js入学教程
Vue.js是什么Vue.js 是用于构建交互式的 Web 界面的库.Vue.js 提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API.Vue.js(类似于view)是一套构建 ...
- TCP 连接重置漏洞 - CVE-2004-0230讲解
TCP 连接重置漏洞 - CVE-2004-0230: IPv6 实施中存在一个拒绝服务漏洞,该漏洞可能允许攻击者向受影响系统发送特制的 TCP 消息. 成功利用此漏洞的攻击者可能会导致受影响系统重置 ...
- Spring HandlerInterceptor
1.Spring HandlerInterceptor 可以组成一个chain. 这个接口有三个方法: public interface HandlerInterceptor { /** * Inte ...
- 深入分析Java的内置日志API(java.util.logging)(一)
简介 任何的软件系统,日志都是非常重要的一部分.良好统一的日志规范会大大提高应用程序的可维护性.可靠性,并进而提高开发效率,指导业务.在早期,Java工程师往往都是利用 System.err.pr ...
- CSS单位
一.em单位:相对单位,相对于父级大小. <div class="fs"> 你看看我的字体大小 <div class="fs"> 你在看 ...
- Actor模型原理
1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...
- Java复习随笔
1.StringTokenizer str = new StringTokenizer("字符串"); str.countTokns(); //可得出字符串非连续的个数(可用于 ...