[maven] maven 简述及使用 maven 管理单个项目

news2024/11/24 1:21:33

maven 简述及使用 maven 管理单个项目

简单的说就是 maven 是一个项目管理工具,同时也是一个依赖管理工具。

使用 maven 生成的项目结构大致如下:

project
  |- src/main/java
  |- src/main/resources
  |- src/test/java
  |- src/test/resources

本篇笔记带一些核心重点和在 maven 中创建一个项目

使用 maven 创建项目及一些关键点

创建&安装&运行

创建 maven 项目

这里主要是用终端运行,指令包括构建 maven 项目、查看 pom 文件以及显示 maven 项目的结构,如下:

❯ mvn archetype:generate -DgroupId=com.goldenaarcher -DartifactId=hellomaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# 如果是第一次下载会花一点时间
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/usr/study/maven
[INFO] Parameter: package, Value: com.goldenaarcher
[INFO] Parameter: groupId, Value: com.goldenaarcher
[INFO] Parameter: artifactId, Value: hellomaven
[INFO] Parameter: packageName, Value: com.goldenaarcher
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/usr/study/maven/hellomaven
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  34.244 s
[INFO] Finished at: 2023-09-11T08:18:15-04:00
[INFO] ------------------------------------------------------------------------

# 查看 pom 文件cat hellomaven/pom.xml
<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>
  <groupId>com.goldenaarcher</groupId>
  <artifactId>hellomaven</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hellomaven</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

# 查看项目结构
❯ tree hellomaven
hellomaven
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── goldenaarcher
    │               └── App.java
    └── test
        └── java
            └── com
                └── goldenaarcher
                    └── AppTest.java

10 directories, 3 files

artifactId 和项目名相同,指令做什么后面会进行解释

安装

这里主要是将 repositories 上的依赖打包下载到本地的 .m2 文件夹中,然后再根据 pom 文件进行管理:

❯ mvn install
[INFO] Compiling 1 source file to /Users/usr/study/maven/hellomaven/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.731 s
[INFO] Finished at: 2023-09-11T09:35:01-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project hellomaven: Compilation failure: Compilation failure:
[ERROR] Source option 5 is no longer supported. Use 7 or later.
[ERROR] Target option 5 is no longer supported. Use 7 or later.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这其中会出现一些小问题,主要是默认的 java 版本太老(5),现在已经不支持,所以要根据项目安装并配置对应的 java 版本。这里的 pom 文件会在 properties 里面配置 java 的版本:

<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>
  <groupId>com.goldenaarcher</groupId>
  <artifactId>hellomaven</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hellomaven</name>
  <url>http://maven.apache.org</url>
  <!-- 这里指定 java 版本 -->
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

然后重新安装:

❯ mvn install
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hellomaven ---
[INFO] Building jar: /Users/usr/study/maven/hellomaven/target/hellomaven-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ hellomaven ---
[INFO] Installing /Users/usr/study/maven/hellomaven/target/hellomaven-1.0-SNAPSHOT.jar to /Users/usr/.m2/repository/com/goldenaarcher/hellomaven/1.0-SNAPSHOT/hellomaven-1.0-SNAPSHOT.jar
[INFO] Installing /Users/usr/study/maven/hellomaven/pom.xml to /Users/usr/.m2/repository/com/goldenaarcher/hellomaven/1.0-SNAPSHOT/hellomaven-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.128 s
[INFO] Finished at: 2023-09-11T09:38:45-04:00
[INFO] ------------------------------------------------------------------------

❯ tree hellomaven
hellomaven
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── goldenaarcher
│   │               └── App.java
│   └── test
│       └── java
│           └── com
│               └── goldenaarcher
│                   └── AppTest.java
└── target
    ├── classes
    │   └── com
    │       └── goldenaarcher
    │           └── App.class
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    ├── hellomaven-1.0-SNAPSHOT.jar
    ├── maven-archiver
    │   └── pom.properties
    ├── maven-status
    │   └── maven-compiler-plugin
    │       ├── compile
    │       │   └── default-compile
    │       │       ├── createdFiles.lst
    │       │       └── inputFiles.lst
    │       └── testCompile
    │           └── default-testCompile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    ├── surefire-reports
    │   ├── TEST-com.goldenaarcher.AppTest.xml
    │   └── com.goldenaarcher.AppTest.txt
    └── test-classes
        └── com
            └── goldenaarcher
                └── AppTest.class

29 directories, 13 files

.m2 在的位置系统不同,目录不同,可以根据自己的系统找找对应的资料

运行

java -cp target/hellomaven-1.0-SNAPSHOT.jar com.goldenaarcher.App com.goldenaarcher.App
Hello World!

最后就使用 java -cp 的指令运行一下打包好的 class 文件即可

plugins & goals & parameters

基础的语法为:plugin-prefix:goal,如 mvn compiler:compile,这里的插件就是 compiler,goal 就是 compile, mvn clean:clean 同理

plugins 是一个或多个相关任务(task)的集合,比如说一直使用的 mvn clean 中的 plugin 就是 maven-clean-plugin,运行 mavn clean 的时候实际上指定的是 maven-clean-plugin 中的 clean goal(也叫 MOJO)

比较常见的 maven goal 有 来自 mmaven-compiler-plugincompilemaven-surefire-plugin 中的 test,来自各种不同插件中的 package(war 和 jar 的插件就不一样),以及上面提到的 clean。

parameters 就是上面使用的如 -DgroupId=com.goldenaarcher,语法为 -D<parameterName>=<value>,这个 param 意思就是指定 groupIdcom.goldenaarcher

lifecycle & phases & goals

POM 是 Project Object Mode,是 maven 最基础的工作组件。

lifecycle

maven 的生命周期有三个:

  • default

    管理项目的部署

  • clean

    管理项目的清理

  • site

    管理项目文档网页的创建

生命周期主要是定义 goal 执行的顺序,以便可以完成特定的 task,官方文档说的更直接,就是说……只要学一点指令 POM 就保证结果令人满意

phase

phase 是 lifecycle 的步骤,每个 phase 代表了生命周期特定的阶段

官方文档中是提供了 default 中的一些 phase,如:

  • validate

    验证项目结构是否正确,所有必要信息是否都有提供

  • compile

    编译源代码

  • test

    更具对应的测试框架执行源码的测试,这段代码不应当被打包到部署中去

    顺便这一步可跳过

  • package

    将编译好的源码和包打包成合适的格式,如 jar、war

  • verify

    执行一些必要的集成测试区保证包的合规性和质量

  • install

    安装所有需要的依赖,这可以是从 central repo 上拉下来的,也可以是本地的项目

  • deploy

    在打包环境下完成,将最终成品包覆知道远程 repo 进行共享

当单独执行某一个 phase 的时候,其前置 phase 也会被执行,如执行 mvn package,它也会先执行 validate, compile, test

与 goal 的关系

每个打包阶段都是由不同的 goal 构成的,但是 goal 具有可以被单独运行的独立性,而不需要单独打包到指定的 lifecycle 中

完成先清理项目,再完成依赖的复制,最后执行打包操作的指令为:

❯ mvn clean dependency:copy-dependencies package

顺便简单说一下 clean,maven 本身会执行 clean 这个生命周期,默认情况下会执行 clean 这个 phase,这个 phase 是被绑定到 maven-clean-plugin:clean,即 插件maven-clean-plugin 上的 clean 这个 goal 上。

对于实际操作上来说,执行 maven-clean-plugin:clean 并不需要调动 clean 这个生命周期,但是反过来是不成立的。

coordinates

coordinates 指的就是一些可以辨识项目的集合,它又以下几个部分组成:

  • groupId

    通常意义上由公司域名+特有的项目名称组成,如 hadoop 的 groupId 就是 org.apache.hadoop

  • artifactId

    打包的 jar 名称,不包含版本,如 hadoop 下的 Common 名称就是 hadoop-common

  • version

    版本呢

  • packaging

    指定项目的类型,如 jar、war 等,不设置的默认值为 jar

repositories

下载包的 central repo 地址, 默认的下载地址为 https://repo.maven.apache.org/maven2/

具体看各个公司,比如我们公司就在 nexus 上做了自己的镜像库

eclipse 中折腾一下 maven

这里用 eclipse,intellij 之后搞,下载了一个 spring 插件后一直要登陆,就横帆……

创建一个新的 maven 项目

  1. 选择新建一个 maven 项目

    在这里插入图片描述

  2. 填写信息,如 maven 项目目录在哪之类的

    在这里插入图片描述

  3. 选择创建的类型,这里用 archetypes-quickstart

    在这里插入图片描述

  4. 填写项目信息

    在这里插入图片描述

    package 的默认名称是 group id + artifact id,可以按需修改

  5. 点击完成

这是命令行上的一些指令:

[[1;34mINFO[m] ----------------------------------------------------------------------------
[[1;34mINFO[m] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[[1;34mINFO[m] ----------------------------------------------------------------------------
[[1;34mINFO[m] Parameter: groupId, Value: com.goldenaarcher.product
[[1;34mINFO[m] Parameter: artifactId, Value: productservices
[[1;34mINFO[m] Parameter: version, Value: 0.0.1-SNAPSHOT
[[1;34mINFO[m] Parameter: package, Value: com.goldenaarcher.product
[[1;34mINFO[m] Parameter: packageInPathFormat, Value: com/goldenaarcher/product
[[1;34mINFO[m] Parameter: package, Value: com.goldenaarcher.product
[[1;34mINFO[m] Parameter: groupId, Value: com.goldenaarcher.product
[[1;34mINFO[m] Parameter: artifactId, Value: productservices
[[1;34mINFO[m] Parameter: version, Value: 0.0.1-SNAPSHOT
[[1;34mINFO[m] Project created from Archetype in dir: /Users/usr/study/maven/productservices
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;32mBUILD SUCCESS[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time:  44.738 s
[[1;34mINFO[m] Finished at: 2023-09-11T11:04:01-04:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m

修改 java 编译版本

默认的 pom 是这样的

<?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.goldenaarcher.product</groupId>
  <artifactId>productservices</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>productservices</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

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

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

可以看到 java 的版本是 1.7,这个就根据项目需求进行修改,可以直接修改 properties 里的版本,或者是用下面这个配置也可以:

        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
          <configuration>
          <release>17</release>
          </configuration>
        </plugin>

随后又见项目选择更新一下 maven 项目即可:

在这里插入图片描述

我是记得有个配置可以自动更新来,不知道是不是记错了

Java 实现

这里不太涉及 maven,带一下就过去了

感兴趣 b 站也好那里也好,找一下 servlet/spring 相关的实现也行……我暂时还没复习到那,复习了再做笔记

创建 Data Access Layer

这里折腾的都是一些 Java 方面的配置

src/main 下的结构如下:

❯ tree productservices/src/main
productservices/src/main
└── java
    └── com
        └── goldenaarcher
            └── product
                ├── dao
                │   ├── ProductDAO.java
                │   └── ProductDAOImpl.java
                └── dto
                    └── Product.java

7 directories, 3 files

完整的代码如下:

  • Product.java

    package com.goldenaarcher.product.dto;
    
    public class Product {
        private int id;
        private String name;
        private String description;
        private int price;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public int getPrice() {
            return price;
        }
        public void setPrice(int price) {
            this.price = price;
        }
    
    }
    
    
  • ProductDAO.java

    package com.goldenaarcher.product.dao;
    
    import com.goldenaarcher.product.dto.Product;
    
    public interface ProductDAO {
    
        void create(Product product);
    
        Product read(int id);
    
        void update(Product product);
    
        void delete(int id);
    }
    
    
  • ProductDAOImpl.java

    package com.goldenaarcher.product.dao;
    
    import com.goldenaarcher.product.dto.Product;
    
    public class ProductDAOImpl implements ProductDAO {
    
        @Override
        public void create(Product product) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public Product read(int id) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void update(Product product) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void delete(int id) {
            // TODO Auto-generated method stub
    
        }
    
    }
    
    

实现 data access layer

package com.goldenaarcher.product.dao;

import java.util.HashMap;
import java.util.Map;

import com.goldenaarcher.product.dto.Product;

public class ProductDAOImpl implements ProductDAO {

	Map<Integer, Product> products = new HashMap<>();

	@Override
	public void create(Product product) {
		products.put(product.getId(), product);
	}

	@Override
	public Product read(int id) {
		return products.get(id);
	}

	@Override
	public void update(Product product) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delete(int id) {
		// TODO Auto-generated method stub

	}

}

更新 JUnit

这里补一下 [JUnit] JUnit5 基础 1 - Junit5 结构 与 断言的使用 里没提到的配置,我之前知道 junit5 是有个合集,不用单独下载三四个依赖,但是找了下自己笔记里没写……

  <dependencies>
    <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
	<dependency>
	    <groupId>org.junit.jupiter</groupId>
	    <artifactId>junit-jupiter-engine</artifactId>
	    <version>5.10.0</version>
	    <scope>test</scope>
	</dependency>
  </dependencies>

版本可以选择用当前最新的稳定更新,或者这个……短期之内应该不会差太多。然后跑下 mvn clean install,有可能也需要更新 maven-surefire-plugin 这个版本去跑对应的测试

重复一下,maven-surefire-plugintest 这个 goal 的插件

执行测试

这里写一点测试主要是为了看下跑 mvn install 会执行测试

package com.goldenaarcher.product.dao;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import org.junit.jupiter.api.Test;

import com.goldenaarcher.product.dto.Product;

public class ProductDAOImplTest {
	@Test
	public void createShouldCreateAProduct() {
		ProductDAO dao = new ProductDAOImpl();
		Product product = new Product();
		product.setId(1);
		product.setName("Iphone");
		product.setDescription("It's awesome");
		product.setPrice(800);

		dao.create(product);

		Product result = dao.read(1);
		assertNotNull(result);
		assertEquals("Iphone", result.getName());
	}
}

结果:

[[1;34mINFO[m] -------------------------------------------------------
[[1;34mINFO[m]  T E S T S
[[1;34mINFO[m] -------------------------------------------------------
[[1;34mINFO[m] Running com.goldenaarcher.product.dao.[1mProductDAOImplTest[m
[[1;34mINFO[m] [1;32mTests run: [0;1;32m1[m, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 s - in com.goldenaarcher.product.dao.[1mProductDAOImplTest[m
[[1;34mINFO[m]
[[1;34mINFO[m] Results:
[[1;34mINFO[m]
[[1;34mINFO[m] [1;32mTests run: 1, Failures: 0, Errors: 0, Skipped: 0[m
跳过测试

命令行的 flag:

❯ mvn install -DskipTests

Eclipse 里的设置:

在这里插入图片描述

这里 user settings 不需要加值,默认会显示 m2 下面的配置文件

执行结果:

[[1;34mINFO[m] [1m--- [0;32mmaven-surefire-plugin:2.22.1:test[m [1m(default-test)[m @ [36mproductservices[0;1m ---[m
[[1;34mINFO[m] Tests are skipped.

创建 Business Obuect Layer

此时的结构:

❯ tree productservices/src/main
productservices/src/main
└── java
    └── com
        └── goldenaarcher
            └── product
                ├── bo
                │   ├── ProductBO.java
                │   └── ProductBOImpl.java
                ├── dao
                │   ├── ProductDAO.java
                │   └── ProductDAOImpl.java
                └── dto
                    └── Product.java

8 directories, 5 files

代码实现:

  • ProductBO.java

    package com.goldenaarcher.product.bo;
    
    import com.goldenaarcher.product.dto.Product;
    
    public interface ProductBO {
    
        void create(Product product);
    
        Product findProduct(int id);
    }
    
    
  • ProductBOImpl.java

    package com.goldenaarcher.product.bo;
    
    import com.goldenaarcher.product.dao.ProductDAO;
    import com.goldenaarcher.product.dao.ProductDAOImpl;
    import com.goldenaarcher.product.dto.Product;
    
    public class ProductBOImpl implements ProductBO {
        private static ProductDAO dao = new ProductDAOImpl();
    
        @Override
        public void create(Product product) {
            dao.create(product);
        }
    
        @Override
        public Product findProduct(int id) {
            return dao.read(id);
        }
    
    }
    
    

添加 spring 依赖

这里也不会过多的折腾配置……下次一定

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>6.0.11</version>
		</dependency>

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

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

相关文章

服务器访问本机图片nginx配置

下面是Nginx的配置 然后是yml文件配置 后端返回给前端的数据直接返回这个地址就可以了 {"success": true,"code": "200","msg": "操作成功","data": [{"趋势": "https://120.26.98.185:8090/s…

Day62|图part1:深度优先搜索理论基础、797. 所有可能的路径

深度优先搜索&#xff08;DFS&#xff09;理论基础 图的实质和存储方式 图实际上就是一棵多叉树&#xff0c;可以用以下的数据结构进行表示&#xff1a; class Vertex {int id;vector<Vertex*> neighbors; };多叉树的&#xff1a; /* 基本的 N 叉树节点 */ class Tre…

第一章 计算机系统概述 八、虚拟机

目录 一、传统虚拟机的结构 二、两类虚拟机管理程序 &#xff08;1&#xff09;定义&#xff1a; &#xff08;2&#xff09;区别&#xff1a;&#xff08;考点&#xff09; 一、传统虚拟机的结构 二、两类虚拟机管理程序 &#xff08;1&#xff09;定义&#xff1a; &…

电子企业MES管理系统实施的功能和流程有哪些

MES生产管理系统是一种应用于电子企业的管理系统&#xff0c;旨在提高生产效率、降低浪费、优化资源利用&#xff0c;并实时监控和改善生产过程。在电子企业中&#xff0c;实施MES管理系统对于实现精细化管理、增强信息互联、提高产品质量和交货期等方面具有重要作用。 一、MES…

模电课设:用Multisim了解三极管特性及计算静态工作点

1 课设内容 1&#xff09;绘制三极管输入特性曲线、输出特性曲线、放大倍数的幅频特性&#xff1b; 2&#xff09;测试三极管放大倍数β与VBE的关系、放大倍数与温度的关系&#xff1b; 3&#xff09;利用Multisim计算静态工作点。 2 模型搭建 电路一&#xff1a;绘制三极管…

字节一面:如何实现单行/多行文本溢出的省略样式?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;作为一名前端开发工程师&#xff0c;css是我们的必备技能&#xff0c;文本溢出问题也是我们经常遇到的问题&#xff0c;我们不仅只是处理这种情况&#xff0c;还要考虑他的…

微信小程序 通过 pageScrollTo 滚动到界面指定位置

我们可以先创建一个page 注意 一定要在page中使用 因为pageScrollTo控制的是页面滚动 你在组件里用 他就失效了 我们先来看一个案例 wxml 代码如下 <view><button bindtap"handleTap">回到指定位置</button><view class "ControlHeight…

证件照电子版怎么做?学会这个方法自己就会做证件照

自己制作证件照的好处在于可以根据需要调整照片的大小、背景颜色以及美颜等设置&#xff0c;以满足不同场景下的使用需求。此外&#xff0c;自己制作证件照还可以更好地保护个人隐私&#xff0c;避免使用公共设备拍摄证件照时泄露个人信息。 总的来说&#xff0c;自己制作证件…

Webpack Sourcemap文件泄露漏洞

Webpack Sourcemap文件泄露漏洞 前言一、Webpack和Sourcemap1.1 什么是Webpack1.2 什么是Sourcemap 二、漏洞利用2.1 使用reverse-sourcemap工具2.1 直接看前端代码 三、漏洞挖掘漏洞修复 前言 Webpack主要是用于前端框架进行打包的工具&#xff0c;打包后形成.js.map文件&…

Revit SDK 介绍:CurtainSystem 幕墙系统

前言 这个例子介绍如何创建和修改幕墙系统。 内容 如图所示&#xff0c;创建一个幕墙系统&#xff0c;这个系统里有三个面。 创建幕墙系统 // 遍历体量元素的几何&#xff0c;得到所有的面&#xff0c;保存在 m_mydocument.MassFaceArray // 获取用户选中的面 FaceArray …

哪种IP更适合你的数据抓取需求?

程序员大佬们好&#xff01;今天我要和大家分享一个关于数据抓取的话题&#xff0c;那就是Socks5爬虫ip和动态IP之间的比较。在进行数据抓取时&#xff0c;选择适合自己需求的工具和技术是非常重要的。Socks5爬虫ip和动态IP都是常见的网络工具&#xff0c;它们在数据抓取方面都…

节能灯与led灯哪个对眼睛好一点?精选好用的led护眼灯

节能灯和led灯相比&#xff0c;肯定是led灯更加护眼一点的。 首先节能灯最大的优点就是节能&#xff0c;可以使用的寿命长。可是和led灯相比&#xff0c;led灯的转换效率会更好一点&#xff0c;也更加节能&#xff0c;可使用寿命也很长。其次节能灯他启动会比较慢&#xff0c;散…

DC电源模块在节省能源方面上的优秀表现

BOSHIDA DC电源模块在节省能源方面上的优秀表现 DC电源模块是现代电子产品中广泛应用的一种电源转换设备&#xff0c;其能够将交流电转换成直流电&#xff0c;并为电子设备提供稳定、可靠的电源供应。相比于传统的交流电源&#xff0c;DC电源模块在节省能源方面上具有优秀的表…

【开发】React框架下如何集成H.265网页流媒体EasyPlayer.js视频播放器?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

人形机器人闭门研讨会报名丨青源Workshop第24期

青源Workshop丨No.24 人形机器人主题闭门研讨会 在全球普遍面临人口老龄化问题的情况下&#xff0c;人形机器人作为一种新兴的技术领域&#xff0c;正逐步在工业、服务、医疗等领域崭露头角&#xff0c;为制造业、农业以及各种服务业带来了新的机遇与解决方案。与传统的工业机器…

激活函数总结(三十二):激活函数补充(Serf、FReLU)

激活函数总结&#xff08;三十二&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Serf激活函数2.2 FReLU激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Softmax、Soft…

iPhone 15 Pro深度评测:猫头虎技术团队揭秘Apple最新航空级钛设计的魅力与创新

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

python-爬虫-requests

安装模块 pip install requests在jupyter notebook里使用ShiftTab查看 requests requests库的主要方法 方法解释requests.requset()构造一个请求&#xff0c;支持以下各种方法requests.get()获取HTML的主要方法requests.head()获取HTML头部信息requests.post()向HTML网页提…

【数据结构】堆排序与TopK问题

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.堆的概念和结构 2.堆的实现 2.1向上调整…

(一)探索随机变量及其分布:概率世界的魔法

文章目录 &#x1f34b;引言&#x1f34b;什么是随机变量&#xff1f;&#x1f34b;离散随机变量&#x1f34b;连续随机变量 &#x1f34b;随机变量的概率分布&#x1f34b;离散概率分布&#x1f34b;0-1分布&#xff08;Bernoulli分布&#xff09;&#x1f34b;二项分布&#…