柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

  • 框架技术

    • Maven
      • 概念
        • 目录布局
        • 仓库
        • 本地仓库
        • 远程仓库
        • 中央仓库
        • 私服
        • 配置本地仓库
        • 配置远程仓库
        • 核心文件pom.xml
        • packaging
        • dependencies
        • 坐标
        • 生命周期
        • clean 清理项目
        • default 构建项目(核心)
        • site 生成项目站点
      • IDEA应用Maven项目
        • IDEA配置
        • Java项目的创建
        • 有骨架
        • 无骨架
        • JavaWeb项目的创建
        • 有骨架
        • 无骨架
        • 构建项目
      • 常用命令
        • mvn compile
        • mvn clean
        • mvn test
        • mvn package
        • mvn install
        • 组合命令
        • IDEA命令执行
      • Maven依赖
        • 依赖管理
        • 依赖范围(scope)
        • 依赖传递
        • 依赖排除
      • Mavean问题
        • web项目失效
    • Activiti
    • Shiro
    • Dubbo
    • RabbitMQ
    • Netty网络通信
    • Canal
  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • 框架技术
柏竹
2021-06-10
目录

Maven

# Maven

# 概念

# 目录布局

Maven创建项目,目录结构都是有标准的模板

目录 说明
src/main/java 应用程序的源代码的目录
src/main/resources 项目的源文件所在的目录
src/main/filters 资源筛选器文件
src/main/webapp Web 应用程序源
src/test/java 测试代码所在的目录
src/test/resources 测试资源
src/test/filters 测试资源筛选器文件
src/it 集成测试(主要针对插件)
src/assembly 装配描述符
src/site 网站
pom.xml 核心配置文件,项目的描述文件
target 项目构建的输出文件
LICENSE.txt 项目许可证
NOTICE.txt 项目所依赖的库所需的通知和归属
README.txt 项目的读物

# 仓库

专门 存放Maven项目的位置

# 本地仓库

本地上的一个文件夹。首次应用会从远程仓库进行下载的,下次应用会在本地找,没有则下载远程

# 远程仓库

# 中央仓库

官方提供的仓库 ,也是 Macen的默认仓库

# 私服

局域网内架设私有的仓库服务器,用于提供外部远程仓库应用

# 配置本地仓库

在 根目录\conf\setting.xml 文件的 settings节点里 添加以下代码

我的本地存储位置在 D:\Maven\repository

<!-- 配置本地仓库 -->
<localRepository>D:\Maven\repository</localRepository>

# 配置远程仓库

Macen 默认仓库是 境外,下载速度慢、不便捷

于是我们选择使用 国内阿里云Macen仓库作为中央仓库镜像

阿里云镜像的托管代码可能没这么快

在 根目录\conf\setting.xml 文件的 mirrors节点里 添加以下代码(更改为阿里云Macen仓库)

<!-- 配置阿里云镜像 -->
<mirror>
    <!-- 镜像的唯一标识 -->
	<id>nexus-aliyun</id>
    <!-- 镜像名称 -->
	<name>Nexus aliyun</name>
    <!-- 镜像仓库 Maven地址 -->
	<url>http://Maven.aliyun.com/nexus/content/groups/public/</url>
    <!-- 配置是否为中央仓库镜像,如果是,则central -->
	<mirrorOf>*</mirrorOf>
</mirror>

# 核心文件pom.xml

POM是 Maven 工程的基本工作单元,是一个XML文件,包含 了项目的基本信息,用于描述项目如何构建,声明项目依赖

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

<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">
<!-- Maven模型的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如
com.companyname.project-group,Maven会将该项目打成的jar包放本地路
径:/com/companyname/project-group -->
<groupId>com.Maven</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>HelloWorld</artifactId>
<!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 -->
<!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号
当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本
-->
<version>0.0.1-snapshot</version>
<!--打包类型,一般有jar、war、pom等-->
<packaging>jar</packaging>
<!-- 名称:可省略 ,常用于 Maven 生成的文档。-->
<name>Hello</name>
<!--项目描述:可省略,常用于 Maven 生成的文档-->
<description></description>
<!-- 项目依赖构件配置,配置项目依赖构件的坐标 -->
<dependencies>
    <!-- 依赖设置 ,可以有多个dependency节点-->
    <dependency>
        <!-- 依赖组织名称 -->
        <groupId>junit</groupId>
        <!-- 依赖项目名称 -->
        <artifactId>junit</artifactId>
        <!-- 依赖版本名称 -->
        <version>4.12</version>
        <!-- 依赖范围:test包下依赖该设置 -->
        <scope>test</scope>
    </dependency>
</dependencies>
<!-- 项目构建配置,配置编译、运行插件等。-->
<build>
	<plugins>
        <!--插件-->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.8.0</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>    
</build>
</project>

# packaging

packaging标签选项,指定项目的类型

项目类型一共有:

  • jar: Java工程
  • pom: 聚合工程
  • war: Web工程

# dependencies

dependencies标签选项,指定依赖的jar包集,搭配 dependency标签实现

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
	</dependency>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.8</version>
	</dependency>
</dependencies>

# 坐标

Maven世界中有大量的构件,需要唯一标识的坐标就可以找到我们想要的坐标(其原理类似于平面几何中的坐标 x、y进行标识唯一位置的点)

Maven坐标组成部分:

groupId: 当前Maven项目组织名称

artifactId: 实际项目名称

version: 当前项目的版本 或 所依赖jar包的版本

# 生命周期

Maven拥有三套生命周期,他们相互独立互不干扰

# clean 清理项目

阶段 说明
pre-clean 在实际项目清理之前执行所需的流程
clean 删除上一个版本生成的所有文件
post-clean 执行完成项目清洁所需的流程

# default 构建项目(核心)

阶段 说明
generate-resources 生成资源以包含在包中
process-resources 将资源复制并处理到目的地目录中,准备进行包装
compile 编译项目的源代码
test-compile 将测试源代码编译到测试目的地目录中
test 使用合适的单位测试框架运行测试。这些测试不应要求对代码进行包装或部署
install 将封装安装到本地存储库中,以用作本地其他项目的依赖
deploy 在集成或发布环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享
··· ···

注意:运行任何一个阶段的时候,它前面的所有阶段都会被运行

# site 生成项目站点

阶段 说明
pre-site 在实际项目站点生成之前执行所需的流程
site 生成项目的站点文档
post-site 执行完成站点生成和准备站点部署所需的过程
site-deploy 将生成的站点文档部署到指定的 Web 服务器

参考文档:http://maven.apache.org/index.html (opens new window)

# IDEA应用Maven项目

# IDEA配置

  1. 打开所有设置(必须在这里打开设置,否则其他项目无效)
  2. 设置Maven项目目录
  3. 运行环境

# Java项目的创建

# 有骨架

  1. 创建项目,选择骨架
  2. 配置项目基本信息
  3. 确认信息

# 无骨架

只需关闭选中,其他步骤跟有骨架的一致

无骨架创建项目需要自行配置 pom.xml

手动将Maven文件夹补齐

# JavaWeb项目的创建

# 有骨架

步骤就一步不一样,其他剩下步骤就不赘述了!

# 无骨架

无骨架创建项目后,需要自行配置 JavaWeb信息

  1. 项目配置
  2. 手动添加Web目录
  3. 添加创建内容

# 构建项目

添加Tomcat插件无需运行本地的Tomcat

  1. 配置 pom.xml

     <!--配置war包-->
    <packaging>war</packaging>
    
    <!--添加jar依赖-->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    
    <!--添加插件-->
    <build>
        <plugins>
            <!--tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.0</version>
                <!--Tomcat配置-->
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  2. 运行配置

# 常用命令

Maven命令需要在 pom.xml 所在目录中执行

# mvn compile

生成 target目录,该目录中存放了编译后的字节码文件

# mvn clean

删除 target目录

# mvn test

在 target目录 中生成,surefire、 surefire-reports(测试报告)、test-classes(测试的字节码文件)三个文件夹

# mvn package

在 target目录 中生成本项目的 jar包 或 war包 等

# mvn install

将打包好的 jar包 安装到本地仓库,方便其他工程应用

# 组合命令

组合命令,严格遵守生命周期的执行顺序!

  • mvn clean compile
  • mvn clean test
  • mvn clean package
  • mvn clean install
  • mvn clean install -D skipTests 构建项目
  • mvn spring-boot:run 启动项目

# IDEA命令执行

根据下图双击即可运行相应的命令!

# Maven依赖

# 依赖管理

项目依赖管理 ,pom.xml 文件中定义jar包的GAV坐标

<dependencies>
	<dependency>
        <!--依赖 GAV坐标-->
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
        <!--依赖范围-->
		<scope>test</scope>
	</dependency>
</dependencies>

# 依赖范围(scope)

依赖范围用于限制依赖的环境应用,指定何时提供依赖及分类路径

依赖范围值(scope) 说明
compile(默认值) 项目的所有类路径中提供
(为所有类编译提供依赖)
provided 编译和测试时需要,jar包不进行打包
(以防运行环境已经存在相同的包发生冲突)
runtime 测试、运行时需要
test 测试时需要,但不进行打包
··· ···
依赖范围 主类编译路径 测试编译路径 打包且编译时有效
compile Y Y Y
provided Y Y -
runtime - - Y
test - Y -

# 依赖传递

在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖,项目会自动引入依赖中的依赖!

假设 A项目 引入 B 和 E 依赖 ,他们有各自的依赖关系

A => B B => C C => D A => E E => D

  A项目
  |
  ├── B
  │   └── C
  │       └── D(2.0)
  └── E
      └── D(1.0)

最后 A项目 导入了D(1.0),排除D(2.0)

系统会根据导入的就近原则进行依赖应用

# 依赖排除

Maven 的依赖传递过程可选择性的排除依赖。如果依赖中有其他依赖可对其进行排除!

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.11</version>
	<!--排除依赖-->
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
            <!--排除依赖无需版本号-->
		</exclusion>
	</exclusions>
</dependency>

PS:排除依赖包中所包含的依赖关系,不需要添加版本号

假如我想在 上面假设中排除D(1.0),引入D(2.0)

···
<!--引入B依赖-->
<dependency>
	<groupId>B</groupId>
	<artifactId>B</artifactId>
	<version>0.1</version>
   	<!--排除依赖-->
	<exclusions>
        <!--排除 B依赖 中的 依赖C-->
		<exclusion>
			<groupId>D</groupId>
			<artifactId>D</artifactId>
            <!--排除依赖无需版本号-->
		</exclusion>
	</exclusions>
</dependency>
<!--引入E依赖-->
<dependency>  
	<groupId>E</groupId>
	<artifactId>E</artifactId>
	<version>0.1</version>
</dependency> 
···

# Mavean问题

# web项目失效

问题说明:

web文件夹目录未 被idea标识(文件夹没有小蓝点)

可能原因:

  • pom.xml 未配置 packaging标签 未配置war包
  • 项目结构未配置好
  • idea缓存问题

涉及解决方案:

  • pom.xml 配置 packaging标签

    <packaging>war</packaging>
    
  • 项目结构Web配置: 点击操作流程 (opens new window) (指定索引到操作流程)

  • 清空idea缓存并重启

上次更新: 2023/03/12, 00:43:49

← 企业项目实战问题 Activiti→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式