美文网首页
Java高级技术day-73:Maven

Java高级技术day-73:Maven

作者: 开源oo柒 | 来源:发表于2019-11-02 22:50 被阅读0次

    一、Maven介绍

    1.什么是Maven?

    Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。
    由于 Maven 的 缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项 目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且 公司项目采用 Maven 的比例在持续增长。

    2.Maven和ANT的区别:

    Ant 是软件构建工具,Maven 的定位是软件项目管理和理解工具。Maven 除了具备 Ant 的功能外,还增加了以下主要的功能:
    1)使用 Project Object Model 来对软件项目管理;
    2)内置了更多的隐式规则,使得构建文件更加简单;
    3)内置依赖管理和 Repository 来实现依赖的管理和统一存储;
    4)内置了软件构建的生命周期。

    3.Maven的下载和IDE的整合:

    (1)Maven下载地址:
    下载地址:Maven下载
    (2)Maven的目录结构:

    目录
    (3)Eclipse整合Maven的步骤:

    Windows->Preferences->Maven:选择maven版本:Installations;User Setting指定maven的配置文件。

    第一步
    第二步

    4.Maven仓库与配置:

    Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服 务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存 储路径。得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全 相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位 置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。

    (1)远程仓库:

    远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第 三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.orguk.maven.org 是 Maven 的中央仓库)。其它“远程”仓库可能是你的公司拥有的建立在文件 或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。

    • 在settings.xml文件中配置镜像仓库:
    <mirror>            
            <!-- 指定镜像 ID -->   
            <id>nexus-aliyun</id>          
            <!-- 匹配中央仓库 -->   
            <mirrorOf>central</mirrorOf>   
            <!-- 指定镜像名称 -->       
            <name>Nexus aliyun</name>   
            <!-- 指定镜像路径 -->   
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>    
       </mirror>   
    

    (2)本地仓库:

    本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。

    • 在settings.xml文件中配置本地仓库:
    <!-- 仓库地址 -->
    <localRepository>D:\apache-maven-3.5.4-bin\rep</localRepository>
    

    (3)仓库的优先级:

    本地仓库,镜像仓库,中央仓库。
    镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。

    二、Maven工程

    1.Maven的工程分类:

    (1)POM工程:

    POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。

    • 创建
      (2)JAR工程:

    将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。

    (3)WAR工程:

    将会打包成 war,发布在服务器上的工程。如网站或服务。即常见的网络工程 - Dynamic Web Project。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,IDE 通常会显示工程错误,提供完整工程结构可以解决。

    2.创建Maven项目:

    New--> other -->Maven Project ;
    (1)选择Maven Project项目:

    第一步

    (2)new Maven Project:


    第二步.png

    (3)填写Maven信息:


    第三步
    • Maven项目的目录:


      Maven目录
    • 填写项目信息:


      示例

    Group Id 公司域名倒写;
    Artifact Id 项目名;
    Version 版本名;
    Packaging 项目类型(Jar java 项目; War : web 项目 ; POM: 父项目.如果项目有子项目,项目必须是 pom );
    Name : 自定义名称,内容任意;
    Description: 描述.详细描述;
    Parent Project: 如果当前项目有父项目时填写;

    • Maven项目结构:

    src/main/java 这个目录下储存 java 源代码;
    src/main/resources 储存主要的资源文件。比如spring的xml配置文件和log4j的properties 文件;
    src/test/java 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面;
    src/test/resources 储存测试用的资源文件;
    src 包含了项目所有的源代码和资源文件,以及其他项目相关的文件;
    target 编译后内容放置的文件夹;
    pom.xml 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等 。

    项目结构

    3.项目关系:

    (1)依赖关系:

    即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种 情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系。

    <dependencies>
    <!-- 定义一个具体的依赖 -->     
    <dependency>       
    <!-- 依赖的工程所在组名 -->       
    <groupId>groupName</groupId>      
     <!-- 依赖的工程名 -->       
    <artifactId>artifactName</artifactId>       
    <!-- 依赖的工程版本 -->       
    <version>versionNo</version>       
    <!-- 依赖的工程有效范围,其可选值有: compile - 编译中有效         
    runtime - 运行中有效;
    system - 全部中有效[默认]  provided - 当前工程中有效;
    test - 只在测试有效 -->       
    <scope>system</scope>     
    </dependency>   
    </dependencies>
    

    (2)继承关系:

    如果 A 工程继承 B 工程,则代表 A 工程默认依赖 B 工程依赖的所有资源,且可以应用 B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。

    • 父工程的配置:


      必须要pom
    <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.zlw</groupId>
        <artifactId>03parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties>
            <junit-version>4.2</junit-version>
        </properties>
        
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit-version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>
    
    • 子工程配置:


      子工程
    <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>com.zlw</groupId>
            <artifactId>03parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <groupId>com.zlw</groupId>
        <artifactId>04son</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
        </dependencies>
    </project>
    

    (3)聚合关系:

    当我们开发的工程拥有 2 个以上模块的时候,每个模块都是一个独立的功能集合。比如 某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候每个平台都可以独立编译, 测试,运行。这个时候我们就需要一个聚合工程。
    在创建聚合工程的过程中,总的工程必须是一个 POM 工程(Maven Project),各子模 块可以是任意类型模块(Maven Module)。所有聚合工程和聚合模块必须处于同一个组(groupId)中,且聚合工程可以嵌套。

    • 创建聚合项目:


      聚合
    • 创建模块:


      模块
      模块信息
      示例
    • POM文件配置:

    <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.zlw</groupId>
      <artifactId>05maven-manager</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>
      <modules>
        <module>05maven-sub1</module>
        <module>05maven-sub2</module>
      </modules>
    </project>
    
    <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>com.zlw</groupId>
        <artifactId>05maven-manager</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>05maven-sub2</artifactId>
    </project>
    

    4.创建war项目(web):

    war
    • 需要补全项目:


      添加WEB-INF和web.xml

    三、Maven中的常见插件

    1.编译器插件:

    (1)使用pom.xml配置(只对当前项目有效):

    <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.zlw</groupId>
        <artifactId>08maven-plugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <!-- 配置maven的编译插件 -->
        <build>
            <plugins>
            <!-- JDK编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    (2) settings.xml 文件中配置全局编译器插件 :

    
     <profile>   
            <!-- 定义的编译器插件 ID,全局唯一 -->   
            <id>jdk-1.8</id>   
            <!-- 插件标记,activeByDefault 默认编译器,jdk 提供编译器版本 -->   
            <activation>    
                <activeByDefault>true</activeByDefault>    
                <jdk>1.8</jdk>   
            </activation>   
            <!-- 配置信息 source-源信息,target-字节码信息,compilerVersion-编译过程版 本 -->   
            <properties>    
                <maven.compiler.source>1.8</maven.compiler.source>    
                <maven.compiler.target>1.8</maven.compiler.target>    
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>   
            </properties>  
        </profile>
    

    2.Tomcat管理插件:

    (1)本地应用:

    使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。应用启 动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中 的具体功能。

    • pom.xml文件配置:
    <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.zwl</groupId>
        <artifactId>09maven-tomcatplugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <build>
            <plugins>
                <!-- 配置 Tomcat 插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <port>8080</port> <!-- 配置tomcat的端口号 -->
                        <path>/</path> <!-- 访问项目的根路径,/:表示的tomcat下的webapps下的ROOT目录 -->
    
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    (2)远程热部署:

    远程热部署是指,在 Tomcat 容器运行过程中,动态实现 war 工程的部署,重新部署功 能。使用 maven build 功能实现,具体命令为: tomcat7:deploy或 tomcat7:redeploy。其中 deploy 代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部 署同名 war 工程。
    实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验 证方式。
    实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访 问用户,所以在 Tomcat 中也需提供部分配置。

    • 在Linux中的Tomcat的conf/tomcat-users.xml 文件的配置 :
    <role rolename="manager-gui"/> 
    <role rolename="manager-script"/> 
    <user username="tomcat"password="tomcat" 
    roles="manager-gui,manager-script"/> 
    
    • 在 pom.xml 文件中的配置:
    <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.zwl</groupId>
        <artifactId>09maven-tomcatplugin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <build>
            <plugins>
                <!-- 配置 Tomcat 插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/</path>
                        <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 -->
                        <url>http://192.168.226.128:8080/manager/text</url>
                        <!-- 为 tomcat 配置的管理用户名和密码. -->
                        <username>tomcat</username>
                        <password>tomcat</password>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    • 部署:


      image.png

      [图片上传中...(image.png-b9bf20-1572705916155-0)]


      部署命令
    • 启动和关闭Tomcat:


      image.png

    3.资源的拷贝插件:

    Maven 在打包时默认只将 src/main/resources 里的配置文件拷贝到项目中并做打包处理, 而非 resource 目录下的配置文件在打包时不会添加到项目中。

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build> 
    
    .png

    相关文章

      网友评论

          本文标题:Java高级技术day-73:Maven

          本文链接:https://www.haomeiwen.com/subject/hbphbctx.html