美文网首页java web
Maven的简介以及安装配置和目录结构

Maven的简介以及安装配置和目录结构

作者: 马佳乐 | 来源:发表于2022-06-23 20:19 被阅读0次

    1.Maven简介

    1.1主要内容

      作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理。

    1.2.项目构建

      不管你是否意识到,构建(build)是每一位程序员每天都在做的工作。早上来到公司,我们做的第一件事就是从源码库签出最新的代码,然后进行单元测试,如果测试失败,会找相关的同事一起调试,修复错误代码。接着回到自己的工作上来,编写自己的单元测试及产品代码。

      仔细总结一下,我们会发现,除了编写源代码,我们每天有相当一部分时间花在了编译,运行单元测试,生成文档,打包和部署等繁琐且不起眼的工作上,这就是构建。如果我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有繁琐的步骤都能够自动完成,很快就能得到最终结果。

    1.3.项目构建工具

    Ant构建

      最早的构建工具,基于IDE,大概是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好。

    Maven 【JAVA】

      项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具。它填补了Ant缺点,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式。Maven专注的是依赖管理,使用Java编写。

    Gradle

    属于结合以上两个的优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的区别是不用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁。

    目前市面上Ant比较老,所以一般是一些比较传统的软件企业公司使用, Maven使用Java编写,是当下大多数互联网公司会使用的一个构建工具,中文文档也比较齐全,gradle是用groovy编写,目前比较新型的构建工具一些初创互联网公司会使用,以后会有很大的使用空间。

    1.4.Maven的四大特性

    1.4.1.依赖管理系统

      Maven为Java世界引入了一个新的依赖管理系统jar包管理 jar升级时修改配置文件即可。在Java世界中,可以用groupld、artifactld、version组成的Coordination(坐标)唯一标识一个依赖。

      任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包或者jar包。—个典型的依赖引用如下所示:

    <dependency>
      <groupId>javax.servlet</groupId> com. baidu
      <artifactId>javax.servlet-api</artifactId> ueditor echarts
      <version>3.1.0</version>
    </dependency>
    

    坐标属性的理解

      Maven坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。

    groupld

      定义当前Maven项目隶属的实际项目-公司名称。(jar包所在仓库路径)由于Maven中模块的概念,因此一个实际项目往往会被划分为很多模块。比如spring是一个实际项目,其对应的Maven模块会有很多,如spring-core,spring-webmvc等。

    artifactld

      该元素定义实际项目中的一个Maven模块-项目名,推荐的做法是使用实际项目名称作为artifactld的前缀。比如: spring-bean, spring-webmvc等。

    version

      该元素定义Maven项目当前所处的版本。

    1.4.2.多模块构建

      项目复查时dao service controller层分离将一个项目分解为多个模块已经是很通用的一种方式。

      在Maven中需要定义一个parent POM作为一组module的聚合POM。在该POM中可以使用<modules>标签来定义一组子模块。parent POM不会有什么实际构建产出。而parent POM中的build配置以及依赖配置都会自动继承给子module。

    1.4.3.一致的项目结构

      Ant时代大家创建Java项目目录时比较随意,然后通过Ant配置指定哪些属于source,那些属于testSource等。而Maven在设计之初的理念就是Conversion over configuration(约定大于配置)。其制定了一套项目目录结构作为标准的Java项目结构,解决不同ide带来的文件目录不一致问题。

    1.4.4.一致的构建模型和插件机制

    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.25</version>
        <configuration>
            <scanIntervalseconds>10</ scanIntervalseconds>
            <contextPath>/test</contextPath>
        </configuration>
    </plugin>
    

    2.1.Maven的安装配置

    2.1.1.检查JDK的版本

      JDK版本1.7及以上版本

      win+R键打开终端,输入java -version即可查看jdk版本

    2.1.2.下载Maven

      下载地址:http://maven.apache.org/download.html

      历史版本:https://maven.apache.org/docs/history.html

      下载最新版本:


    2.1.3.配置Maven环境变量

      解压后把Maven的根目录配置到系统环境变量中MAVEN_HOME,将bin目录配置到path变量中。

      注: maven解压后存放的目录不要包含中文和空格

      第一步,新建第一个环境变量MAVEN_HOME,如下所示:

      第二步,编辑Path变量,新增:%MAVEN_HOME%,如下所示:

      最后,验证是否安装成功。现在我们打开 cmd,输入:mvn -v即可。

    2.2.认识Maven目录结构

    Maven项目目录结构

    目录 作用
    ${basedir} 存放 pom.xml 和所有子目录
    ${basedir}/src/main/java 项目的 java 源代码所在的目录
    ${basedir}/src/main/resources 项目的资源文件所在的目录,例如:propert文件
    ${basedir}/src/test/java 测试代码所在的目录,例如:JUnit 代码
    ${basedir}/src/test/resources 测试相关的资源文件所在的目录
    ${basedir}/src/main/webapp/WEB-INF web 应用文件目录,web 项目的信息,比如存放 web.xml、本地图片、jsp 视图页面
    ${basedir}/target 打包输出目录
    ${basedir}/target/classes 编译输出目录
    ${basedir}/target/test-classes 测试编译输出目录

    2.2.1根目录的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.xxxx</groupId>
        <artifactId>maven01</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>maven01</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.source>1.8</maven.compiler.source>
            <junit.version>5.7.0</junit.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        
    </project>
    

    标签定义解释:

    根目录下的第一个子元素Modelversion指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0。指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0
    
    groupId定义了项目属于哪个组,这个组往往和项目所在的组织和公司存在关联。
    比如:com.xxx
    
    artifactId定义了当前Maven项目在组中唯一的ID。
    
    version x.×.x-里程碑
    比如:1.0.O-SNAPSHOT
    第一个x 大版本 有重大变革
    第二个x 小版本 修复bug,增加功能
    第三个x 更新
    
    里程碑版本:
    SNAPSHOT(快照,开发版)
    a1pha(内部测试)
    beta(公开测试)
    Release | RC(发布版)
    GA(正常版本)
    
    使用name标签声明一个对于用户更为友好的项目名称,虽然不是必须的,但还是推荐为每个Pom声明name,以方便信息交流。
    

    2.2.2编写主函数

    package com.xxxx.demo;
    public class Hello{
        public static void main(String[] args){
            System.out.println("Hello maven");
        }
    }
    

    2.2.3cmd 下编译并运行

      注:第一次下载会比较慢,要修改maven解压之后的conf目录下的settings.xml。

    修改配置

    1.1.修改默认仓库位置
    打开maven目录 -> conf -> settings.xm1添加仓库位置配置
    <localRepository>F:/m2/ repository</localRepository>
    注:仓库位置改为自己本机的指定目录,"/"不要写反
    
    1.2.更换阿里镜像,加快依赖下载
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    

    进入项目的根目录,cmd进入终端

    1.编译java文件

      mvn compile

    2.执行main方法

      mvn exec:java -Dexec.mainClass="com.xxxx.demo.Hello"
    引号里的是包名和类名

    3.Maven命令

    3.1.常用命令

    命令 描述
    mvn -version 显示版本信息
    mvn clean 清理项目生产的临时文件,一般是模块下的target目录
    mvn compile 编译源代码,一般编译模块下的src/main/java目录
    mvn package 项目打包工具,会在模块下的target目录生成jar或war等文件
    mvn test 测试命令,或执行src/test/java/下junit的测试用例
    mvn install 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
    mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
    mvn site 生成项目相关信息的网站
    mvn eclipse:eclipse 将项目转化为Eclipse项目
    mvn dependency:tree 打印出项目的整个依赖树
    mvn archetype:generate 创建Maven的普通java项目
    mvn tomcat7:run 在tomcat容器中运行web应用
    mvn jetty:run 调用Jetty插件的Run目标在Jetty Servlet容器中启动web 应用

      注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom .xm1文件所在的目录。否则,必以通过参数来指定项目的目录。

    3.2.命令参数

      上面列举的只是比较通用的命令,其实很多命令都可以携带参数以执行更精准的任务。4.2.1.-D传入属性参数

    例如:
    mvn package -Dmaven.test.skip=true

      以-D开头,将maven.test.skip的值设为true ,就是告诉maven打包的时候跳过单元测试。同理,mvndeploy-Dmaven.test.skip=true代表部署项目并跳过单元测试。

    3.2.2.-P使用指定的Profile配置

    比如项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,在pom.xml中的配置如下:

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <activeByDefau1t>true</activeByDefault>
            </activation>
       </profile>
       <profile>
            <id>qa</id>
            <properties>
                <env>qa</env>
            </properties>
        </profile>
        <profile>
            <id>pre</id>
            <properties>
                <env>pre</env>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <env>prod</env>
            </properties>
        </profile>
    </profiles>
    
    ...
    
    <bui1d>
        <filters>
            <filter>config/${env}.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        
        ...
        
    </bui1d>
    

    相关文章

      网友评论

        本文标题:Maven的简介以及安装配置和目录结构

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