Maven

Maven

1. 以前项目存在的问题

  1. 一个项目就是一个工程,如果非常大就不适合使用package来划分,要按模块来。
  2. 以前项目中的jar需要手动复制粘贴,相同的jar出现在不同的工程中,臃肿!借助Maven,将jar保存仓库,有需要去引用进行了。
  3. 或者jar需要我们自己到官网下载,有的还需要其他的依赖,而且各个官网下载形式五花八门。
  4. jar还需要手动加入项目。

2. Maven概念

Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具

即是一款服务于Java平台的自动化构建工具。(构建:一些资源生成一个项目的过程)


3. Maven安装

  1. 要有JAVA_HOME环境变量

  2. 下载安装包 Download Apache Maven

  3. 配置Maven环境变量,MAVEN_HOME:D:\你的路径\apache-maven-3.8.4, 和path: %MAVEN_HOME%\bin

  4. mvn -v 输入命令行查看是否成功


4. 核心概念

  • 约定的目录结构

目录结构(因为Maven要管理我们的项目): 例如项目 - hello

hello:工程名

hello/src:源码

hello/src/main:存放主程序

hello/src/main/java:程序包,和包java源文件

hello/src/main/resources:框架和其他工具的配置文件

hello/src/test:存放测试程序(这个下面也可以有java,resources目录)

hello/src/test/java

hello/src/test/resources

hello/pom.xml:Maven工程核心配置文件


  • POM:Project Object Model,项目对象模型,pom.xml

坐标:groupIdartifactIdversion

packaging标签,是打包后的后缀名,默认jar,可以不写

dependencies标签,里面是dependency标签,表示各种依赖

properties标签:设置属性,也可以设置jdk版本

build标签:maven构建项目时的配置信息,例如编译插件的jdk版本

<dependencies>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

<properties> </properties>
<build> </build>

  • 坐标:
<groupId>com.sutong</groupId>       <!-- 公司组织域名倒叙+项目名-->
<artifactId>testweb</artifactId>    <!-- 模块名/项目名-->
<version>1.0-SNAPSHOT</version>     <!-- 版本,SNAPSHOT代表快照版,不稳定版本-->

对应仓库路径:com/sutong/testweb/1.0-SNAPSHOT/com.sutong-testweb-1.0-SNAPSHOT.jar

  • 依赖

Maven解析依赖会去本地仓库去找,找不到去中央仓库下载,都找不到报错。

如果是我们自己的工程执行install命令就会放到本地仓库。

依赖范围:

1)complie(对主程序和测试都有效,依赖也参与打包)

2)test(只测试有效,不参与打包)

3)provided(开发有,不参与打包,部署运行会去掉,服务器可以提供,例子:servlet-api.jar)

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>    // 依赖范围,不写默认是complie
</dependency>

  • 仓库:资源存放的位置

  • 生命周期:各个构建环节的执行顺序,清理,编译,测试,报告,打包,安装,部署等

  • 插件/目标:执行maven构建的时候用的工具

  • 继承

  • 聚合


5. Maven命令

构建命令要进入pom.xml所在的目录下,输入命令。

  • mvn clean:清理
  • mvn complie:编译主程序,main目录下的所有
  • mvn test-complie:编译测试程序,test目录下的所有
  • mvn test:执行测试
  • mvn package:执行打包
  • mvn install:安装,把生成好的jar,war安装到本地仓库
  • mvn site:生成站点

执行命令需要插件时,Maven核心程序回去本地库去找,如果没有,则会去联网去中央仓库去下载(就下载一次)

本地仓库默认位置:C:\users\用户名\.m2\repository\

可以修改:apache-maven-3.8.4\conf\settings.xml\localRepository标签 中间改为自己的路径就行了:

<localRepository>D:\Learning\Java_Practice\JarLibraries\RepMaven</localRepository>


6. Idea创建maven项目

Idea使用前需要设置一下(本人的是2020.1版本)
在这里插入图片描述

  • 普通的java项目:
    在这里插入图片描述
<?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.sutong</groupId>
  <artifactId>test01-se</artifactId>
  <version>1.0-SNAPSHOT</version>


  <!-- 设置属性-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>  <!-- 编译用的jdk版本-->
    <maven.compiler.target>1.8</maven.compiler.target>  <!-- 应该运行在的版本-->
  </properties>

  <!-- 依赖-->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!-- 里面写不写都有的都行,idea帮我们加上可以方便我们修改而已-->
  <build>...</build>
</project>


  • web工程(还需要手动创建一些目录,main下的java,resource,main同级的test和下面的java,resource):
    在这里插入图片描述
<?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.sutong</groupId>
  <artifactId>test02-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

</project>

Maven:常用设置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>


自定义属性(全局变量):
在properties中自定义标签声明变量(标签名就是变量名),在pom.xml文件的其他位置使用${变量名}来使用这个变量
一般用来定义依赖的版本号,当多处使用相同的版本号时,特别是spring依赖很多,类似把版本号提取出来,修改一处就行了
<properties>
    <spring-version>5.2.0</spring-version>
</properties>

资源插件,mybatis中可能会用到

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>  <!-- 处理的目录-->
            <includes>
                <!-- 扩展名是properties,xml的文件拷贝到classes下-->
                <include>**/*.properties</include>  
                <include>**/*.xml</include>
            </includes>
            <!-- false不启动过滤器,*.properties/*.xml已经起到过滤作用了-->
            <filtering>false</filtering>  
        </resource>
    </resources>
</build>
  1. 默认没有使用resources的时候,maven执行编译代码时,会把src/main/resources目录中的文件拷贝到target/classes文件夹里,对于src/main/java目录下的非.java文件不处理,即不拷贝到target/classes文件夹里。

  2. 而我们程序需要把一些文件方法src/main/java下供java程序执行使用,而这时就需要告诉maven在编译时这些文件需要拷贝到target/classes对应的文件夹里,这时就需要build中加入resources

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值