【Maven自动化构建工具】 | 项目管理工具

news2024/11/28 10:48:19

目录

第1章:Maven简介

1. 传统项目开发存在的问题

2. Maven 概述

3.  Maven核心概念

4. 安装 Maven 环境

第2 章 Maven 的核心概念

1. Maven 工程约定目录结构

2. 仓库概念

3. POM文件

4. 坐标

5. 依赖

6.  Maven的生命周期、命令和插件

第 3 章 Maven 在 IDEA 中的应用

1. Maven的配置

2. IDEA 创建 Maven 版 java 工程

3. IDEA 创建 Maven 版 web 工程

4. IDEA中导入Maven工程

第 4 章 依赖管理

第 5 章 Maven常用设置

1. 全局变量

2.  指定资源位置


第1章:Maven简介

官网:http://maven.apache.org/

1. 传统项目开发存在的问题

(1)一个项目做成一个工程,造成工程比较庞大,需要使用多模块来划分项目;

(2)项目中需要的数量众多的 jar 包,需要手动下载并引入,并且多个项目需要的 jar 包存在重复的问题;

(3)项目中需要的 jar 包有版本兼容的问题,需要手动解决;

(4)项目中需要的 jar 包又依赖其它的 jar 包,需要手动解决。

2. Maven 概述

(1)Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。

(2)Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一 款在大型项目开发过程中不可或缺的重要工具。

(3)Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;

(4)Maven 提供规范的管理各个常用 jar 包及其各个版本,并且可以自动下载和引入项目中;

(5)Maven 可以根据指定版本自动解决 jar 包版本兼容问题;

(6)Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。

构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作,构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署。

①清理:删除以前的编译结果,为重新编译做好准备。

②编译:将Java源程序编译为字节码文件。

③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。

④报告:在每一次测试后以标准的格式记录和展示测试结果。

⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应war包。

⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。

⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

3.  Maven核心概念

Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从 Maven的九个核心概念入手,看看Maven是如何实现自动化构建的?

①POM : 一个文件 名称是pom.xml ,  pom翻译过来叫做项目对象模型。 maven把一个项目当做一个模型使用,控制maven构建项目的过程,管理jar依赖。

②约定的目录结构 : maven项目的目录和文件的位置都是规定的。

③坐标 : 是一个唯一的字符串,用来表示资源的。

④依赖管理 : 管理项目中可以使用的jar文件

⑤仓库管理(了解) :你的资源存放的位置

⑥生命周期 (了解) : maven工具构建项目的过程,就是生命周期。
⑦插件和目标(了解):执行maven构建的时候用的工具是插件
⑧继承
⑨聚合

4. 安装 Maven 环境

(1)首先要确保安装了 java 环境:maven 本身就是 java 写的,所以要求必须安装 JDK。

        查看 java 环境变量:echo %JAVA_HOME%

(2)下载并解压 maven 安装程序: https://maven.apache.org/download.cgi 

        子目录 bin :执行程序,主要是mvn.cmd
        子目录conf :maven工具本身的配置文件 settings.xml

(3)配置环境变量
在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是maven工具安装目录

     M2_HOME=C:\dev\maven_work\apache-maven-3.3.9

再把M2_HOME加入到Path之中:

    %M2_HOME%\bin;     

(4)验证,新的命令行中,执行mvn -v

第2 章 Maven 的核心概念

1. Maven 工程约定目录结构

Hello :根目录,也就是工程名
 |---src :源代码
         |---|---main :主程序
                 |---|---|---java: 主程序的 java 源码
                 |---|---|---resources: 主程序的配置文件

        |---|---test :测试程序
                |---|---|---java :测试程序的 java 源码
                |---|---|---resources :测试程序的配置文件

 |---pom.xml:Maven 工程的核心配置文件

(1)首先编写一个类放入java目录下的com.bjpowernode包下;进入src目录下输入:

mvn compile (编译src/main目录下的所有java文件)第一次编译会出现大量的下载操作!

①为什么要下载?

maven工具执行的操作需要很多插件完成的

②下载了什么东西?

 jar文件--叫做插件--插件是完成某些功能

③下载的东西存放到哪里了?

默认仓库(本机仓库):C:\Users\(登录操作系统的用户名)Administrator\.m2\repository

(2)执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录),maven编译的java程序,最后的class文件都放在target目录中!

 (3)修改本地仓库地址

第一步:修改maven的配置文件, maven安装目录/conf/settings.xml(先备份 settings.xml)

第二步:修改这个标签,进行目录的指定<localRepository>指定的目录</localRepository>

2. 仓库概念

(1)仓库是什么: 仓库是存放东西的, 存放maven使用的插件 和 我们项目使用的jar

例如:在没有网络的情况下,我们可以提前把所有的资源下载好,放到一个文件夹里面,然后把这个文件夹配置到指定目录里作为本地仓库使用,例:<localRepository>C:/dev/maven_work/repository</localRepository>

(2)仓库的分类

本地仓库:就是你的个人计算机上的文件夹,存放各种jar

远程仓库:在互联网上的,使用网络才能使用的仓库

①:中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库,https://repo.maven.apache.org:中央仓库的地址
②:中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都有这种镜像。

③:私服,在公司内部,在局域网中使用的, 不是对外使用的。

(3)仓库的使用

maven仓库的使用不需要人为参与,例如:开发人员需要使用mysql驱动,maven首先查本地仓库、然后从私服、再从镜像、最后再从中央仓库中查找。

3. POM文件

POM 文件即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中 进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和 操作都是关于 pom.xml 的。

POM文件-坐标:唯一值, 唯一标识一个项目的名称

①<groupId>公司域名的倒写</groupId>
②<artifactId>自定义项目名称</artifactId>
③<version>自定版本号</version>

 https://mvnrepository.com/ 搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件

 POM文件-打包:打包后压缩文件的扩展名,默认是jar;web应用时war

POM文件-依赖: dependencies 和dependency ,相当于是 java代码中import

例如:直接从仓库中找到对应的jar包,然后复制坐标放入dependencies标签即可。

 POM文件-设置属性:

 POM文件-构建:

build : maven在进行项目的构建时, 一些配置信息,例如:指定编译java代码使用的jdk的版本等 。

4. 坐标

(1)Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个 Maven 项目。

①groupId:组织名,通常是公司或组织域名倒序+项目名

②artifactId:模块名,通常是工程名

③version:版本号

(2)需要特别指出的是,项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version 决定项目在仓库中 的路径,artifactId 和 version 决定 jar 包的名称。

  <groupId>com.bjpwoernode.maven</groupId>
  <artifactId>ch01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>

5. 依赖

(1)一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找。对于程序员自己的 Maven 项目需要进行安装,才能保存到仓库中。

(2)不用 maven 的时候所有的 jar 都不是你的,需要去各个地方下载拷贝,用了 maven 所有的 jar 包都是你的,想要谁,叫谁的名字就行,maven 帮你下载。

 <dependencies> 
       <!--加入数据库依赖-->
       <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
       </dependency>
</dependencies>

6.  Maven的生命周期、命令和插件

maven的生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署等过程。
maven的命令:maven可以独立使用,通过命令完成maven的生命周期的执行。

maven的插件: maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类

(1)单元测试

①单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。
②junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。
                                 方法是测试的基本单位(单元)。

③maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。

(2)使用步骤

加入依赖,在pom.xml加入单元测试依赖

<dependencies>
        <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
</dependencies>

在maven项目中的src/test/java目录下,创建测试程序; 推荐的创建类和方法的提示:

①测试类的名称是:Test + 要测试的类名

例如:要测试HelloMaven,创建测试类 TestHelloMaven

public class TestHelloMaven{
    @Test
	public void testAdd(){
        测试HelloMaven的add方法是否正确
	}
}

 其中testAdd叫做测试方法,它的定义规则:
①方法是public的,必须的
②方法没有返回值, 必须的
③方法名称是自定义的,推荐是Test + 方法名称
④在方法的上面加入 @Test

(3)Maven的常用命令

mvn clean:清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)

mvn compile:编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)

mvn test-compile:编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)

mvn test:测试(会生成一个目录surefire-reports,保存测试结果)

mvn package:打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)

mvn install:安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)

mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中;还会自动把项目部署到 web 容器中)。

①mvn clean:用到maven-clean-plugin插件完成清空操作,清除原先生成的target文件

②mvn compile:用到两个插件maven-resources-plugin和maven-compiler-plugin,

前者是把main/resources目录下的文件拷贝到target/classes目录下;

后者是把编译的主程序代码的class文件放到target/classes目录下

③mvn test-compile:还是使用上述两个插件进行编译,编译的是测试程序的代码,编译后的class文件放到target\test-classes目录下

④mvn test:执行测试程序的代码,并且在\target\surefire-reports下保存测试结果的文件

⑤mvn package:就是把原来的项目生成一个压缩文件;使用maven-jar-plugin插件,生成的文件放到target\ch01-maven-1.0-SNAPSHOT.jar生成一个jar文件;生成名字的来源是<artifactId>标签和<version>标签的结合体;并且生成的jar包文件,只包含src/main目录下的所有文件,没有test目录下的文件

⑥mvn install:把打包好的项目,安装到我们本地的仓库当中

(4)插件配置

插件可以在自己的项目中设置,最常使用的是 maven 编译插件。设置项目使用的 jdk 版本时通过编译插件指定;pom.xml 文件中设置:

<!--控制配置maven构建项目的参数设置,设置jdk的版本-->
<build> 
	 <!--配置插件-->
	 <plugins> 
		 <!--配置具体的插件-->
		 <plugin> 
			 <!--插件的坐标-->
			 <groupId>org.apache.maven.plugins</groupId> 
			 <artifactId>maven-compiler-plugin</artifactId> 
			 <version>3.8.1</version>
			 <!--配置插件的信息-->
			 <configuration> 
				 <!--使用jdk1.8进行编译-->
				 <source>1.8</source> 
				 <target>1.8</target> 
			 </configuration> 
		 </plugin> 
	 </plugins> 
</build> 

第 3 章 Maven 在 IDEA 中的应用

1. Maven的配置

(1)IDEA中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。可以使用自己安装的maven, 需要覆盖IDEA中的默认的设置。

(2)配置的入口 :配置当前工程的设置/其它工程设置, file--settings/other settings(两个都要设置) ---Build, Excution,Deployment--Build Tools--Maven 

①Maven Home directory: maven的安装目录
②User Settings File :  就是maven安装目录conf/setting.xml配置文件
③Local Repository :    本机仓库的目录位置,上面配置好,会自动配置这一项

 (3)在配置一下Build Tools--Maven--Runner配置以下两个选项:

① VM Options : -DarchetypeCatalog=internal
②JRE: 项目的jdk

archetypeCatalog=internal , maven项目创建时,会联网下载模版文件,比较大, 使用archetypeCatalog=internal,不用下载, 创建maven项目速度快。

2. IDEA 创建 Maven 版 java 工程

(1)使用模版创建项目,maven-archetype-quickstart : 普通的java项目

 (2)填写 maven 工程的坐标

(3) 填写工程名和存储路径

(4) 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.bjpowernode</groupId>
    <artifactId>module001-maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--配置属性-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <!--依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

(5)编写程序进行测试

主程序

package com.bjpowernode;

public class HelloMaven {
    public int add(int m,int n){
        return n+m;
    }

    public static void main(String[] args) {
        HelloMaven hello = new HelloMaven();
        int res = hello.add(10, 20);
        System.out.println(res);
    }
}

测试程序:直接ctrl+shift+T就可以生成测试程序,也可以手动创建

package com.bjpowernode;

import org.junit.Assert;
import org.junit.Test;

// 直接点击三角形就能运行,不需要主方法
public class TestHelloMaven {
    @Test
    public void testAdd(){
        System.out.println("testAdd方法执行了");
        HelloMaven hello = new HelloMaven();
        int res = hello.add(10, 20);
        Assert.assertEquals(30,res);
    }
}

(6)查看后视图

3. IDEA 创建 Maven 版 web 工程

选择模板maven-archetype-webapp : 创建web工程;步骤和上面的步骤一样,创建好以后,我们编写servlet和jsp不需要在导入两个jar包,只需要在pom.xml引入依赖:

(1)创建缺省文件夹:创建好的结构是没有java目录和resources目录的

 (2)pom.xml添加依赖:servlet和jsp的依赖

<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>

    <name>module002-moven</name>
    <groupId>com.bjpowernode</groupId>
    <artifactId>module002-moven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--单元测试的依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--servlet的依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--jsp依赖-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

(3)创建一个Servlet进行测试

index.jsp发送请求


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="hello">访问jsp</a>
</body>
</html>

编写Servlet

package com.bjpowernode;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


public class HelloServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("Hello");
    }
}

属性配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.bjpowernode.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
        

4. IDEA中导入Maven工程

(1)File-->Project Structure

(2) 选择要导入的Module

(3) 选择导入方式

第 4 章 依赖管理

(1)依赖范围, 使用<scope>标签表示。
(2)scope的值有 compile, test, provided ,默认是compile
(3)scope:表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用。
(4)maven构建项目  编译, 测试 ,打包, 安装 ,部署 过程(阶段)
①对于compile是整个过程都起作用

②对于test只在测试阶段起作用

③对于provided表示提供者,只在编译和测试起作用

第 5 章 Maven常用设置

1. 全局变量

(1)maven的属性设置: <properties> 设置maven的常用属性

(2)自定义全局变量一般是定义 依赖的版本号, 当项目中要使用多个相同的版本号,先使用全局变量定义, 在使用${变量名};例如:

定义全局变量

<properties>    
    <spring.version>4.3.10.RELEASE</spring.version> 
</properties> 

引用全局变量

<dependency>   
    <groupId>org.springframework</groupId>   
    <artifactId>spring-context</artifactId>   
    <version>${spring.version}</version> 
</dependency> 

2.  指定资源位置

(1)src/main/java和src/test/java 这两个目录中的所有*.java文件会分别在compile和test-compile阶段被编译,编译结果.class文件分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉!

(2)如果需要把src/main/java目录下的其它非。java文件包在编译时放到target/classes目录,作为输出的jar一部分;就需要指定资源文件位置,以下内容放到标签中:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory><!--所在的目录-->
            <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <!--filtering选项 false不启用过滤器, *.property已经起到过滤的作用了 -->
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

(3)以上代码的意思就是:把src/main/java目录下的.properties文件和.xml文件全都扫描到,在编译时会生成到target/classes目录下!

注:使用这个标签设置后,原来放入resources目录下的文件编译时默认就不会放到target/classes目录下了!

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

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

相关文章

[JavaEE初阶] 内存可见性问题----volatile与wait(),notify()的使用

读书要趁黑发早,白首不悔少当时 文章目录1. 什么是内存可见性问题2. 避免内存可见性问题-----volatile(易变的)3. 需要注意的点4. wait()与notify()的使用4.1 控制两个线程执行顺序4.2 控制多个线程执行顺序4.3 wait()与sleep()的区别总结1. 什么是内存可见性问题 在线程A在读…

后端人眼中的Vue(四)

七、Vue生命周期 ​ Vue的生命周期指的是Vue实例在页面中创建到销毁整个过程。Vue提供了在各个生命周期的钩子&#xff0c;钩子也叫Vue生命周期函数。这些生命周期函数是伴随着Vue实例创建、销毁的过程中自动触发的&#xff08;不需要人为手动触发&#xff09;。Vue实例生命周期…

Leetcode:106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树(C++)

目录 106. 从中序与后序遍历序列构造二叉树&#xff1a; 问题描述&#xff1a; 实现代码与解析&#xff1a; 切割法&#xff08;递归&#xff09;&#xff1a; 原理思路&#xff1a; 索引版本&#xff1a; 105. 从前序与中序遍历序列构造二叉树&#xff1a; 问题描述&am…

zookeeper单节点部署

kafkazookeeper单节点部署及注意事项 事前准备&#xff1a; 1、一台Linux服务器或者是一台虚拟机 2、准备好JDK环境 3、安装好wget&#xff08;当然也可以不用这个&#xff0c;只是用于下载安装包的一个工具&#xff0c;所以能下载好包就是没问题的&#xff09; 4、需要了解vim…

Java面试题每日10问(4)

Core Java - OOPs Concepts: Inheritance Interview Questions 1. Why use inheritance in java? For Method Overriding (so runtime polymorphism can be achieved).For Code Reusability. Terms used in Inheritance Class: –A class is a group of objects which have c…

皕杰报表点击导出按钮后网页变空白问题

有人反映使用皕杰报表导出时&#xff0c;点击导出按钮后网页变成了空白&#xff0c;然后就没有反应了。看tomcat控制台也没有错误信息&#xff0c;似乎遇到了一个很难缠的问题&#xff0c;没有错误信息却卡滞了&#xff0c;这个问题怎么解决呢&#xff1f; 还是要从tomcat的日志…

盘点微服务架构下的诸多身份验证方式

联合作者&#xff1a;罗泽轩&#xff0c;API7.ai 技术专家、Apache APISIX PMC 成员 联合作者&#xff1a;赵士瑞&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer 身份认证是授予用户访问系统并授予使用系统的必要权限的过程。而提供了这一功能的服务&…

指针详解——高级指针的解析及应用

目录 &#x1f411;指针的初步了解 &#x1f402;指针的深入认识 &#x1f99b;1.指针数组 &#x1f400;指针数组的介绍 &#x1f400;指针数组的用法介绍 &#x1f42b;2.数组指针 &#x1f98c;数组指针的介绍以及使用 &#x1f9ae;3.函数指针 &#x1f408;函数指针的介绍…

Linux0基础入门:初识shell脚本编程

初识脚本编程到目前为止我们已经知道了 Linux 系统和命令行的基础知识&#xff0c;是时候开始编程了。本章讨论编写 shell 脚本的基础知识。在开始编写自己的 shell 脚本大作前&#xff0c;你必须了解这些基本概念。 使用多个命令到目前为止&#xff0c;你已经了解了如何使用 s…

Revit连接处理:阳台扶手和楼梯扶手,墙和梁

一、Revit中阳台扶手和楼梯扶手的连接处理 如图&#xff0c;有一些阳台扶手和楼梯扶手连接的地方&#xff0c;连接处需要进行处理。 1.在楼板合适的边缘处先画出楼梯 (1)单击“楼梯” (2)在楼梯类型属性对话框中修改楼梯属性 (3)绘制楼梯 为了定位方便、准确&#xff0c;首先要…

重塑底层逻辑,涅槃重生继续远航

背景介绍 从贫困县爬出来本硕均为211学校&#xff0c;在机械专业学习7年&#xff0c;有4年的时间热衷于编程学习。因此一路跨行到IT行业。 履历介绍 从毕业后一直在AI算法行业研究&#xff0c;呆过初创公司&#xff0c;目前在上市公司上班。尝尽IT的苦也吃过IT的甜。从毕业一…

【jQuery】常用API——jQuery效果

jQuery 给我们封装了很多动画效果&#xff0c;最为常见的如下&#xff1a;一、显示隐藏切换效果1. 显示语法规范 show([speed,[easing],[fn]]);显示参数&#xff1a;&#xff08;1&#xff09;参数都可以省略&#xff0c; 无动画直接显示。&#xff08;2&#xff09;speed&…

el-date-picker日期时间组件 报 placement 警告的解决方法

在使用el-date-picker组件时报这个警告&#xff0c;虽然不影响页面&#xff0c;但一打开页面跳出来一堆错误警告&#xff0c;实在受不了 解决办法&#xff1a;加上以下一行即可

无序字母对 -- 欧拉回路

洛谷&#xff1a;P1341 无序字母对题目描述前置知识欧拉路径定义判断是否为欧拉图思路code参考题目描述 题目描述 给定 n 个各不相同的无序字母对&#xff08;区分大小写&#xff0c;无序即字母对中的两个字母可以位置颠倒&#xff09;。请构造一个有 (n1) 个字母的字符串使得每…

同源、跨域的概念与实现

本文将结合周老师的讲义对同源与跨域这一前端经典问题进行系统的总结、整理。一起来坐牢&#xff0c;快&#xff01; 1. 同源限制 1.1 历史背景 - 含义的转变 1995年&#xff0c;同源政策由 Netscape 公司引入浏览器。目前&#xff0c;所有浏览器都实行这个政策。 最初&…

爬虫代理Scrapy框架详细介绍4

Scrapy 框架 Scrapy实例 下载安装 pip install scrapy Hello World 创建工程 在 cmd 下切换到想创建 scrapy 项目的地方&#xff0c;然后使用命名 scrapy startproject tutorial 注&#xff1a;tutorial 为工程名 然后就会发现在当前位置会多出一个文件夹&#xff0c;名字是 tu…

C++——map|set介绍

目录 关联式容器 set set的构造 set的迭代器 set的容量 set修改操作 equal_range multiset map map的构造 map的迭代器 map的容量与元素访问 map测试 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、…

Linux内核权限提升漏洞

SSRF检测的一些思考 DNS平台没有立刻收到请求&#xff0c;是在之后的某个时间段收到了不同的请求信息&#xff0c;这至少表明了一点&#xff0c;此处存在有无回显的SSRF&#xff0c;虽然想要证明有更大的危害比较困难&#xff0c;但是至少说明了存在有SSRF的风险&#xff0c;所…

Maven 命令之将本地 Jar 包安装到 Maven 本地仓库

1、前言 Maven 是 Java 平台下的一款项目构建和依赖管理的自动化管理工具。 通过 Maven 远程仓库地址我们可以方便的管理 Jar 依赖包&#xff0c;但是在实际项目中有时候存在远程仓库中没有的 Jar 包&#xff0c;我们在项目中又必须要使用它&#xff0c;那就需要把本地 Jar 添…

HC-SR04超声波传感器使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、关于HC-SR04二、使用步骤1.确保驱动已经安装2.安装GPIO工具3.安装GPIO的Python支持4.Python3代码总结前言 最近在做一个项目&#xff0c;需要用到超声波传感…