Maven

Maven

Maven的下载配置

  1. 根据pycharm编辑器的版本选择对应的maven版本

  2. 编辑环境变量,将bin目录加入环境变量中

  3. 修改配置文件

    • 配置本地仓库

    • 找到 localRepository 节点,在注释外添加

      <localRepository>D:\apache-maven-3.9.8-bin\MAVEN—local repository</localRepository>
      
  4. 配置镜像

    • settings.xml 文件中找到 mirrors 节点

      <!-- 阿里云仓库 -->
      <mirror>
      	<id>alimaven</id>
      	<mirrorOf>central</mirrorOf>
      	<name>aliyun maven</name>
      	<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
      </mirror>
      
  5. 配置JDK

    • settings.xml 文件中找到 profiles 节点

            <profile>
                <id>jdk-12</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                    <jdk>12</jdk>
                </activation>
                <properties>
                    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                    <maven.compiler.source>12</maven.compiler.source>
                    <maven.compiler.target>12</maven.compiler.target> 
                </properties> 
            </profile>
      
  6. 测试命令

    # 查看环境变量
    mvn -version
    # 查看阿里云仓库和本地仓库的配置
    mvn help:system
    

项目路径问题

Maven 项目的目录结构

  • 资源文件通常放置在 src/main/resourcessrc/test/resources 目录下。
  • 代码文件通常放置在 src/main/javasrc/test/java 目录下

整体结构如下所示

项目根目录
├── src
│   ├── main
│   │   ├── java              # Java 源代码目录
│   │   ├── resources         # 资源文件目录(配置文件、属性文件等)
│   │   └── webapp            # Web 应用根目录
│   │       ├── WEB-INF       # Web 应用配置文件目录
│   │       │   ├── web.xml   # Web 应用部署描述文件
│   │       │   └── classes   # 编译后的类文件(由 Maven 自动生成)
│   │       └── index.html    # 静态资源文件(HTML、CSS、JS 等)
│   └── test
│       ├── java              # 测试代码目录
│       └── resources         # 测试资源文件目录
├── target                    # 构建输出目录(由 Maven 自动生成)
│   ├── classes               # 编译后的类文件
│   ├── test-classes          # 编译后的测试类文件
│   └── 项目名.war            # 打包后的 WAR 文件
├── pom.xml                   # Maven 项目配置文件
└── 其他文件(如 README.md)
  • 注意:
    • 需要手动将pom.xml依赖导入生成项目结构下的WEB-INF下的lib文件夹下
    • 如果是手动标注java、resource这些文件夹需要在settings中Maven下的Ignored Files选项卡下查看是否忽略了该项目

配置文件中的路径

  • 不加 /
    • 表示相对类路径的路径。
    • 例如:mappers/usermapper.xml 表示从类路径的根目录开始查找 mappers/usermapper.xml 文件
  • /
    • 也表示类路径的根目录,但通常不推荐在类路径中使用 / 开头。
    • 例如:/mappers/usermapper.xml 也表示从类路径的根目录开始查找 mappers/usermapper.xml 文件

文件系统中的路径

  • 不加 /

    • 表示相对路径,相对于当前工作目录(通常是项目的根目录)
  • /

    • 表示绝对路径,从文件系统的根目录开始查找
场景 路径写法 解析方式
Java 代码中 不加 / 相对路径,相对于当前类的包路径(使用 getResourceAsStream 时)。
/ 绝对路径,从类路径的根目录开始。
配置文件中 不加 / 相对路径,从类路径的根目录开始。
/ 绝对路径,从类路径的根目录开始(与不加 / 效果相同)。

UserServer.class.getResourceAsStream

  • 如果路径以 / 开头(绝对路径),则从类路径的根目录开始查找
  • 如果路径不以 / 开头(相对路径),则从 UserServer.class 所在的包路径开始查找

UserServer.class.getClassLoader().getResourceAsStream

  • 路径不能以 / 开头,始终从 classpath 根目录开始查找

一些注意点

  • 类路径的根目录是 target/classes
  • maven项目中编译后java目录下和resource目录下的文件会一同打包到target/classes目录下,如果有同名的包则会将java文件和resource文件放到一起
  • java目录和resource目录这两个目录本身并不会打包进根目录
  • 在 Maven 的配置文件中,某些情况下确实可以使用相对路径,但通常不推荐这样做

Mave中依赖的作用范围

  1. compile(默认值)

    • 作用
      • 依赖在编译、测试和运行时都有效。
      • 依赖会被打包到最终的构建产物中(如 JAR、WAR 等)。
    • 使用场景
      • 项目的主要依赖,例如核心库、工具类等。
  2. test

    • 作用
      • 依赖仅在测试阶段有效(编译测试代码和运行测试时)。
      • 依赖不会被打包到最终的构建产物中。
    • 使用场景
      • 测试框架(如 JUnit、TestNG)和测试工具。
  3. provided

    • 作用
      • 依赖在编译和测试阶段有效,但在运行时由外部环境提供(如 Servlet API)。
      • 依赖不会被打包到最终的构建产物中。
    • 使用场景
      • 由运行环境(如应用服务器)提供的依赖。
  4. runtime

    • 作用
      • 依赖在测试和运行时有效,但在编译时无效。
      • 依赖会被打包到最终的构建产物中。
    • 使用场景
      • 运行时需要的依赖,但在编译时不需要(如 JDBC 驱动)
  5. system

    • 作用
      • 类似于 provided,但依赖的路径需要显式指定。
      • 依赖不会被打包到最终的构建产物中。
    • 使用场景
      • 使用本地系统中的依赖,而不是从 Maven 仓库中获取
  6. import

    • 作用

      • 仅用于 <dependencyManagement> 中,用于导入其他 POM 文件中的依赖管理配置。
      • 不会实际引入依赖。
    • 使用场景

      • 在父 POM 中管理依赖版本。
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.example</groupId>
                  <artifactId>parent-pom</artifactId>
                  <version>1.0</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
      
  7. optional

    • 作用

      • 标记依赖为可选的,不会传递到依赖该项目的其他项目中。
      • 依赖在编译、测试和运行时都有效。
    • 使用场景

      • 当依赖不是项目必需的,或者不希望传递依赖时使用。
      <dependency>
          <groupId>com.example</groupId>
          <artifactId>optional-lib</artifactId>
          <version>1.0</version>
          <optional>true</optional>
      </dependency>
      

总结

Scope 编译阶段 测试阶段 运行阶段 打包 传递性 使用场景
compile 核心依赖
test 测试框架和工具
provided 由运行环境提供的依赖
runtime 运行时需要的依赖
system 本地系统中的依赖
import 导入依赖管理配置
optional 可选依赖,不传递

Maven中的八个命令

  1. clean
    • 作用:清理项目,删除 target 目录及其内容。
    • 使用场景:在重新构建项目之前,清理旧的构建结果。
    • 效果:删除 target 目录,确保下一次构建是从干净的状态开始
  2. compile
    • 作用:编译项目的源代码。
    • 使用场景:将 src/main/java 目录下的 Java 源代码编译为 .class 文件
    • 效果:编译后的 .class 文件会存放在 target/classes 目录中
  3. test
    • 作用:运行项目的单元测试。
    • 使用场景:执行 src/test/java 目录下的单元测试代码
    • 效果
      • 运行所有单元测试,并生成测试报告。
      • 测试报告会存放在 target/surefire-reports 目录中
  4. package
    • 作用:将编译后的代码打包成可分发的格式(如 JAR、WAR 等)。
    • 使用场景:生成项目的构建产物
    • 效果
      • 根据 pom.xml 中配置的 <packaging> 类型,生成相应的构建产物。
      • 例如,<packaging>jar</packaging> 会生成一个 JAR 文件,存放在 target 目录中
  5. install
    • 作用:将项目的构建产物安装到本地 Maven 仓库。
    • 使用场景:将项目打包并安装到本地仓库,供其他项目依赖
    • 效果
      • 将生成的 JAR/WAR 文件安装到本地 Maven 仓库(通常是 ~/.m2/repository 目录)。
      • 其他项目可以通过 groupIdartifactIdversion 引用该构建产物
  6. deploy:部署到远程仓库。
  7. verify:运行集成测试并验证构建结果。
  8. site:生成项目站点文档。

注意点:

  • maven执行后面的命令会一并执行之前的命令

父工程中的版本管理

  • dependencyManagement 中声明的依赖仅用于指定版本号,子工程可以继承这些版本信息,但不会自动引入依赖
  • 子工程如果需要使用某个依赖,必须显式声明该依赖,且未指定版本时,才会继承父工程的版本
<!--父工程-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.8</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--子工程-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
</dependencies>
posted @ 2025-03-17 22:15  QAQ001  阅读(20)  评论(0)    收藏  举报