• Maven 学习笔记1


    Maven 仓库

    Maven 仓库的分类

    maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven 软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是本地文 件夹,当第二次需要此 jar 包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库 理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

    20200713194741

    上图中央仓库位置错误,应该是:http://repo1.maven.org/maven2

    • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找。

      默认本地仓库位置在 ${user.dir}/.m2/repository

    • 远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。 远程仓库可以在互联网内也可以在局域网内。

    • 中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。

    全局 setting 与 用户 setting

    maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。

    • 在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project 项目,它作为 maven 的全局配置。

    • 如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user. dir} /.m2/settings.xml 目录中。

    • maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

    Maven 工程的认识

    Maven 工程的目录结构

    20200713212339

    作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。 进入 src 目录后,我们发现它里面的目录结构如下:

    20200713212528
    • src/main/java —— 存放项目的.java 文件

    • src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

    • src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

    • src/test/resources —— 测试资源文件

    • target —— 项目输出位置,编译后的 class 文件会输出到此目录

    • pom.xml——maven 项目核心配置文件

    Maven 常用命令

    1. compile(编译)

      compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。

      执行 mvn compile

    2. test(测试)

      test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。

      执行 mvn test

    3. clean(清理)

      clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

      执行 mvn clean

    4. package(打包)

      package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。

      执行 mvn package

    5. install(安装)

      install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。

      执行 mvn install

    idea 开发 maven 项目

    idea 的 maven 配置

    打开 --> File --> Settings 配置 maven

    依据图片指示,选择本地 maven 安装目录,指定 maven 安装目录下 conf 文件夹中 settings 配置文件。

    20200714081221

    idea 中创 建一个 maven 的 web 工程

    1. 打开 idea,选择创建一个新工程

      20200714081638
    2. 选择 idea 提供好的 maven 的 web 工程模板

      20200714081710
    3. 点击 Next 填写项目信息

      20200714081744
    4. 点击 Next,此处不做改动。

      ![image-20200714081830668](/Users/liyihua/Library/Application Support/typora-user-images/image-20200714081830668.png)

    5. 点击 Next 选择项目所在目录

      20200714081900
    6. 点击 Finish 后开始创建工程,耐心等待,直到出现如下界面。

      20200714081955

    idea 中配置创建的 maven 的 web 项目

    1. 手动添加 src/main/java 目录,如下图右键 main 文件夹 --> New --> Directory

      20200714085207
    2. 创建一个新的文件夹命名为 java

      20200714085238
    3. 点击 OK 后,在新的文件夹 java 上右键 --> Make Directory as --> Sources Root

      20200714085334
    4. 创建一个 Servlet

      src/java/main 创建了一个 Servlet,但报错

      20200714092635

      要解决问题,就是要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet 的坐标,从而 导入它的 jar

    5. 在 pom.xml 文件添加坐标

      直接打开 hello_maven 工程的 pom.xml 文件,再添加坐标

      20200714093033

    pom.xml 文件中的配置

    每个 maven 工程都需要定义本工程的坐标,坐标是 maven 对 jar 包的身份定义,比如:入门程序的 坐标定义如下:

    <!--项目名称,定义为组织名+项目名,类似包名-->
    <groupId>com.itheima</groupId>
    <!-- 模块名称 -->
    <artifactId>hello_maven</artifactId>
    <!-- 当前项目版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本 -->
    <version>0.0.1-SNAPSHOT</version>
    <!-- 
         jar:执行 package 会打成 jar 包
         war:执行 package 会打成 war 包
    -->
    <packaging>打包类型</packaging>
    

    依赖范围

    A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

    • compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包 。

    • provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依 赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。

    • runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

    • test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test 范围依赖不会被打包。

    • system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用。

    20200714094453

    默认值:

    默认引入的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )

    servlet-api 、jsp-api ---- --- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)

    jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )

    junit ----- test (测试有效)

    依赖范围由强到弱的顺序是:compile > provided > runtime > test

    项目中添加 <scope></scope> ,来规定依赖范围:

    20200714094801

    设置 jdk 编译版本

    这里使用 jdk1.8,需要设置编译版本为 1.8,这里需要使用 maven 的插件来设置:

    在 pom.xml 中加入:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    Web 工程

    1. 编写 servlet

      20200714095439
    2. 编写 JSP

      ![image-20200714095621187](/Users/liyihua/Library/Application Support/typora-user-images/image-20200714095621187.png)

    3. 在 web.xml 中配置 servlet 访问路径

      20200714095711

      如:

      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <path>/HelloMaven</path>
          <port>8080</port>
        </configuration>
      </plugin>
      

    添加 tomcat7 插件

    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <path>/HelloMaven</path>
        <port>8080</port>
      </configuration>
    </plugin>
    

    此时点击 idea 最右侧 Maven Projects,就可以看到新添加的 tomcat7 插件。双击 tomcat7 插件下 tomcat7:run 命令直接运行项目:

    20200714100106

    手动输入 tomc7:run 命令运行项目:

    20200714100221

    总结

    pom 基本配置

    <project> :文件的根节点 .

    <mo delversion> : pom.xml 使用的对象模型版本

    <groupId> :项目名称,一般写项目的域名

    <artifactId> :模块名称,子项目名或模块名称

    <version> :产品的版本号 .

    <packaging> :打包类型,一般有 jar、war、pom 等

    <name> :项目的显示名,常用于 Maven 生成的文档。

    <description> :项目描述,常用于 Maven 生成的文档

    <dependencies> :项目依赖构件配置,配置项目依赖构件的坐标

    <build> :项目构建配置,配置编译、运行插件等。

    参考文献

    1. 黑马程序员(Java) ---- Maven基础
    Good Good Write Bug, Day Day Up
  • 相关阅读:
    当开发者产生一个伟大的想法之后应该做的10件事
    PUT 还是 POST ?
    Failed to issue method call: Unit mysqld.service failed to load: No such file or directory.
    使用 Protocol Buffers 代替 JSON 的五个原因
    Java 打印堆栈的几种方法
    Eclipse调试Java的10个技巧
    如何使用命令查看系统名称?
    Feed系统架构资料收集
    dcm4chee 修改默认(0002,0013) ImplementationVersionName
    【原创】分布式之数据库和缓存双写一致性方案解析
  • 原文地址:https://www.cnblogs.com/liyihua/p/14482557.html
Copyright © 2020-2023  润新知