Maven的常用功能

时间:2022-12-09 18:00:42

一、jar包管理(仓库)

最佳实践:

1:排除依赖

 pom中依赖了某个第三方API,此API又依赖其它API,有可能出问题。(必须申明排除该第三方依赖)

Maven的常用功能

Spring-core又隐式的依赖了commons-logging,而quartz又隐式依赖了slf4j,导致log4j里面的mybatis的sql显示配置不生效。

2:归类依赖

就是把来自同一个项目不同模块的jar的版本号统一用properties管理

Maven的常用功能

3:优化依赖

maven能自动解析一部分的jar冲突,这些工作之后得到的依赖称为已解析依赖。

查看已解析依赖:    mvn dependency:list

以依赖树形式查看(查看jar包之间的依赖关系): mvn dependency:tree  

在eclipse中打开一个pom文件,在Dependency Hierarchy的Tab页中,就可以查看当前pom文件中显示声明的jar包,及这些显示声明的jar中隐式引入的依赖jar包。

分析用到却未声明的和声明却未用到的jar: mvn dependency:analyze

 

 

 

 

二、打包jar文件

如果pom.xml文件中<packaging>war</packaging>  若没有指定则默认打包为jar文件

1 编译命令:mvn clean compile

2 测试命令:mvn clean test

3 打包命令:mvn clean package 

4 安装命令:mvn clean install (将打包的jar文件安装到maven的本地仓库中)

5 执行命令:java -jar target \hello-word-1.0-SNAPSHOT.jar

(需要在maven-shade-plugin插件中指定main方法在哪个class类里面)

(需要安装maven-compiler-plugin插件。maven2默认支持jdk1.4 , maven3默认支持jdk1.5)

 

三、Cargo自动化部署

Cargo是操作web容器的工具。支持几乎所有的web容器。部署到本地web容器,部署到远程的web容器都可以。

 

四、版本管理

快照版与发布版之间的转换。(前提是已经配置了部署的仓库)

使用 Maven Release Plugin插件的命令: 

$mvn release:prepare 准备

$mvn release:perform 执行

 

五、仓库和镜像

本地仓库:默认在你本地的用户目录下的.m2/repository目录下。Maven从远程仓库down下来的构件,都存放在本地仓库中。打开conf/setting.xml:

<setting>
  <localRepository>local repository</localRepository>
</setting>

 

远程仓库:运行Maven时,Maven所需要的任何构件都是从本地仓库获取的。但如果本地仓库没有,它就会尝试从远程仓库中下载构件到本地仓库,然后使用本地仓库中的构件。(私服一般是指公司内部使用的仓库。如果Maven无法连接到远程仓库,将无法正常构建项目。) 在pom.xml中配置如下:

<!-- 配置远程仓库 -->
     <repositories>
          <repository>
             <id>jboss</id>
             <name>JBoss Repository</name>
             <url>http://repository.jboss.com/maven2/</url>
             <releases>
                  <enabled>true</enabled>
                 <updatePolicy>daily</updatePolicy>
             </releases>
             <snapshots>
                 <enabled>false</enabled>
                 <checksumPolicy>warn</checksumPolicy>
             </snapshots>
             <layout>default</layout>
         </repository>
    </repositories>

 

 

 

镜像:如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获取的构建,都在够从它的镜像中获取。举个例子,http://maven.net.cn/content/groups/public/是*仓库http://repo1.maven.org/maven2/在中国的镜像,由于地理位置,该镜像往往能够提供比*仓库更快的服务,因此,可以配置Maven使用该镜像来代替*仓库。编辑settings.xml文件。

 

<mirrors>

    <mirror>

    <id>maven.net.cn</id>
  
    <name>oneof the central mirrors in china</name>

    <url>http://maven.net/content/groups/public/</url>

    <mirrorOf>central</mirrorOf>

  </mirror>

</mirrors>

 

 

关于镜像的一个更加常用的做法是结合私服。由于私服可以代理任何外部公共仓库(包括*仓库),因此,对于组织内部的maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化了maven本身的配置。在这种情况下,任何需要的构建都可以从私服获得,私服就是所有仓库的镜像仓库。我们可以配置这样的一个镜像,如下配置:

<mirrors>

    <mirror>

        <id>internal-repository</id>

        <name>internalrepository manager</name>
    
        <url>http://192.168.1.112:8081/nexus/content/groups/public</url>

        <mirrorOf>*</mirrorOf>

    </mirror>

</mirrors>                 

 

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,maven仍将无法访问被镜像仓库,因而将无法下载构建。