Maven 基础

是什么

Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。

重点词:

  • Java
  • 解决依赖问题
  • 标准结构
  • 构建(build)

安装配置

安装

前提:Java(JDK)已经安装。

官方下载地址:http://maven.apache.org/download.cgi

$ wget http://apache.mirrors.spacedump.net/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
$ tar -xvf  apache-maven-3.6.3-bin.tar.gz
$ sudo mv -f apache-maven-3.6.3 /usr/local/

修改用户环境变量

vi ~/.bash_profile

export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=${PATH}:${MAVEN_HOME}/bin
source ~/.bash_profile
mvn -v

设置MAVEN_OPTS环境变量

防止运行Java时内存溢出

export MAVEN_OPTS="-Xms128m  -Xmx512m"

settings.xml

全局配置 ${MAVEN_HOME}/conf/settings.xml 或者用户配置 ~/.m2/settings.xml

比如从新定义本地仓库。(默认是~/.m2/repository/)


...
  /localdisk/repository
...

还可以设置http代理。

  
  ...  
    
      
      my-proxy  
      true  
      http  
      218.14.227.137  
      3128  
        
      
    
  ...  
 

Maven项目结构

a-maven-project
├─ src
│ ├─ main          存放主程序
│ │ ├─ java        存放Java源文件
│ │ ├─ resources   存放框架或其他工具的配置文件
│ ├─ test          存放测试程序
│ │ ├─ java        存放Java测试的源文件
│ │ ├─ resources   存放测试的配置文件
├─pom.xml          Maven工程的核心配置

Maven Hello World

Maven 使用原型 archetype 插件创建项目。要创建一个简单的 Java 应用,我们将使用 maven-archetype-quickstart 插件。

在下面的例子中,创建一个基于 maven 的 java 应用项目。

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

参数说明:

  • -DgourpId: 组织名,公司网址的反写 + 项目名称
  • -DartifactId: 项目名-模块名
  • -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
  • -DinteractiveMode: 是否使用交互模式

创建了之前命令行中给 artifactId 定义的新目录,结构如下:

.
└── my-app
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── mycompany
        │               └── app
        │                   └── App.java
        └── test
            └── java
                └── com
                    └── mycompany
                        └── app
                            └── AppTest.java

进入这个目录,直接compile

$ cd my-app
$ mvn compile

POM 文件


    4.0.0
    com.google
    springBootDemo1
    0.0.1-SNAPSHOT
    springBootDemo1


根元素下的第一个子元素modelVersion指定了当前的POM模型的版本,对于Maven3来说,它只能是4.0.0.

groupId 定义了项目属于哪个组织。

artifactId 定义了当前Maven项目在组中唯一的ID,比如定义hello-world。

version 指定了项目当前的版本0.0.1-SNAPSHOT,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的。

name 申明了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个POM声明name,以方便信息交流

依赖

一个Maven工程就是由groupIdartifactIdversion作为唯一标识。我们在引用其他第三方库的时候,也是通过这3个变量确定。例如,依赖commons-logging


    commons-logging
    commons-logging
    1.2
    system 
    ${basedir}\src\lib\ldapjdk.jar 

使用声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中。

Maven常用命令说明

  • mvn clean:表示运行清理操作(会默认把target文件夹中的数据清理)。
  • mvn clean compile:表示先运行清理之后运行编译,会将代码编译到target文件夹中。
  • mvn clean test:运行清理和测试。
  • mvn clean package:运行清理和打包。
  • mvn clean install:运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用。
  • mvn clean deploy:运行清理和发布(发布到私服上面)。

上面的命令大部分都是连写的,大家也可以拆分分别执行,这是活的,看个人喜好以及使用需求。执行test之前是会先执行compile,执行package之前会先执行test,而类似的,install之前会执行package。

仓库的分类

160b27fd1730a299.png

中央仓库

其实我们使用的大多数第三方模块都是这个用法,例如,我们使用commons logging、log4j这些第三方模块,就是第三方模块的开发者自己把编译好的jar包发布到Maven的中央仓库中。

私有仓库

私有仓库是指公司内部如果不希望把源码和jar包放到公网上,那么可以搭建私有仓库。私有仓库总是在公司内部使用,它只需要在本地的~/.m2/settings.xml中配置好,使用方式和中央仓位没有任何区别。

本地仓库

本地仓库是指把本地开发的项目“发布”在本地,这样其他项目可以通过本地仓库引用它。但是我们不推荐把自己的模块安装到Maven的本地仓库,因为每次修改某个模块的源码,都需要重新安装,非常容易出现版本不一致的情况。更好的方法是使用模块化编译,在编译的时候,告诉Maven几个模块之间存在依赖关系,需要一块编译,Maven就会自动按依赖顺序编译这些模块。

发布到私有仓库

使用Artifact的Token只需要read:packages权限。

在发布端,把GitHub的用户名和发布Token写入~/.m2/settings.xml配置中:


    ...
    
        
            github-release
            GITHUB-USERNAME
            f052...c21f
        
    

然后,在需要发布的Artifact的pom.xml中,添加一个声明:


    ...
    
        
            github-release
            GitHub Release
            https://maven.pkg.github.com/michaelliao/complex
        
    

注意到~/.m2/settings.xml配置中的要保持一致,因为发布时Maven根据id找到用于登录的用户名和Token,才能成功上传文件到GitHub。我们直接通过命令mvn clean package deploy部署。

参考

https://maven.apache.org/pom.html#

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

https://www.runoob.com/maven/maven-tutorial.html

https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601

你可能感兴趣的:(Maven 基础)