zoukankan      html  css  js  c++  java
  • Maven

    Apache Maven 的作用

    Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个 POM(Project Object Module 项目对象模型),中间画框部分即 Maven:

    Maven 文件一览

    bin 文件夹

    maven 的所有可运行指令,里面的 mvn 是核心文件,

    boot 文件夹

    一般 boot 翻译为启动,里面的 plexus-classworlds-2.6.0.jar 文件是类管理器

    conf 文件夹

    配置文件夹,里面的 logging 是日志,settings.xml 是核心文件

    lib 文件夹

    包含 maven 运行所依赖的 jar 包

    LICENSE 文件

    协议

    NOTICE 文件

    注意事项

    README.txt 文件

    Apache Maven 的相关说明

    Maven 基础知识

    一、Maven 的坐标

    作用:用于描述仓库中资源的位置

    描述:由 groupld、artifactld、version 组成

    groupld:定义当前 maven 项目隶属组织名称(通常是域名反写,如:com.xiaotuan)

    artifactld:定义当前 maven 项目名称(通常是模块名称,如:CRM、SMS)

    version:定义当前项目版本号

    packaging:定义改项目的打包方式

    举例:写入 maven 中的代码
    
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
    

    二、去中央仓库找 jar 包

    网站:mvnrepository.com

    三、常用 mvn 命令

    编译
    mvn compile
    
    清除
    mvn clear
    
    测试
    mvn test
    
    打包
    mvn target
    
    安装到本地仓库
    mvn install
    

    Maven 项目一览

    Maven-JAVA / Maven-WEB 项目一览:

    PS:一般一个工程一个 pom.xml,但如果分模块的话,每个模块则单独有一个!

    IDEA 操作一览

    新建 Maven-JAVA / Maven-WEB 项目

    文件 > 项目结构 > 模块 > ➕ > 新建模块 > Maven > 从原型创建[√] > maven-archetype-quick / maven-archetype-webapp > 如下:

    父项 None
    位置 空文件夹
    Groupld com.xiaotuan
    Artifactld 通常与名称一致
    archetypeCatalog internal

    然后直接点击确定,让 maven 自主运行一段时间,再返回 项目结构 继续配置:

    最后项目结构如图所示:

    可以在代码右侧进行 maven 的操作:

    tomcat 启动 web 工程

    在官方网站:https://mvnrepository.com 下载 tomact 插件

    这里我们选择比较旧的稳定版 Apache Tomcat Maven Plugin :: Tomcat 7.x » 2.1

    在添加配置中添加 maven 运行命令 tomcat7:run,名称为:启动服务器

    然后点击运行,我们就可以访问本地 web 服务器(localhost)啦~

    这里附上我 web 工程的 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">
        <!-- 指定 pom 的模型版本 -->
        <modelVersion>4.0.0</modelVersion>
    
        <!-- 组织ID -->
        <groupId>com.xiaotuan</groupId>
        <!-- 项目ID -->
        <artifactId>TEST_WEB</artifactId>
        <!-- 版本号:完成版 release, 开发版 snapshot -->
        <version>1.0-SNAPSHOT</version>
        <!-- 打包方式:web 工程打包为 war, java 工程打包为 jar -->
        <packaging>war</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
        </properties>
    
        <!-- 设置当前工程的所有依赖 -->
        <dependencies>
            <!-- 具体的依赖 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
        </dependencies>
    
        <!-- 构建 -->
        <build>
            <!-- 设置插件 -->
            <plugins>
                <!-- 具体插件配置 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <port>80</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    依赖管理

    依赖传递

    直接依赖:相差 1 度的为直接依赖

    间接依赖:相差 2 度或以上的为间接依赖

    依赖冲突

    路径优先:度数小的覆盖度数大的(如图所示)

    声明优先:同层配置,前面的覆盖后面的

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
    <!-- 下面的依赖中包含上面的依赖 -->
    <dependency>
        <groupId>com.xiaotuan</groupId>
        <artifactId>TEST_WEB</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    

    特殊优先:同级配置,后面的覆盖前面的

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    

    可选依赖

    添加一个标签 optional,并设置为 true

    效果:别人用你的依赖时,optional 为 true 的依赖被隐藏,别人无法使用

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <optional>true</optional>
    </dependency>
    

    排除依赖

    添加一个标签 exclusions,并在其中添加所要排除的依赖 exclusion

    效果:你不想用别人的某个依赖,在 exclusions 中添加 不想用的依赖 exclusion 即可

    <dependency>
        <groupId>com.xiaotuan</groupId>
        <artifactId>TEST_WEB</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupld>log4j</groupld>
                <artifactld>log4j</artifactld>
            </exclusion>
        </exclusions>
    </dependency>
    

    依赖范围

    添加一个标签 scope,并设置为依赖的范围

    效果:仅在依赖的范围中,依赖才生效

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    

    依赖范围的传递性,如图所示:

    项目构建生命周期

    一般分为三套:

    1. clean:清理工作

    2. default:核心工作,例如编译,测试,打包,部署等

    3. site:产生报告,发布站点等

    clean

    default

    site

    插件

    插件与生命周期内的阶段是绑定的,所需插件也可在官网查看:https://maven.apache.org/plugins/index.html

    Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的

    下面以 source 插件为例,作用是:执行到生命周期中的 generate-test-resources 时,生成 jar 包(生成名称:TEST_JAVA-1.0-SNAPSHOT-sources.jar)

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <phase>generate-test-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    Maven 高级用法

    我参考的视频为黑马程序员,但我懒得再学下去了,等需要了再学吧~

    喜欢划水摸鱼的废人
  • 相关阅读:
    javaweb基础(33)_jdbc的crud操作
    javaweb基础(32)_jdbc学习入门
    javaweb基础(31)_国际化(i18n)
    javaweb基础(30)_EL函数库
    javaweb基础(29)_EL表达式
    javaweb基础(28)_jstl的核心标签
    javaweb基础(27)_jsp标签库实例
    javaweb基础(26)_jsp标签库开发二
    javaweb基础(25)_jsp标签实例一
    选择之难
  • 原文地址:https://www.cnblogs.com/CourserLi/p/15399813.html
Copyright © 2011-2022 走看看