maven系列小技巧之Top3 MVQ(most valuable question)

简介: 首先声明,文章系个人原创 ,欢迎转载,转载请注明出处。      对于maven,有大神曾说过:如果你爱他,就请让他用Maven,因为那里是天堂,如果你恨他,就请让他用Maven,因为那里是地狱。

      首先声明,文章系个人原创 ,欢迎转载,转载请注明出处。

      对于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文件中,经常会看到类似下面这种代码:

 1 <pluginManagement>
 2     <plugins>
 3         <plugin>
 4             <groupId>org.springframework.boot</groupId>
 5             <artifactId>spring-boot-maven-plugin</artifactId>
 6             <version>1.3.5.RELEASE</version>
 7         </plugin>
 8     </plugins>
 9 </pluginManagement>
10 <plugins>
11      <plugin>
12            <groupId>org.springframework.boot</groupId>
13             <artifactId>spring-boot-maven-plugin</artifactId>
14      </plugin>
15 </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节点下就行了:       

 1 <plugin>
 2       <groupId>org.springframework.boot</groupId>
 3       <artifactId>spring-boot-maven-plugin</artifactId>
 4       <version>1.3.5.RELEASE</version>
 5       <configuration>
 6         <mainClass>${start-class}</mainClass>
 7       </configuration>
 8       <executions>
 9         <execution>
10           <goals>
11             <goal>repackage</goal>
12          </goals>
13        </execution>
14      </executions>
15 </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不要较真哈,看看就好,如有错误和建议,也欢迎提出指正~

 

目录
相关文章
|
27天前
|
Java Maven 开发工具
maven导入项目出现Unable to import maven project: See logs for details
maven导入项目出现Unable to import maven project: See logs for details
11 0
maven导入项目出现Unable to import maven project: See logs for details
|
6月前
|
Java 数据库连接 网络安全
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
3170 0
|
5月前
|
测试技术
Maven-DskipTests和-Dmaven.test.skip=true的区别
Maven-DskipTests和-Dmaven.test.skip=true的区别
214 6
|
9月前
|
缓存 Java Maven
maven出现Dependency not found 和Could not find artifact的解决方法(已解决)
maven出现Dependency not found 和Could not find artifact的解决方法(已解决)
1189 0
Plugin [id: ‘com.github.kt3k.coveralls‘, version: ‘2.8.2‘] was not found in any of the following sou
Plugin [id: ‘com.github.kt3k.coveralls‘, version: ‘2.8.2‘] was not found in any of the following sou
85 0
|
Java Maven
maven install时报错The packaging for this project did not assign a file to the build artifact
maven install时报错The packaging for this project did not assign a file to the build artifact
4377 0
|
Java Apache Maven
Eclipse创建maven项目时,出现Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources错
Eclipse创建maven项目时,出现Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources错
264 0
Eclipse创建maven项目时,出现Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources错
|
Java Maven
Maven - Could not find artifact
Maven - Could not find artifact
913 0
|
Java Maven Android开发
how does eclipse know what tasks it should do when we select Maven build
how does eclipse know what tasks it should do when we select Maven build
90 0
how does eclipse know what tasks it should do when we select Maven build

热门文章

最新文章