ccran 的个人博客 ccran 的个人博客

记录精彩的程序人生

目录
Maven学习(1)
/    

Maven学习(1)

Maven

Maven概述

今天忽然想重新了解一下maven,maven的介绍就不多说了,网上很多,可以自行google。

maven的作用很多,这里主要说下自己目前理解到的两点:

  1. 依赖的导入

所谓“依赖”就是网上别人写的jar包

"导入"说的就是maven会自动帮我们把jar包下载本地并且导入到java工程里面

  1. 打包

"打包"的意思就是假如我们写的代码还不错,想把这个代码给别人用,我们就可以把java代码打包成jar包发给别人

光说不干假把式,所以下面是demo

demo

概述

demo由两个maven工程组成:

  • JavaMavenDemo(我们写的工具类,打包给别人用的)
  • JavaUsePkgDemo(模拟别人怎么用)

环境:

  • IDEA
  • java1.8
  • maven3

这里需要注意的是在IDEA里面配置好我们自己的maven:

在idea菜单栏:File=>Settings=>搜索Maven进行配置

Maven home directory: D:/Maven/apache-maven-3.5.3(指定为自己下载好的maven路径)
Local repository: F:/MavenRepository(指定为自己maven本地仓库的位置,本地仓库就是指你下载好的jar包都在这个文件夹里面)

当然用IDEA自带的也行,主要是要注意Local repository也就是maven本地仓库所在的路径

JavaMavenDemo

1. 项目结构

├─pom.xml # 写好我们要下载的依赖
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─ccran
│  │  │          └─main
│  │  │                  Util.java # 我们自己写的工具类
│  │  │
│  │  └─resources
│  └─test
│      └─java
│              TestUtil.java # 测试类
└─target
    ├─ maven-1.0-SNAPSHOT.jar # 打包好的jar包

windows下使用tree /f命令可以生成当前文件夹的目录树

2. 代码

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.ccran</groupId>
    <artifactId>maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- Hutool工具包 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.0.3</version>
        </dependency>

        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--这里scope指定为test,到时候就不会把junit的依赖打包进去了!-->
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

注意点:

  • Hutool是网上大神写的工具包,里面有各种工具类方便开发
  • 一般使用JUnit进行代码测试,好处多多
  • scope为test代表将我们项目打包成jar的时候,junit相关的jar包不会打包进去
  • 依赖下载完以后,我们可以去Local Repository本地maven仓库里面看,比如hutool jar包所在位置就是Local Repository/cn/hutool/hutool-all/5.0.3

Util.java

package com.ccran.main;

import cn.hutool.core.util.StrUtil;

public class Util {
    public static String getHelloWorld() {
        // 返回 hello,world 字符串
        return StrUtil.format("{},{}", "hello", "world");
    }
}

TestUtil.java

import com.ccran.main.Util;
import org.junit.Test;

public class TestUtil {
    // 加上Test注解就可以像执行Main方法一样跑这个方法了
    @Test
    public void testUtil() {
        // 输出 hello,world字符串
        System.out.println(Util.getHelloWorld());
    }
}

3. 打包

  1. 在IDEA窗口右侧打开Maven Project工具栏
  2. 在Lifecycle里面双击package

此时可以在控制台看到maven打包命令,然后在项目的target文件夹下面就可以看到打包好的jar包了。

可以用解压软件打开我们的jar包,好好了解一下jar包的结构,可以看到junit相关的jar包并没有打包进去。

其实就是将我们项目的class文件做成压缩包,毕竟对jvm来说只要class信息就足够了。

好了,这个jar包就可以发给别人用了😄。

这里可以在Lifecycle里面双击install,可以将自己的jar包打包到本地maven库里面

JavaUsePkgDemo

1. 项目结构

很简单,就一个pom配置文件以及TestUsePkg测试类

├─pom.xml # 依赖配置
├─src
│  ├─main
│  │  ├─java
│  │  └─resources
│  └─test
│      └─java
│              TestUsePkg.java # 测试类

2. 代码

TestUsePkg.java

import cn.hutool.core.util.StrUtil;
import com.ccran.main.Util;
import org.junit.Test;

public class TestUsePkg {
    @Test
    public void testMain() {
        System.out.println(Util.getHelloWorld());
        StrUtil.format("{},{}", "hello", "world");
    }
}

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.ccran</groupId>
    <artifactId>use-maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--通过上一步的mvn install,mvn会现在本地仓库找我们的包-->
        <dependency>
            <groupId>com.ccran</groupId>
            <artifactId>maven</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- Hutool工具包 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.8</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

注意:

  • 这里我们引入了4.6.8版本的Hutool,看项目会不会出错,因为我们自己打的包引入了5.0.2版本的Hutool
  • 发现没有出错,看来maven帮我们解决了依赖的冲突。😃

总结

  1. maven可以帮我们下载依赖(首先会在本地仓库找有没有jar包,没有就会去中央仓库找jar包)。并且可以一定程度上解决冲突(解决冲突的规则可以好好学一下)
  2. maven可以帮我们打包。可以不用javac生成class文件,组织结构,然后做成压缩的jar包这种繁琐的步骤啦!
  3. maven牛逼😄

标题:Maven学习(1)
作者:ccran
地址:https://ccran.online/article-maven-start