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。

目录
相关文章
|
1月前
|
Java Maven
Maven 构建 Java 项目
使用 Maven 的 archetype:generate 命令创建 Java 项目,如 `mvn archetype:generate` -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false,在 C:\MVN 下生成基于 maven 的 consumerBanking 项目。
|
16天前
|
Java 项目管理 Maven
Java一分钟之-Maven profiles与dependencyManagement
【6月更文挑战第5天】本文探讨了Maven的profiles和dependencyManagement特性在Java项目管理中的应用,包括基本概念和常见问题。Profiles用于根据不同环境激活配置,易错点在于忘记激活,应通过命令行或设置默认profile来避免。dependencyManagement集中管理依赖版本,过度依赖会导致子模块灵活性降低,应合理使用。结合两者,可在不同环境中控制依赖版本,提高项目配置效率。
35 8
|
15天前
|
Java Maven 开发者
java一分钟之-Maven Archetypes:项目模板
【6月更文挑战第6天】Maven Archetypes是Java开发中用于快速创建项目模板的工具,简化项目初始化。它们定义了项目结构、必备文件和默认配置。使用Archetypes能实现快速启动、保持项目一致性并易于扩展。常见问题包括查找和使用Archetype、理解项目结构及pom.xml配置。通过命令行工具`mvn archetype:generate`可生成项目,例如使用`maven-archetype-quickstart`创建简单Java应用。熟悉Archetypes能提升开发效率,但也需根据实际需求调整生成的配置。
36 5
|
15天前
|
Java Maven
Maven 构建 Java 项目
使用 Maven 的 `maven-archetype-quickstart` 插件在 C:\MVN 下创建 Java 应用项目。命令行参数包括 `-DgroupId`, `-DartifactId`, `-DarchetypeArtifactId` 和 `-DinteractiveMode=false`。生成的项目包含 src 文件夹、pom.xml 及对应的 Java 源码和测试文件。App.java 是主类,AppTest.java 为测试类。按照预设结构组织代码,Maven 将自动管理构建过程。
|
6天前
|
Java Maven
【已解决】MAC安装maven,The JAVA_HOME environment variable is not defined correctly, this environment
【已解决】MAC安装maven,The JAVA_HOME environment variable is not defined correctly, this environment
15 0
|
1月前
|
存储 Java Maven
Maven 构建 Java 项目
使用 Maven 的 `maven-archetype-quickstart` 插件在 `C:\MVN` 创建 Java 应用项目 `consumerBanking`,命令行参数包括 `-DgroupId`, `-DartifactId` 和 `-DarchetypeArtifactId`。项目包含 src/main/java 和 src/test/java 目录,分别存放 Java 代码和测试代码,以及 src/main/resources 用于存储资源文件。默认生成的 `App.java` 和 `AppTest.java` 分别为应用主类和测试类。
|
15天前
|
NoSQL Java 网络安全
Redis在java(Maven)中使用,常用基本命令大全,最全Termius怎么进行端口映射(MAC系统最简单教学)
Redis在java(Maven)中使用,常用基本命令大全,最全Termius怎么进行端口映射(MAC系统最简单教学)
|
25天前
|
Java Maven
Maven 构建 Java 项目
使用Maven的`maven-archetype-quickstart`插件在C:\MVN下创建Java应用,命令:`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`。
|
1月前
|
Java Maven 开发者
Java一分钟之-Maven项目管理工具使用
【5月更文挑战第15天】Maven是Java开发的项目管理工具,用于自动化构建、依赖管理和项目信息管理。通过POM模型管理项目,依赖中央仓库。基本目录包括`src/main/java`、`src/main/resources`、`src/test/java`和`src/test/resources`。常用命令有`clean`、`compile`、`test`、`package`和`install`。面对依赖冲突、找不到依赖或编译错误,可以调整`pom.xml`或`settings.xml`。理解Maven的工作原理和解决常见问题能提升开发效率。
36 0
|
9天前
|
Java Apache Maven
Maven 项目文档
本教程聚焦于创建Maven项目文档。在C:/MVN目录下,使用命令`mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false`生成java项目。

推荐镜像

更多