Java核心-maven

简介: Java核心-maven

Maven

功能

项目构建

项目构建是指一个项目从编写代码,到编译,到测试,到打包,到上线等一系列的步骤。

依赖管理

项目管理其实就是可以帮助我们去管理我们的项目。

其实就是管理我们的项目的依赖。帮助我们把项目的依赖集中的管理起来。

安装Maven

下载

注意,Maven的版本和Idea的版本以及JDK的版本是对应的。

JDK: JDK8

IDEA: 2018.3.6

Maven: 3.5.3

解压

安装的软件的解压路径里面不要有中文,不要有特殊字符(例如空格 等等)

配置环境变量

在path中添加根目录的路径名

mvn -v用来检测

配置maven

  • 本地仓库
  • 中央仓库
  • 配置本地仓库

在maven的根目录下的conf文件夹中有一个settings.xml配置文件,需要配置一个 本地仓库

<localRepository>D:\maven\repo</localRepository>
  • 配置中央仓库

在 标签里面加入以下内容

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

配置idea中maven的配置

创建maven工程

手动

maven项目的要求:

1. 所有的源代码都放在 src/main/java 路径下
2. 所有的配置文件都放在 src/main/resources 路径下
3. 所有的测试案例源代码都放在 src/test/java路径下
4. 所有的测试需要的配置文件都放在 src/test/resources 路径下
  1. 每一个maven项目在项目的根目录下必须得有一个pom.xml文件
  2. maven的项目编译的文件存放的路径必须是 项目根目录下的target文件夹
  • 新建一个java项目
  • 新建文件夹
  • 标记对应的文件夹
    在项目结构中标记
  • 新建一个pom.xml文件在项目的跟目录下去新建一个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">
    <!-- 上面的这些路径其实就是一些 约束文件
        这些约束文件其实就是定义了这个xml文件中可以出现什么标签,以及标签出现的顺序
    -->
    <!-- 不用改 -->
    <modelVersion>4.0.0</modelVersion>
    
    <!-- maven 项目的坐标 -->
    
    <!-- 组织名 通常来说是域名反转-->
    <groupId>com.cskaoyan</groupId>
    
    <!-- 应用名 你这个项目的名字 -->
    <artifactId>mybatis-demo</artifactId>
    
    <!-- 版本号 0.0.1 
    0.x 的版本通常来说是不稳定版
    x.x.x-beta 线上测试版(不稳定的)
    x.x.x- SNAPSHOT 快照版 可以理解为稳定版
    -->
    <version>1.0.0</version>
</project>
  • 让idea识别你的项目为maven工程
  • 右键 pom.xml文件,add as maven project

使用idea来创建

只需要注意项目名称和artifactId保持一致

使用Maven工程

项目构建

Maven可以用来管理项目的声明周期。

Maven定义的声明周期 包括了 清理、编译、测试、打包、安装、站点部署等一套完整的流程。

执行命令有几种方式:

  • 打开cmd窗口,进入到这个module的根目录下,执行命令
  • 打开idea,在右边有一个控件栏,打开lifecycle,双击执行对应的指令
  • 打开idea,在下面有一个 terimal插件栏,打开,执行对应的命令

maven的项目构建的流程是从validate开始的。

例如我们要去执行package,会先执行 validate -> compile -> test - > package

是有一个流程的先后顺序的。

  1. 清理 帮助我们去删除编译生成的target文件夹
    mvn clean
  2. 编译 编译其实就是帮助我们把.java 文件变成 .class文件,并且把对应的配置文件也复制过去
    mvn compile
    编译之后有对应的目录
    注意在编译完成后,所有的java文件和配置文件都会放入classes文件中
    java文件相当于是源代码路径,这和普通的src是一致的
  3. 测试 测试其实就是去运行这个项目中所有的测试类的测试方法
    mvn test
    在执行mvn test的时候,会先去编译,执行所有的测试类里面的测试方法
  4. 打包 打包其实就是把我们项目打包成 .jar (jar 包) 或者是 .war (war 包)
    mvn package
    默认是打jar包,如果需要打war包,那么就去修改 pom.xml文件的配置
<!-- 默认配置的是 jar -->
<packaging>war</packaging>

5.安装 其实就是把打包生成的jar包复制到本地仓库中去

mvn install

  1. 部署 站点生成,其实就是帮助我们把本地仓库中的jar包上传到服务器上去
    mvn deploy
    这个命令不是重点,因为在公司中,一般不采用mvn来部署项目(jenkins\ docker \ k8s )

依赖管理

如何导包

scope的传递范围

cope指的是这个依赖的包的作用域

  • compile
    这个是默认的作用域。在编译的时候起作用,在任何时候任何地方都是有效的。
  • provided
    编译的时候有效、测试的时候有效,但是运行的时候失效
  • test
    这个是测试案例的作用域,这个test修饰的依赖只能在 src/test/java 路径下才能生效
  • runtime
    runtime修饰的jar包,在编译的时候,不起作用,只有在运行的时候,才会起作用
    典型的案例 就是mysql的驱动包。

依赖传递

项目A的依赖中有项目B,项目B的依赖有项目C,所以项目A的依赖中也有项目C

依赖冲突

在同一个项目中对于同一个jar包的不同版本,我们只需要一个版本,如果导入多个版本就会造成冲突

  • 声明优先原则
    谁写在前面就以谁为准
  • 就近原则
    谁的传递次数最少以谁为准
  • 手动排除
  • 提取常量

补充配置

需要把以下的配置添加到 settings.xml文件中,主要是去指定我们使用maven编译的时候jdk的版本

<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

解决test方法乱码

<build>
        <plugins>
            <!-- 解决maven test命令时console出现中文乱码乱码 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.7.2</version>
                <configuration>
                    <forkMode>once</forkMode>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                    <!-- <systemProperties> -->
                    <!-- <property> -->
                    <!-- <name>net.sourceforge.cobertura.datafile</name> -->
                    <!-- <value>target/cobertura/cobertura.ser</value> -->
                    <!-- </property> -->
                    <!-- </systemProperties> -->
                </configuration>
            </plugin>
        </plugins>
    </build>

使用maven来开发

和之前不一样的地方

  • 导包方式不一样
  • 代码写的位置、配置文件存放的位置不一样
  • 读取配置文件的输入流的方式不一样
    现在的读取方式:
// 初始化数据源
    static {
        Properties properties = new Properties();
        try {
            // 绝对路径的写法,不好
//            InputStream in = new FileInputStream("E:\\cskaoyan\\35workspace\\workspace_35\\druid-maven-demo\\src\\main\\resources\\druid.properties");
            // 我们在maven的项目中,需要使用类加载器去找文件的路径
            ClassLoader classLoader = DruidUtils.class.getClassLoader();
            // 类加载去找文件的时候,因为类加载是从classes文件夹开始加载的,所以会从classes文件夹下开始加载
            InputStream inputStream = classLoader.getResourceAsStream("druid/druid.properties");
//            URL url = classLoader.getResource("druid/druid.properties");
//            String path = url.getPath();
//
//            System.out.println("path:" + path);
            // /E:/cskaoyan/35workspace/workspace_35/druid-maven-demo/target/classes/druid.properties
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

project和module的区别与联系

  • project一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中,一个项目可能代表一个完整的软件解决方案项目是以下内容的集合:
  • 你的工作成果:源代码、脚本、配置文件、文档、工件等。
  • 用于开发、编译、运行和测试代码的SDK和库。
  • 在项目上下文中表示你的工作偏好设置
  • 一个项目有一个或者多个模块作为其部件
  • module
  • 模块是项目的一部分,你可以独立的编译、运行、测试和调试。
  • 模块是一种在维护公共项目配置的同事降低大型项目复杂性的方法。
  • 模块可以重复使用:如果需要,可以再多个项目中包含一个模块。

总结一下:Project是IDEA的最顶级的结构单元,project只是起到了一个项目定义的功能,类似于工作空间的概念,这个工作空间可以去配置你的IDEA的一些公共配置,例如SDK、代码库等。module是project的一部分,可以用来单独编译运行等,每一个module项目运行的时候都是一个单独的Java进程。IDEA创建项目的时候会默认创建一个同名的module,实际上我们开发写代码都是在开发这个module。

目录
相关文章
|
8月前
|
Java 测试技术 项目管理
【JavaEE】从 0 到 1 掌握 Maven 构建 Java 项目核心技巧 解锁 Java 项目高效管理实用实例
本文从Maven基础概念讲起,涵盖安装配置、核心概念(如POM与依赖管理)及优化技巧。结合Java Web项目实例,演示如何用Maven构建和管理项目,解决常见问题,助你高效掌握这一强大工具,提升Java开发与项目管理能力。适合初学者及进阶开发者学习。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
300 6
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
前端开发 JavaScript Java
Java构建工具-maven的复习笔记【适用于复习】
这篇文档由「潜意识Java」创作,主要介绍Maven的相关知识。内容涵盖Maven的基本概念、作用、项目导入步骤、依赖管理(包括依赖配置、代码示例、总结)、依赖传递、依赖范围以及依赖的生命周期等七个方面。作者擅长前端开发,秉持“得之坦然,失之淡然”的座右铭。期待您的点赞、关注和收藏,这将是作者持续创作的动力! [个人主页](https://blog.csdn.net/weixin_73355603?spm=1000.2115.3001.5343)
392 3
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
726 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
342 5
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
844 4
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
263 2
【前端学java】如何从前端视角快速学习Maven
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
493 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
385 0

推荐镜像

更多