第四十四天:maven安装+集成到Ideal+创建项目+坐标仓库+pom配置

1. Maven概述

1.1 概念

Maven是一个项目管理工具,有两个核心功能:依赖管理(jar包管理)、项目构建(操作维护项目);

上述两个功能的实现是通过一个POM模型对象来实现,该对象对应的是一个pom.xml文件;

pom.xml是整个Maven中最核心最重要的文件。

1.2 目录结构

// java项目结构
/*
Java项目(模块)根目录
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   └── resources
    └── test
        ├── java
        └── resources
*/

// javaweb项目结构
/*
javaweb项目(模块)根目录
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   ├── resources
    │   └── webapp
    │       └── WEB-INF
    │           └── web.xml
    └── test
        ├── java
        └── resources
*/

1.3 安装

  • 解压

    建议所有的开发软件都放在同一个目录(不能有中文、空格及其他特殊字符)

  • 配置Path

    确保已经配置了JAVA_HOME 环境变量

    配置MAVAEN_HOME,值为Maven安装的根目录

    配置path,引用到刚才的根目录,值为:%MAVAEN_HOME%\bin

  • 检测是否成功

    重新打开命令行窗口,键入mvn,如果有非错误提示,说明成功。

2. 相关概念

2.1 仓库

存储jar包的仓库

1608426858065

2.2 坐标

可以让Maven通过坐标快速的定位到某个jar,获取并供我们使用。站点mvnrepositry.com

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

3 配置仓库

仓库的配置只需要修改一个配置文件即可:maven安装目录下面的主配置文件conf/settings.xml

  • 本地仓库

    解压仓库的压缩包到某个目录,然后在settings.xml中配置如下内容:

    解压我分享的仓库到下面配置的位置

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <!-- localRepository
         | The path to the local repository maven will use to store artifacts.
         |
         | Default: ${user.home}/.m2/repository
    		重点是下面的内容
           -->
      <localRepository>D:\Develop\Repository\Maven_Repository</localRepository>
    

    配置好之后,在idea整合maven时,需要重新建立索引,才能让idea有提示。(仅限于先使用idea继承了maven,后解压更新了仓库)。

  • 中央仓库镜像

    配置阿里云对中央仓库的镜像,下载速度快。

    注意放在被注释的mirrors下面,小心层级关系

    <mirrors>
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>    
    </mirrors>
    
  • 私服,建议在某个项目的pom.xml文件配置

    在每个/某个模块的pom.xml文件中配置如下内容,粘贴在标签下即可

  • <!-- 为当前模块配置私服 -->
    <repositories>
        <repository>
            <!-- 依赖仓库id,不可重复。repositories可以配置多个仓库,如果ID重复后面配置会覆盖之前的配置 -->
            <id>dependencies_Repositories</id>
            <!-- 私服仓库地址,即nexus仓库组的地址 -->
            <url>http://192.168.33.240:8081/repository/maven-public/</url>
    
            <!-- 是否下载releases构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
    
            <!-- 是否下载snapshots构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <!-- 配置插件从私服下载 -->
    <pluginRepositories>
        <pluginRepository>
            <id>plugins_Repositories</id>
            <url>http://192.168.33.240:8081/repository/maven-public/</url>
            <!-- 是否下载release版本构件 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否下载snapshots版本构件 -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
    

4 Maven创建和构建

4.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">
        <!-- MavenModel版本号,与Maven的版本号不是一回事 -->
        <modelVersion>4.0.0</modelVersion>
    
        <!-- 公司名称,一般是域名反写 -->
        <groupId>com.jzh</groupId>
        <!-- 项目名字 -->
        <artifactId>yyyy</artifactId>
        <!-- 项目版本号,SNAPSHOT 快照版  RELEASE  发行版   DEBUG 测试版 -->
        <version>1.0-SNAPSHOT</version>
        <!-- 该项目最终打包的方式 -->
        <packaging>jar</packaging>
    
        <!-- 导入依赖 -->
        <dependencies>
            <!--某一个具体的依赖坐标-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
        <build>
        	<plugins>
            	<plugin></plugin>
            </plugins>
        </build>
    </project>
    
  • 各个及对应的插件

    1608426858066

4.2 手动命令使用模板(骨架)创建

不推荐

4.3 使用Idea创建

  1. Idea集成Maven,并开启自动导入、设置使用内置骨架和编码(避免控制台/页面乱码)

    -DarchetypeCatalog=internal -Dfile.encoding=GBK
    

    或者

    -DarchetypeCatalog=internal -Dfile.encoding=utf-8
    

    其他乱码相关

    // get请求乱码
    // tomcat8.5及以上版本,会自动解决请求乱码问题
    // tomcat8.5以下版本,需要手动解决get请求乱码问题;tomcat7插件,配置uriEncoding=utf-8即可
    
    // 处理post请求乱码
    req.setCharacterEncoding("utf-8");
    
    // 处理响应乱码,保证在获取响应流之前设置好编码即可,否则无效
    resp.setContentType("text/html;charset=utf-8");
    
  2. 创建并管理Java模块(应用、模块、项目、工程)

  3. 创建并管理JavaWeb模块

    在第二步骤的基础上做如下内容

    1. 为当前模块添加一个web环境
    2. 在当前模块的pom.xml中添加<packaging>war</packaging>,表示当前项目打成war包
    3. 把web文件夹移动至src/main下面,并改名为webapp
    4. 确认。打开Project Stucture 确认web路径是否正确(不报红即正确)
  4. 项目中各个文件夹功能失效怎么解决(右击模块中对应的文件夹,选择 mark directory as )

  5. Maven模块的导入导出

    导出:把模块文件夹复制出来就行,建议删除target

    导入:把模块文件夹复制到当前项目文件夹下,然后使用idea的maven窗口添加,添加时选择对应的pom.xml即可。

  6. 如果在下载依赖报错后,才配置了私服,会造成不请求私服的情况。

    解决方法:将当前project关闭,重新打开,重新打开后的项目会重新读取pom.xml文件,识别其中配置的私服。

    20201218155356020

  7. 如果在导入依赖时,长时间卡在finished,是因为idea为maven分配的内存不足,调大即可

    在 setting ==> Buid ==> Build Tools ==> Maven ==> Importing ==> VM options for importer ,修改其值为

    表示为maven分配内存,最小1G,最大2G。

    -Xms1024m -Xmx2048m
    

5. 插件

5.1 Tomcat插件

<build>
    <plugins>
        <!-- Tomcat7的Maven插件 -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <path>/</path>
                <port>80</port>
                <server>tomcat7</server>
            </configuration>
        </plugin>
    </plugins>
</build>

5.2 jdk8编译插件

<build>
    <plugins>
        <!-- 指定本项目JDK编译的版本为JDK1.8,并指定编码为utf-8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

1602925142098

6. 依赖

6.1 配置

pom.xml文件中,通过dependencies的子标签dependency;配置成功后,maven会自动将对应版本的jar包导入到当前项目中。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

如果依赖上报红线,可以通过配置私服解决。如果配置私服无效,看4.3中第6点。

6.2 依赖传递

依赖之间、项目之间、项目和依赖之间都是有依赖传递

6.3 依赖冲突

项目中对于同一个依赖导入多次,并且版本不一致。这时就可能会产生依赖冲突,需要通过下面的思路解决。

解决思路:

  • 路径优先,层级越深优先级越底
  • 声明优先,被引入时声明的越早,越优先
  • [特殊]同一目录中,后面导入的依赖会覆盖导入的依赖

6.4 可选/排除依赖

可选依赖 - 不透明 - 私房钱 – 不知道也就不能使用

排除依赖 - 不需要 - 拒绝 - 知道你有,但是主动拒绝使用

6.5 依赖范围

常见的是compiletestprovided

<!-- 下面三个scope需要配置provided -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

<!-- 下面一个scope需要配置test -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- 其他不用配置,即使用默认值compile -->

20201218163308474

pendency>

org.projectlombok
lombok
1.18.10
provided

junit junit 4.12 test ```

20201218163308474

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值