zoukankan      html  css  js  c++  java
  • Maven基础入门与核心知识

    Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

    Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。

    在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

    概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。

    安装配置

    安装需要Java支持(JDK >= 1.7)。

    下载压缩包

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

    解压安装

    解压压缩包至目录,我的安装位置:D:apache-maven-3.5.4

    • bin:mvn的运行脚本
    • boot:mvn类加载器框架
    • conf:配置文件目录
    • lib:依赖类库

    配置环境变量

    『计算机』-->『右键属性』-->『高级系统设置』-->『环境变量』-->『系统变量』

    MAVEN_HOME

    PATH

    依次确定,退出配置。

    配置Maven

    打开Maven目录,./conf/settings.xml

    配置本地存储库

    添加配置

    <localRepository>D:/mavenRepository/repository</localRepository>

     localRepository 标签包含的就是本地存储库的地址。

    配置镜像仓库

    由于中央存储库在国外,国内可能打不开,所以在 mirrors 标签中添加阿里云镜像仓库配置。

    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

    测试安装

    打开CMD窗口,输入命令: mvn -v 

    出现以下内容,说明Maven安装成功。

    创建Maven项目

    首先说明Maven约定的目录结构:

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

    这里我直接使用IntelliJ IDEA创建Maven项目。

    这里可以不勾选 create from archetype 直接创建,使用标准的模板(初始不做web测试,不需要使用此模板),这里我选择使用webapp模板(初始文件创建,可以参考我下面的构建WEB项目)。

    这里在Properties中添加一个参数archetypeCatalog=internal

    信息输入完后点击Finish,至此Maven项目就创建完了,因为我们选择的是webapp,所有有些Maven约定的目录需要我们手动创建补全。

    常用构建命令

    maven01 - 编译/测试

    创建Maven项目maven01

    配置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>
    
      <groupId>com.maven01</groupId>
      <artifactId>maven01</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>maven01 Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <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>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>maven01</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.0.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
    View Code

    在maven01/src/main/java创建包 com.maven01.model 

    创建HelloWorld.java

    package com.maven01.model;
    
    public class HelloWorld {
        public String sayHello() {
            return "Hello World !!";
        }
    }
    View Code

    在maven01/src/test/java创建包 com.maven01.model

    创建HelloWorldTest.java

    package com.maven01.model;
    
    import org.junit.*;
    import org.junit.Assert.*;
    
    public class HelloWorldTest {
        @Test
        public void testHello() {
            Assert.assertEquals("Hello World !!", new HelloWorld().sayHello());
        }
    }
    View Code

    mvn compile  - 编译

    打开CMD,跳转当前位置至项目目录。

    运行命令: mvn compile 

    第一次运行会下载很多资源。

    出现BUILD SUCCESS说明编译成功:

    mvn test - 测试

    运行命令: mvn test 

    第一次运行同样会下载依赖资源。

    出现BUILD SUCCESS说明运行成功:

    maven02 - 安装/依赖

    创建Maven项目maven02

    配置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>
    
      <groupId>com.maven02</groupId>
      <artifactId>maven02</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>maven02 Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <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>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>maven02</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.0.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
    View Code

    在maven02/src/main/java创建包 com.maven02.util

    创建Speak.java

    package com.maven02.util;
    
    import com.maven01.model.HelloWorld;
    
    public class Speak {
        public String sayHi() {
            return new HelloWorld().sayHello();
        }
    }
    View Code

    在maven02/src/test/java创建包 com.maven01.util

    创建SpeakTest.java

    package com.maven02.util;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class SpeakTest {
        @Test
        public void testsayHi() {
            Assert.assertEquals("Hello World !!", new Speak().sayHi());
        }
    }
    View Code

    这时我们使用编译命令,尝试编译maven02会发现报错:

    mvn install - 安装

    跳转盘符至maven01目录

    运行命令: mvn install

    将maven01的jar包安装到本地仓库中 

    重新配置maven02的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>
    
      <groupId>com.maven02</groupId>
      <artifactId>maven02</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>maven02 Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <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>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.maven01</groupId>
          <artifactId>maven01</artifactId>
          <version>1.0-SNAPSHOT</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>maven02</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.0.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
    View Code

    重新编译maven02

    mvn dependency:tree - 查看依赖

    运行命令: mvn dependency:tree 

    自动构建目录

    maven03 - 自动构建目录

    mvn archetype:generate - 按照提示进行选择构建

    创建文件夹maven03

    跳转盘符至maven03目录

    运行命令: mvn archetype:generate 

    运行成功后会发现,目录已经自动构建了出来:

    ├─maven0301-service
    │  │  pom.xml
    │  │
    │  └─src
    │      ├─main
    │      │  └─java
    │      │      └─com
    │      │          └─maven0301
    │      │              └─service
    │      │                      App.java
    │      │
    │      └─test
    │          └─java
    │              └─com
    │                  └─maven0301
    │                      └─service
    │                              AppTest.java

    mvn archetype:generate - 带参构建

    跳转盘符至maven03目录

    运行命令: mvn archetype:generate -DgroupId=com.maven0302 -DartifactId=maven0302-demo -Dversion=1.0-SNAPSHOT -Dpackage=com.maven0302.demo 

    • DgroupId:组织名
    • DartifactId:项目名-模块名
    • Dversion:版本号
    • Dpackage:代码所存在的包名

    └─maven0302-demo
        │  pom.xml
        │
        └─src
            ├─main
            │  └─java
            │      └─com
            │          └─maven0302
            │              └─demo
            │                      App.java
            │
            └─test
                └─java
                    └─com
                        └─maven0302
                            └─demo
                                    AppTest.java

    坐标和仓库

    坐标

    在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

    每个构建的位置,代表了一个坐标。

    pom.xml的依赖配置 groupId 、 artifactId 、 version 即可标识一个坐标。

    仓库

    关于仓库的详解大家可以参考此博文,介绍的很详细!

    仓库默认配置位置:%MAVEN_HOME%libmaven-model-builder-x.x.x.jarorgapachemavenmodelpom-4.0.0.xml

    生命周期和插件

    关于生命周期和插件的详解大家可以参考此博文,介绍的很详细!

    依赖范围

    maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,maven会将与运行相关的依赖引入classpath中,而依赖范围就是用来控制依赖于这三种classpath的关系。

    在pom.xml依赖管理 dependency 有个设置依赖范围的标签 scope 

    关于依赖范围的设置,官方文档有详细说明。

    • compile:默认的范围,编译测试运行都有效
    • provided:测试和编译时有效
    • runtime:测试和运行时有效
    • test:测试时有效
    • system:测试和编译时有效,与本机系统相关联,可移植性差
    • import:导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependecy的配置

    依赖传递

    我新建了三个项目分别为:dependA、dependB、dependC

    它们的依赖关系为:dependC ----> dependB ----> dependA

    dependA的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>
    
        <groupId>com.maven.dependA</groupId>
        <artifactId>dependA</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    </project>
    View Code

    dependB的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>
    
        <groupId>com.maven.dependB</groupId>
        <artifactId>dependB</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>com.maven.dependA</groupId>
                <artifactId>dependA</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
        
    </project>
    View Code

    dependC的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>
    
        <groupId>com.maven.dependC</groupId>
        <artifactId>dependC</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>com.maven.dependB</groupId>
                <artifactId>dependB</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>
        
    </project>
    View Code

    我分别编译安装了它们,可以看到间接依赖是传递的。

    dependA的依赖:

    dependB的依赖:

    dependC的依赖:

    所依赖工程中pom.xml可以传递下去。

    当第二依赖的范围scope 为compile 的时候, 依赖得以传递,传递性依赖的范围与第一直接依赖的范围一致。

    当第二依赖的范围scope 为test 的时候, 依赖不会得以传递。

    当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided。

    当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime。

    依赖排除

    如果dependC只依赖dependB而不需要依赖dependA,那么就需要进行依赖排除配置 exclusion 

    dependC的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>
    
        <groupId>com.maven.dependC</groupId>
        <artifactId>dependC</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>com.maven.dependB</groupId>
                <artifactId>dependB</artifactId>
                <version>1.0-SNAPSHOT</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.maven.dependA</groupId>
                        <artifactId>dependA</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
    </project>
    View Code

    依赖冲突

    依赖冲突有两个原则:

    短路优先

    依赖关系:

    dependA的依赖commons-io的版本为2.0

    dependB的依赖commons-io的版本为2.1

    dependC根据依赖所获得依赖commons-io的版本为2.1,因为dependC获得commons-io最近为dependB的依赖,所以使用dependB的版本2.1

    声明优先

    依赖关系:

    如果dependC同时依赖dependA、dependB,也就是dependC获取依赖的路径长度相同了,则谁先在pom.xml中声明就优先获取谁的依赖。

    聚合和继承

    聚合

    如何我们的项目包含多个模块我们一个一个编译,会太麻烦,我们可以建一个聚合项目,通过modules来统一操作。

    新建一个Maven项目aggreationABC,这里我使用 maven-archetype-quickstart 

    修改aggreationABC的pom.xml配置:

    • 修改 packaging 标签的值为pom
    • 添加 modules 标签,增加聚合配置
    <?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>
    
      <groupId>com.maven.aggreation</groupId>
      <artifactId>aggreationABC</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>pom</packaging>
    
      <name>aggreationABC</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <modules>
        <module>../dependA</module>
        <module>../dependB</module>
        <module>../dependC</module>
      </modules>
    
      <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>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.0.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.7.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.20.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-jar-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
    View Code

    对aggreationABC进行编译,发现已经完成聚合了。

    继承

    继承可以复用父类的pom,可以为我们提高pom复用,子模块可以通过 parent 标签来导入要继承的pom。

    依赖继承采用 dependencyManagement 用来统一管理,在子模块中需要那个依赖,只需要写groupId和artifactId就可以,采用依赖管理既可以有效的控制依赖,有能在一定程度上避免依赖冲突。

    新建一个Maven项目mavenParent:

    •  packaging 设置为pom
    •  properties 增加字段属性 junit.version 
    •  dependencyManagement 管理依赖
    <?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>
    
        <groupId>com.maven.parent</groupId>
        <artifactId>mavenParent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <junit.version>4.11</junit.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    View Code

    使用dependA来继承mavenParent,修改dependA的pom.xml添加 parent 标签来管理继承:

    <?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>
    
        <groupId>com.maven.dependA</groupId>
        <artifactId>dependA</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <parent>
            <groupId>com.maven.parent</groupId>
            <artifactId>mavenParent</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../mavenParent/pom.xml</relativePath>
        </parent>
    
    </project>
    View Code

    至此dependA已继承mavenParent。

    构建WEB项目

    项目的创建可以参考上面的方式,这里我说明下具体过程,创建Maven项目,模板使用: maven-archetype-webapp 

    初始文件结构:

    右键项目进行设置:

    然后OK退出,开始配置tomcat

    OK退出,启动tomcat

    常用命令

     mvn -v :查看maven版本

     mvn compile :编译

     mvn test :测试

     mvn package :打包

     mvn clean :删除target

     mvn install :安装jar包到本地仓库中

     mvn archetype:generate :自动构建目录

     mvn dependency:tree :查看依赖

    参考资料

    https://maven.apache.org/index.html

    https://www.imooc.com/learn/443

    https://www.yiibai.com/maven/

    https://www.cnblogs.com/1446358788-qq/articles/9597877.html

    https://blog.csdn.net/shycx/article/details/7726600

    https://blog.csdn.net/double_sweet1/article/details/79780308

    https://www.cnblogs.com/bffc/p/3690993.html

    http://how2j.cn/k/idea/idea-maven-web/1356.html

    https://blog.csdn.net/wzx735481897/article/details/78158337

    https://stackoverflow.com/questions/7600028/maven-error-in-opening-zip-file-when-running-maven

    https://www.cnblogs.com/duanxz/p/5210189.html

    https://www.cnblogs.com/luotaoyeah/p/3819001.html

  • 相关阅读:
    windbg vmware win7联机调试环境搭建
    c++回调实现
    导出函数,非导出函数,公开函数,非公开函数
    fileAPI 实现移动端 添加图片 预览缩略图(自己学习)
    Ztree _ 横向显示子节点、点击文字勾选、去除指定元素input的勾选状态
    仿微信公众平台“打标签”功能~~~
    踩坑之路_"var name = ' ';"_迷之BUG
    asp.net页面生命周期《转》
    2009年软件设计师考试大纲<软考>
    typedef用法总结。
  • 原文地址:https://www.cnblogs.com/bndong/p/9762067.html
Copyright © 2011-2022 走看看