JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)

news2024/9/21 5:31:09

目录

  • 认识MAVEN
  • 安装&配置MAVEN
    • windows安装MAVEN
    • MAVEN的配置
      • 本地仓库 localRepository
      • 镜像 mirrors
      • 代理仓库 respositories
      • 代理 proxies
    • IDEA配置MAVEN(一个module)
  • MAVEN生命周期
    • install下载包
  • 模块的pom.xml
    • 坐标gav
    • 打包方式 package
    • 属性值 properties
      • 内置属性
      • 自定义属性
    • 依赖dependencies
      • dependency
        • scope 依赖范围
        • 依赖传递(IDEA 配置多个module)
        • exclusions 依赖排除
        • optional 依赖可选
    • 插件 plugins
  • 项目的pom.xml
    • modules 模块聚合
    • dependencyManagement && parent 依赖管理与继承
    • profiles 多环境管理
  • 常见问题
    • IDEA配置MAVEN后异常,右下角需要查看event log
    • scope中provided的依赖本地需要怎么办?
    • 知道import什么包,如何写pom.xml的dependency
  • 附pom.xml内容
    • second_maven.xml
    • module01.xml
    • module02.xml
    • module03.xml
  • 参考


认识MAVEN

Java的包管理工具有Maven、Gradle等,其中Maven是一款服务于Java平台的自动化构建工具,把整个过程抽象成一个项目对象模型(Project Object Model,POM),它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试及部署等一系列行为。Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。

安装&配置MAVEN

windows安装MAVEN

MAVEN官方下载地址如下:
MAVEN下载地址

下载后设置环境变量,使用

mvn --version

验证,有输出即可。 在这里插入图片描述

MAVEN的配置

maven的安装目录下,有一个Conf目录,其中settings.xml是配置文件

本地仓库 localRepository

设置一些依赖的Jar包保存在哪里,默认是${user.home}/.m2/repository,我一般就放在MAVEN目录下面

<localRepository>D:\apache-maven-3.8.8\maven_respository</localRepository>

镜像 mirrors

常用的镜像地址有以下几个:

  • Maven Central Repository: https://repo.maven.apache.org/maven2/
  • JBoss Repository: https://repository.jboss.org/nexus/content/groups/public/
  • Spring Repository: https://repo.spring.io/libs-release/
  • Apache Repository: https://repository.apache.org/content/repositories/releases/

打开可以看到一些包的目录
在这里插入图片描述
当然,无法科学上网的时候下载包会比较慢,这里以阿里云为例进行配置。

<mirrors>
 <!-- 阿里云仓库 -->
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
      <id>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

可以通过文件搜索查找可以下载的包及版本
在这里插入图片描述

代理仓库 respositories

可以使用代理仓库

<repository>
  <id>central</id>
  <url>https://maven.aliyun.com/repository/central</url>
  <releases>
    <enabled>true</enabled>
  </releases>
  <snapshots>
    <enabled>true</enabled>
  </snapshots>
</repository>

代理 proxies

一般设置公司的vpn,来下载一些不公开的自研包

IDEA配置MAVEN(一个module)

使用IDEA创建MAVEN项目,可以选择Empty Project,然后自己手动配置,也可以直接选择MAVEN
在这里插入图片描述
在这里插入图片描述
GroupId一般是公司域名反写,ArtifactId是你项目打包后的名字,Verion就是版本,之后的pom.xml再详细解释。
在这里插入图片描述
创建好后点击右上角有蓝色的Project Structure查看项目结构
在这里插入图片描述
完整的项目结构应该是

  • src:源代码
    • main:主目录
      • java java代码
      • resources 资源
    • test 测试目录
      • java 测试代码
      • resources 测试资源
  • pom.xml
    标准目录结构参考 maven标准目录结构
    标记目录可以在上面的项目结构,也可以在左侧目录栏右键 Mark Directory as。
    在这里插入图片描述
    MAVEN配置
    File->settings->Build, Execution,Deployment
    在这里插入图片描述
    修改Maven目录、配置文件、本地仓库位置,记得打勾。

MAVEN生命周期

点击右侧的Maven可以看到生命周期
在这里插入图片描述
解释如下:

  • clean:删除先前版本生成的所有文件
  • validate- 验证项目是否正确,以及所有必要的信息是否可用
  • compile- 编译项目的源代码
  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
  • package- 获取编译后的代码并将其打包为其可分发的格式,例如 JAR。
  • verify- 对集成测试结果进行任何检查,以确保满足质量标准
  • install- 将包安装本地存储库中,以用作本地其他项目中的依赖项
  • site:生成项目的站点文档
  • deploy- 在构建环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。

更多生命周期查看Maven生命周期

install下载包

main的java中创建Hero类
Hero.java

public class Hero {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getProfession() {
        return profession;
    }

    public void setProfession(String profession) {
        this.profession = profession;
    }

    private String profession;
}

pom.xml中添加dependency

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

点击install,可以看到下载
在这里插入图片描述
test的java中创建HeroTest.java

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;

public class HeroTest {
    @Test
    public void testJsonToHero() {
        String jsonStr = "{\"name\":\"狂铁\",\"profession\":\"战士\"}";
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        Hero hero = new Hero();
        hero.setName(jsonObject.getString("name"));
        hero.setProfession(jsonObject.getString("profession"));
        System.out.println(hero.getName() + " " + hero.getProfession());
    }
}

运行
在这里插入图片描述
左侧的External Libraries会展示包和包中的代码,右侧的Dependencies会展示依赖和依赖的依赖。
由于install在package生命周期后面,所以也会生成target目录,里面有打好的jar包。
在这里插入图片描述

在本地仓库可以根据坐标找到对应的包。
在这里插入图片描述
在这里插入图片描述

模块的pom.xml

坐标gav

  • groupId:公司或组织域名反写
  • artifactId:项目模块Id
  • version:版本号,例如1.0-SNAPSHOT、1.0-RELEASE等。

举例

    <groupId>com.ladykiller</groupId>
    <artifactId>first_maven</artifactId>
    <version>1.0-SNAPSHOT</version>

RELEASE一般在功能完成一个阶段,进行发布时会使用。
详见:命名指南

打包方式 package

  • jar: 默认的Java工程
  • war:Web工程
  • pom:管理其他工程的工程

属性值 properties

内置属性

1.env.X
获取系统环境变量值,例如

${env.PATH}

2.project.x
获取项目相关的变量,例如

${project.version}

3.settings.x
获取配置文件相关的变量,例如

${settings.localRepository}

4.java.x
获取配置文件相关的变量,例如

${java.home}

自定义属性

常用来定义一些版本等,后序可以使用,方便修改,类似编程时的全局变量。
例如:

    <properties>
        <flink.version>1.8</flink.version>
    </properties>

使用时使用${标签值即可}

<version>${flink.version}</version>

依赖dependencies

本节参考 依赖机制

dependency

scope 依赖范围

  • compile - 默认范围。编译依赖项在所有类路径中都可用。此外,这些依赖项将传播到依赖项目。
  • provided - 这很像编译,但表示希望 JDK 或容器在运行时提供它。它仅在编译和测试类路径上可用,即在main目录和test目录下可用,不会打包,并且不是可传递的
  • runtime - 此范围指示编译不需要依赖项,但执行需要依赖项。它位于运行时和测试类路径中,但不在编译类路径中。
  • test - 此范围指示依赖项不是正常使用应用程序所必需的,并且仅适用于测试编译和执行阶段,在test目录下可用。它不是可传递的
  • system - 此作用域类似于,只是您必须提供显式包含它的 JAR。工件始终可用,不会在repository中查找。
    以test为例
  <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

在这里插入图片描述

依赖传递(IDEA 配置多个module)

创建一个空项目
在这里插入图片描述
在这里插入图片描述
之后添加模块module01 module02
在这里插入图片描述
有三个pom.xml,项目的和两个module的
在这里插入图片描述
在module02的pom.xml中添加对module01的依赖,右侧刷新后可以看到
在这里插入图片描述
同理,创建module03, 并在module02中添加对module03的依赖
依赖传递中的冲突

直接依赖:pom.xml中写的依赖
间接依赖:依赖所需的资源,或者说依赖的依赖

声明优先:间接依赖,先声明的优先
特殊优先:直接依赖,后声明的优先
路径优先:出现相同资源,层级越深,优先级越低

依赖如下图所示
在这里插入图片描述
结果如下图所示
在这里插入图片描述

exclusions 依赖排除

项目中依赖其他模块,但是项目本身不需要模块的某些依赖时,可以排除
在这里插入图片描述

optional 依赖可选

表示是否需要依赖的依赖,默认为false。
在这里插入图片描述

插件 plugins

插件太多了,以一个插件为例
在这里插入图片描述
添加并执行install生命周期
在这里插入图片描述

项目的pom.xml

模块存在依赖,且特别多时,需要把很多模块整合在一起,看做整体进行生命周期管理,这个时候就用到了管理模块,即root模块。

modules 模块聚合

在这里插入图片描述
添加上面橘红色的pom.yaml文件为新的模块,进行项目的管理,添加成功后会变成蓝色,点击生命周期时可以看到多个模块会一起变化,例如,点击了clean,三个模块的target就都没有了。

dependencyManagement && parent 依赖管理与继承

通过dependencyManagement由root模块进行统一的依赖管理,通过parent进行依赖的继承。
在这里插入图片描述

在这里插入图片描述

profiles 多环境管理

实际生产过程中可能会有开发环境、测试环境、生产环境等,在MAVEN中可以通过profiles进行多环境配置与管理
在这里插入图片描述
使用profiles进行环境管理,使用activation指定默认的环境

给生产环境打包时,可以使用-P参数指定使用的环境id

mvn install -P prod

常见问题

IDEA配置MAVEN后异常,右下角需要查看event log

点击Help->Show log in Explore,打开后如果是类似下面的内容,说明你的IDEA和MAVEN版本不匹配,查看MAVEN的发行时间和你的IDEA的版本,修改后即可。

org.jetbrains.idea.maven - com.google.inject.CreationException: Unable to create injector, see the following errors:

1) No implementation for org.apache.maven.model.path.PathTranslator was bound.
  while locating org.apache.maven.model.path.PathTranslator
    for field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.pathTranslator(Unknown Source)
  at org.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)

2) No implementation for org.apache.maven.model.path.UrlNormalizer was bound.
  while locating org.apache.maven.model.path.UrlNormalizer
    for field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.urlNormalizer(Unknown Source)
  at org.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)

3) No implementation for org.apache.maven.model.interpolation.ModelVersionProcessor was bound.
  while locating org.apache.maven.model.interpolation.ModelVersionProcessor
    for field at org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator.versionProcessor(Unknown Source)
  at org.codehaus.plexus.DefaultPlexusContainer$1.configure(DefaultPlexusContainer.java:350)

scope中provided的依赖本地需要怎么办?

有的时候我们导入了其他人的项目,有些依赖没有,但是在pom.xml中是provided
可以改pom.xml,编译时下载包,之后再改过来,比较麻烦,不够优雅。

我们可以通过修改configuration,打勾包含provided scope即可
在这里插入图片描述

知道import什么包,如何写pom.xml的dependency

查询gav,知道后查看仓库中有哪些版本
在这里插入图片描述

附pom.xml内容

second_maven.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.ladykiller</groupId>
    <artifactId>second_maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module01</module>
        <module>module03</module>
        <module>module02</module>
    </modules>

    <profiles>
        <profile>
            <id>dev</id>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module01</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module02</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module03</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.9</version>
                    </dependency>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.6</version>
                        <optional>true</optional>
                    </dependency>
                </dependencies>
            </dependencyManagement>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module01</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module02</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>com.ladykiller</groupId>
                        <artifactId>module03</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                    <dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.12</version>
                    </dependency>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.8.2</version>
                        <optional>true</optional>
                    </dependency>
                </dependencies>
            </dependencyManagement>
        </profile>
    </profiles>


</project>

module01.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.ladykiller</groupId>
    <artifactId>module01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.ladykiller</groupId>
        <artifactId>second_maven</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>install</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

module02.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.ladykiller</groupId>
    <artifactId>module02</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.ladykiller</groupId>
        <artifactId>second_maven</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.ladykiller</groupId>
            <artifactId>module01</artifactId>
            <version>1.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.ladykiller</groupId>
            <artifactId>module03</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

</project>

module03.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.ladykiller</groupId>
    <artifactId>module03</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>com.ladykiller</groupId>
        <artifactId>second_maven</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
    </dependencies>
</project>

参考

Apache-Maven入门指南
Apache-POM文档
Apache-Maven插件
阿里云MAVEN镜像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最全Java面试八股(涵盖所有Java核心面试知识点),立刻收藏

2022已成为过去式&#xff0c;不论这一年好与坏&#xff0c;我们都需要抓住新一年的机会&#xff0c;跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&#xff0c;给大家搞来了2…

9.反射和Lambda表达式

目录 一、反射 1.反射是什么 2.反射操作的四个核心类&#xff08;都处在java.lang.reflect&#xff09; 3.在java中获取一个类的class对象一共有三种途径&#xff1a; 4.想通过反射来操作类或者对象&#xff0c;第一步就是要获得该类的class对象。 5.Constructor应用 6.Met…

LabVIEW开发光线追踪可视化分段反射器测试台

LabVIEW开发光线追踪可视化分段反射器测试台 为了满足美国国家航空航天局&#xff08;NASA&#xff09;对未来望远镜的要求&#xff0c;新的红外空间天文台将在哈勃太空望远镜使用寿命结束后取代其。作为HST的继任者&#xff0c;詹姆斯韦伯太空望远镜&#xff08;JWST&#xf…

零基础小白如何快速入门网络安全/Web安全?

前言 网络安全现在是朝阳行业&#xff0c;缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全&#xff0c;初级也会慢慢的卷起来&#xff0c;但是岗位多不用怕&#xff0c;以后各大厂也都会要网络安全人…

scratch lenet(6): feature_map可视化的C语言实现

scratch lenet(6): feature_map可视化的C语言实现 文章目录 scratch lenet(6): feature_map可视化的C语言实现1. 目的2. FeatureMap 的归一化2.1 公式2.2 代码实现2.3 代码调用 3. 可视化结果4. References 1. 目的 将卷积层(Convolution)、下采样层&#xff08;SubSampling&a…

Linux系统之安装Ward服务器监控工具

Linux系统之安装Ward服务器监控工具 一、Ward介绍1.1 Ward简介1.2 Ward特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、部署java环境3.1 jdk下载地址3.2 解压jdk安装包3.3 复制二进制文件3.4 配置环境编辑3.5 查看java版本 四、下载ward的jar包4.1 下载软件包4.2 …

阿里巴巴内部10w+字总结的Java面试题,全是面试官必问技术

献上熬夜整理最新“10w字总结的Java面试题&#xff08;附答案&#xff09;”够你刷&#xff01; 春招升级打怪拿offer&#xff0c;10w字总结的Java面试题&#xff08;附答案&#xff09;够你刷 其包含的内容模块有&#xff1a;基础、JVM、多线程与高并发、Spring、MyBatis、Spr…

APP自动化测试高级定位技巧,我敢打赌你一定不知道

目录 高阶定位-Xpath 包含-contains() XPath 轴 XPath 运算符 AND OR 高阶定位-CSS css selector 定位介绍 css selector 用法 示例 iOS css selector 定位 Toast 识别 Toast 是什么 Toast 定位 Toast 定位 显示等待 使用lambda表达式 总结三种等待方法 高阶定…

Ansible自动化运维工具之playbook剧本编写含lnmp

1.playbook的相关知识 1.1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式&#xff0c;其功能更强大灵活。简单来说&#xff0c;playbook是一个非常简单的配置管理和多主机部署系统&#xff0c;不同于任何已经存在的模式&#xff0c;可作为一个适合部…

【黑马头条】解决P11@EnableDiscoveryClient注解无法导入爆红、bootstrap.yml配置文件图标无法显示成带云朵的小绿叶图标

本期目录 1. 问题描述2. 问题原因3. 解决方法 1. 问题描述 如果按黑马老师给的 heima-leadnews-service 模块的 pom 文件所写的依赖&#xff0c;会发现有 2 个 Bug &#xff1a; 首先&#xff0c;启动类 UserApplication 上的服务发现开关注解 EnableDiscoveryClient 不存在。 …

知识复盘(Session、Mysql、Servlet、Jsp、SSM)

一、会话跟踪技术(Session Tracking&#xff09; 1.为什么会出现会话机制? 目前主流的通讯方式就是客户端和服务端之间进行通信&#xff0c;而这种通信是通过Http协议实现的&#xff0c;但Http协议本身是无状态的&#xff0c;所以客户端每发送一次请求到服务器都会被当做一个…

windows上的Linux系统WSL2

目录 简介 安装 简介 适用于 Linux 的 Windows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境&#xff08;包括大多数命令行工具、实用工具和应用程序&#xff09;&#xff0c;且不会产生传统虚拟机或双启动设置开销&#xff0c;用于快速的多平台验…

Unity UGUI2——Canvas与EventSystem

一、Canvas ​ Canvas 的意思是画布&#xff0c;它是 UGUI 中所有 UI 元素能够被显示的根本&#xff0c;它主要负责渲染自己的所有 UI 子对象 ​ 如果 UI 控件对象不是 Canvas 的子对象&#xff0c;那么控件将不能被渲染 ​ 我们可以通过修改 Canvas 组件上的参数修改渲染方…

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

目录 一、什么是类 1.1 概述 1.2 UML中类的表示 1.3 接口 1.4 抽象类 1.5 模板类 二、什么类图 2.1 概述 2.2 类关系 三、UML类图 3.1 结构关系 3.1.1 完全一体&#xff1a;继承关系 &#xff08;类与类耦合度最高&#xff0c;类与类之间最强的关系&#xff09; …

空天|谈一谈飞机引擎的应急断离

为什么突然想到这个话题呢&#xff1f;归功于即将到来的材料力学考试。在复习科学出版社出版的苟文选、王安强等编写的《材料力学&#xff08;1&#xff09;》第三版第三章的连接键强度校核等内容时&#xff0c;一个例题吸引了我的注意力。 例3-4&#xff1a; 水平力Fg。 强而…

理论实战源码齐飞!架构师社区疯传的SpringSecurity进阶小册真香

安全管理是Java应用开发中无法避免的问题&#xff0c;随着Spring Boot和微服务的流行&#xff0c;Spring Security受到越来越多Java开发者的重视&#xff0c;究其原因,还是沾了微服务的光。作为Spring家族中的一员,其在和Spring家族中的其他产品如SpringBoot、Spring Cloud等进…

Unity UGUI3——三大基础控件

一、Image ​ Image 是图像组件&#xff0c;是 UGUI 中用于显示精灵图片的关键组件 ​ 除了背景图等大图&#xff0c;一般都使用 Image 来显示 UI 中的图片元素 &#xff08;一&#xff09;参数介绍 Source Image&#xff1a;图片来源 图片类型必须是“精灵 Sprite”类型 Col…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线&#xff0c;在IBM叫做Storage N series&#xff0c;就是N系列&#xff0c;在2014年IBM终止了和NetApp之间的OEM关系&#xff0c;目前在市场上的OEM的NetApp存储型号主要是 FAS3000&#xff0c;FAS31和FAS32的中端系…

HTB靶场:简单inject

HTB靶场&#xff1a;简单inject 1、进入靶场&#xff0c;连接vpn后开启靶机 inject 2、nmap扫描一下靶机 nmap -v -A 10.10.11.*扫描后显示服务和端口信息8080和22 3、打开web服务 1&#xff09;有上传文件功能 简单上传了几个文件&#xff08;txt,img等 上传过程根据参数简…

SpringBoot 实现 PDF 添加水印有哪些方案?

简介 PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是一种流行的文件格式&#xff0c;它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下&#xff0c;我们需要对 PDF 文件添加水印&#xff0c;以使其更具有辨识度或者保护其版…