首页 > 技术文章 > maven的理解以及在Intellij IDEA中配置和使用Maven

expiator 2018-09-24 10:38 原文

Maven安装与配置

Maven安装与配置,详情见:https://www.yiibai.com/maven/maven_environment_setup.html

在Intellij IDEA中配置Maven

详情见:https://blog.csdn.net/qq_32588349/article/details/51461182

 

Maven中央仓库

Maven默认的中央仓库在国内连接会比较慢,可以在Maven的setting.xml中换成阿里云中央仓库,或者公司的私服仓库。

详情见:https://www.cnblogs.com/xxt19970908/p/6685777.html

Maven基本概念

构建定义:把动态的Web工程经过编译得到的编译结果部署到服务器上的整个过程。
编译:java源文件[.java]->编译->Classz字节码文件[.class]
部署:最终在sevlet容器中部署的不是动态web工程,而是编译后的文件

Maven生命周期

清理clean:将以前编译得到的旧文件class字节码文件删除
编译compile:将java源代码编译成class字节码文件
测试test:自动测试,自动调用junit程序
报告report:测试程序执行的结果
打包package:动态Web工程打War包,java工程打jar包
安装install:将target下的jar安装到本地仓库,可以供其他项目使用。
部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

Maven常见命令

mvn clean //在target文件夹中的一切都将被删除

mvn compile //编译源代码

mvn test  //运行应用程序中的单元测试

mvn package  //把jar打到本项目的target下

mvn install  //把target下的jar安装到本地仓库,供其他项目使用.

mvn clean package  //清除target文件夹的文件,并重新将项目打包

mvn clean compile //清除target目录中的生成结果,将.java类编译为.class文件

mvn clean test //清除target目录中的生成结果,执行单元测试

mvn clean deploy //清除target目录中的生成结果,部署到版本仓库

mvn clean install //清除target目录中的生成结果,使其他项目使用这个jar,会安装到maven本地仓库中

 

常用maven命令总结:

mvn -v //查看版本

mvn archetype:create //创建 Maven 项目

mvn test-compile //编译测试代码

mvn site //生成项目相关信息的网站

mvn package //依据项目生成 jar 文件

mvn install //在本地 Repository 中安装 jar

mvn -Dmaven.test.skip=true //忽略测试文档编译

mvn clean //清除目标目录中的生成结果

mvn archetype:generate //创建项目架构

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

mvn dependency:tree //看到依赖树

mvn dependency:analyze //查看依赖的工具

mvn help:system //从中央仓库下载文件至本地仓库

mvn help:active-profiles //查看当前激活的profiles

mvn help:all-profiles //查看所有profiles

mvn help:effective -pom //查看完整的pom信息

 

IDEA中使用Maven

点击最左边的刷新按钮,可以重新引入所有的 maven依赖。

点击 m,可以运行maven命令。

点击 lifecycle,可以运行 maven生命周期的命令。

 

 

IDEA的Maven打包常用命令:

clean package -Pdev  -DskipTests : -P后面是环境变量,可改选择dev开发环境,或其他环境进行打包。-DskipTests表示跳过测试。

 

 

 

Maven的 pom.xml

pom是Project Object Model(项目对象模型)的缩写,是Maven中的项目文件,可用于管理与配置依赖及版本。

 

<modelVersion>

modelVersion 指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0.

    <modelVersion>4.0.0</modelVersion>

 

<groupId>

<groupId>表示项目所属的组,通常是一个公司或者组织的名称,如org.springframework.

<artifactId>

<artifactId>表示项目的唯一标识.

 

<version>

version:项目的版本。比如  <version>1.0-SNAPSHOT</version>

版本号的后缀意味着项目的不同阶段:

    SNAPSHOT:开发中的版本
    RELEASE:正式发布版
    M1,M2:M指里程碑,表示即将发布
    RC:Release Candidate,发布候选
    GA:General Availablity,基本可用版本

 

<parent> (继承)

<parent>: 指定父级的模块,子模块可以使用父级模块的依赖。类似于 java中的继承。

比如指定 parent 为 spring-boot-starter-parent,引入spring-boot的依赖。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

另外的,一个项目中经常会有 common、dao、 service等模块。

一些共用的工具类可以放到 common模块中,然后在各个模块中指定parent为 common模块,

这样的话,其他模块就可以统一调用common中的类和方法,不用重复写工具类了。

 

<modules> (多模块)

maven-demo 聚合了五个工程。

聚合之前打包client,dao ,manager,service, 需要分别运行 mvn package。
聚合之后,只需要在 maven-demo 下运行 mvn package即可。

 

<project >

    <artifactId>maven-demo</artifactId>

    <modules>
        <module>test-client</module>
        <module>test-dao</module>
        <module>test-manager</module>
        <module>test-service</module>
    </modules>
</project>

 

 

Profiles

Maven的Profiles,可以指定运行环境,比如dev开发环境、sit测试环境、par灰度环境、prod生产环境。

我们可以在IDEA中切换运行环境。如下图所示,

 

Maven的pom.xml中,Profiles配置如下:

其中的 <activeByDefault>true</activeByDefault> 表示默认使用的环境。

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>sit</id>
        <properties>
            <profileActive>sit</profileActive>
        </properties>
    </profile>
    <profile>
        <id>pro</id>
        <properties>
            <profileActive>pro</profileActive>
        </properties>
    </profile>
</profiles>

Profiles详情见: https://www.cnblogs.com/0201zcr/p/6262762.html


<properties>

可以在properties标签中,统一管理各个依赖的version版本。

然后通过 <version>${ }</version> 调用

<properties>
        <java.version>1.8</java.version>
        <es.version>5.4.1</es.version>
        <elasticsearch.version>5.4.1</elasticsearch.version>
        <fastjson.version>1.2.70</fastjson.version>

</properties>
 <dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${es.version}</version>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
</dependencies>


 


<dependency>

<dependency>用于引入依赖(jar包),是最常用的。示例如下:


<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

<groupId> :表示依赖包所属的组,通常是一个公司或者组织的名称,如org.springframework.

<artifactId>:表示依赖包的唯一标识。

<version>:表示依赖包的版本号。

<scope>:表示依赖包的作用范围。scope含义如下:

compile:scope 默认取值 compile 标识,当前依赖包,参与项目的编译、运行、测试、打包。
runtime: runtime 标识不参与项目编译,参与项目的运行、测试、打包。
provided:provided 标识参与项目的编译、运行、测试,但是不参与打包。
test: test 标识只在编译测试代码和运行测试代码的时候需要,别的都不用,打包的时候也不会包含。

 

<build>

 Maven的插件(plugin)可以在<build>中配置。

maven-assembly-plugin 这个plugin是用来帮助打包的。可以打包成jar包、war包。

maven-assembly-plugin 的详情见:  https://www.cnblogs.com/expiator/p/9926428.html

assembly相关的maven命令:  mvn clean compile assembly:single        //打包只生成一个jar包,名字里有jar-with-dependencies,可执行。

 

 maven-assembly-plugin 示例如下:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.demo.test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 

 

Maven仓库网址

需要添加依赖的时候,可以去以下网址找相关的dependency依赖。

https://mvnrepository.com/

 

pom.xml示例:

pom.xml文件 ,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>Utils</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
        <es.version>5.4.1</es.version>
        <elasticsearch.version>5.4.1</elasticsearch.version>
        <fastjson.version>1.2.70</fastjson.version>

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${es.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>${es.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

 

参考资料

https://juejin.cn/post/6844904182487449614

推荐阅读