当前位置: 首页 > news >正文

2012系统 做网站/广州白云区疫情实时动态

2012系统 做网站,广州白云区疫情实时动态,wordpress配置文件修改,想象力网站建设Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念(POM),Maven 可以从中央信息中管理项目的构建,报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…

Maven 快速入门

1.Maven 全面概述

Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念(POM),Maven 可以从中央信息中管理项目的构建,报告和文档。

2.Maven 基本功能

因此实际上 Maven 的基本功能就是作为 Java 的项目包管理器,可以快速配置项目的依赖并且进行版本配置管理,其配置的理念是基于项目对象模型 project object model。具体来说,Maven 回使用 pom.xml 这种项目描述文档来描述一个项目以及对应的依赖。

然后再基于这份文档,使用 maven 的命令行工具进行依赖管理即可,类似 CppVcpkg 工具、PythonPip 工具…

3.Maven 使用教程

3.1.下载安装

在安装之前,由于 MavenJava 工具,您必须先保证下载好 Java 才能继续安装 Maven

# 下载安装
# 检查 Java 的版本
$ java --version
openjdk 17.0.13 2024-10-15
OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu124.04)
OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu124.04, mixed mode, sharing)# 拉取二进制压缩包并且解压查看
$ wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.zip
$ unzip apache-maven-3.9.9-bin.zip$ cd apache-maven-3.9.9/
$ ls
bin  boot  conf  lib  LICENSE  NOTICE  README.txt# 把二进制可执行文件目录添加到 PATH 环境变量中
$ vim ~/.bashrc && cat ~/.bashrc
# ...
$PATH=<maven_path>:$PATH # 请将 maven# 检查是否安装成功
$ mvn -v
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /home/ljp/tools/maven/apache-maven-3.9.9
Java version: 17.0.13, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-51-generic", arch: "amd64", family: "unix"

3.2.可选配置

  • MAVEN_ARGS 环境变量(操作 MVC 的参数)Maven 3.9.0 开始,此变量包含传递给 Maven 的参数,优先于用户的命令行参数。例如,可以通过 -B -V checkstyle:checkstyle 定义选项和目标。其中 -B 表示跳过交互式提示,-V 表示显示 Maven 的版本信息,checkstyle:checkstyle 是一个目标任务,表示运行 Checkstyle 插件进行代码检查。

  • MAVEN_OPTS 环境变量(操作 JVM 的参数) 该变量包含用于启动 Maven 所需的 JVM 参数,可以用来向 JVM 提供额外的选项。例如,JVM 的内存设置可以通过 -Xms256m -Xmx512m 来定义。

  • settings.xml 文件 settings.xml 用于存储跨项目的 Maven 配置,通常存储在两个目录中

    • 用户级别配置目录 $USER_HOME/.m2/settings.xml
    • 全局级别配置目录 $MAVEN_HOME/conf/settings.xml

    您可以稍微查看一下全局级别配置文件,稍微了解一下,当存在用户级别配置文件时,就会优先使用用户级别配置文件。

    <!-- settings.xml -->
    <?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"><!-- 配置本地仓库| 配置 Maven 下载好后的依赖存储目录|| 默认值: ${user.home}/.m2/repository<localRepository>/path/to/local/repo</localRepository>--><!-- 配置交互模式| 配置 Maven 是否运行过程和用户交互| | 默认值: true<interactiveMode>true</interactiveMode>--><!-- 配置离线模式| 配置 Maven 是否直接在本地获取依赖|| 默认值: false<offline>false</offline>--><!-- 配置插件小组| 配置 Maven 配置插件的查询地址标识|| 默认值: 无默认值|--><pluginGroups><!-- pluginGroup<pluginGroup>com.your.plugins</pluginGroup>--></pluginGroups><!-- 配置代理服务| 配置 Maven 访问外部仓库时代理服务|| 默认值: 无默认值|--><proxies><!-- proxy<proxy><id>optional</id><active>true</active><protocol>http</protocol><username>proxyuser</username><password>proxypass</password><host>proxy.host.net</host><port>80</port><nonProxyHosts>local.net|some.host.com</nonProxyHosts></proxy>--></proxies><!-- 配置本机认证| 配置 Maven 访问远端仓库的认证信息|--><servers><!-- server 使用密码<server><id>deploymentRepo</id><username>repouser</username><password>repopwd</password></server>--><!-- server 使用密钥<server><id>siteServer</id><privateKey>/path/to/private/key</privateKey><passphrase>optional; leave empty if not used.</passphrase></server>--></servers><!-- 配置镜像地址| 配置 Maven 镜像地址提高下载速度||--><mirrors><!-- mirror<mirror><id>mirrorId</id><mirrorOf>repositoryId</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://my.repository.com/repo/path</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><!-- 配置特定设置| 配置 Maven 根据标识激活特定设置| 例如使用 -D env=dev 就可以触发 name=env value=dev 所对应的 activation 设置||--><profiles><!-- profile<profile><id>env-dev</id><activation><property><name>target-env</name><value>dev</value></property></activation><properties><tomcatPath>/path/to/tomcat/instance</tomcatPath></properties></profile>--><!-- profile<profile><id>jdk-1.4</id><activation><jdk>1.4</jdk></activation><repositories><repository><id>jdk14</id><name>Repository for JDK 1.4 builds</name><url>http://www.myhost.com/maven/jdk14</url><layout>default</layout><snapshotPolicy>always</snapshotPolicy></repository></repositories></profile>--></profiles><!-- activeProfiles| 配置 Maven 平时默认激活特定设置|<activeProfiles><activeProfile>填写上面定义的 value</activeProfile><activeProfile>可以继续填写...</activeProfile></activeProfiles>-->
    </settings>
  • .mvn 目录 位于 Maven 项目的顶级目录中,一般包含三个文件

    • .mvn/maven.configMaven 3.3.1+ 开始,可以通过 .mvn/maven.config 文件简化 Maven 命令行参数的设置(每个参数最好直接单独一行),这样就不再需要使用 MAVEN_ARGS

    • .mvn/jvm.configMaven 3.3.1+ 开始,可以通过 .mvn/jvm.config 文件为每个项目定义 JVM 配置(每个参数最好直接单独一行),这样就不再需要使用 MAVEN_OPTS

    • .mvn/extensions.xml 过去的做法(直到 Maven 3.2.5)是创建一个 JAR 文件并将其手动放入 ${MAVEN_HOME}/lib/ext 目录中,或者通过 mvn -Dmaven.ext.class.path=extension.jar 命令行选项来加载扩展。现在可以通过定义 .mvn/extensions.xml,一般实际开发中用来拓展 Maven 核心功能的,和 settings.xml 作用还是有很大不同的,不要混淆一谈,有需要了解一下即可(修改后可用 mvn help:effective-settings 进行配置检查)。

[!IMPORTANT]

补充:不过一般情况下,我们无需改动以上的环境变量和配置文件。

  • 对于环境变量一般使用 .mvn/maven.config.mvn/jvm.config 来替代,这样每一个项目配置起来比较灵活
  • 一般也用不到 .mvn/extensions.xml 这种需要拓展 Maven 功能。
  • 而对于经过正常魔法手段的网络环境下,一般也无需配置 settings.xml,使用默认的即可,如果需要修改,一般也只有以下三个个人开发者需求(最好只修改用户级别的 settings.xml 配置文件)
    • 可能需要改动依赖存储的目录,以避免系统磁盘占用过多,只需要改动 <localRepository> 标签即可
    • 可能需要改动网络代理的配置,以使用魔法阵来健康上网,只需要改动 <proxy> 标签即可
    • 可能需要配置一些插件,后续使用 Maven 管理的 Java 项目(这里指专门开发 Maven 插件的 Java 项目)开发完毕后进行 mvn install 后会把插件安装到本地仓库 ~/.m2/repository/ 中,此时需要使用这里面的插件标签来标识该插件以简化命令行的使用

因此总结来说,使用 .mvn/maven.config.mvn/jvm.configsettings.xml 的概率是最大的。

另外,一般开发环境使用 mvn 的命令行多一些,因为命令行的可选参数优先级最高,可以覆盖 .mvn/maven.config.mvn/jvm.config 这两个配置文件。而测试环境、生产环境一般使用 .mvn/maven.config.mvn/jvm.config 这两个配置文件会多一些,因为更加方便。

3.3.常用指令

这里先列出并且大概说下 mvn 工具的常见指令。

  • mvn [options] [<goal(s)>] [<phase(s)>] 使用通用的
    • options 可选参数,比如 -Dproperty=value(设置属性)、-X(启用调试模式)等
    • goal 具体目标,通常是指执行某些自定插件
    • phase 生命阶段,通常是指生命周期内的阶段
  • mvn -h 可以查询相关的指令帮助
  • mvn verify 最为典型的指令调用

[!IMPORTANT]

补充:Maven 生命周期是一套预定义的 phases, 构建阶段,确保项目按照既定顺序进行构建。Maven3Lifecycle, 生命周期,分别是

  • clean(“清理” 生命周期),包含多个阶段。本生命周期内,在执行某个阶段时,会自动执行该阶段前面的所有阶段
    • pre-clean:执行清理前的操作
    • clean:删除 target/ 目录
    • post-clean:执行清理后的操作
  • default(“构建” 生命周期),包含多个阶段。本生命周期内,在执行某个阶段时,会自动执行该阶段前面的所有阶段
    • validate 验证项目是否正确,并检查 pom.xml 配置
    • compile 编译源码(src/main/java)到 target/classes
    • test 运行单元测试(基于 src/test/java),不过有时可以使用 mvn clean package -DskipTests 跳过测试阶段
    • package 将编译后的代码打包(如 jarwar
    • verify 运行集成测试,确保打包的应用正常
    • install 安装 jar/war 到本地仓库下(~/.m2/repository/),一般会安装一些项目,比如自定义的插件项目和其他的服务项目,以方便别的项目进行本地依赖
    • deploy 发布 jar/war 到远程仓库(如 Nexus
  • site(“文档” 生命周期),包含多个阶段。本生命周期内,在执行某个阶段时,会自动执行该阶段前面的所有阶段
    • pre-site:执行文档生成前的任务
    • site:生成 HTML 文档
    • post-site:执行文档生成后的任务
    • site-deploy:发布站点到服务器

而在 pom.xml 中的 plugin, 插件 标签可以绑定到特定阶段,扩展构建过程。也就是说,您可以在 Maven 的构建过程中,插入额外的任务(例如代码生成、代码检查、打包方式自定义等),以干预生命周期的行为。

3.4.代码实践

3.4.1.编写普通 Maven 项目
3.4.1.1.创建项目
# 创建项目
$ mvn archetype:generate -DgroupId=com.work -DartifactId=work-maven-test -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false# archetype:generate 是插件中定义的目标, 用来基于模板生成新项目结构
# -DgroupId 指定本项目的 groupId, 就是公司域名的倒写
# -DartifactId 指定本项目的 artifactId, 就是本项目的具体名称
# -DarchetypeArtifactId 指定本项目的 archetypeArtifactId, 就是生成本项目所使用的项目模板
# -DarchetypeVersion=1.5 指定本项目的 archetypeVersion, 就是所使用的 Archetype 模板的版本
# -DinteractiveMode=false 表示禁用交互模式, 避免用户手动输入, 转为让 Maven 自动进行配置填充参数
# 以下是上述指令的运行结果...[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.1.0/maven-antrun-plugin-3.1.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.1.0/maven-antrun-plugin-3.1.0.pom (9.1 kB at 7.6 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.1.0/maven-antrun-plugin-3.1.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/3.1.0/maven-antrun-plugin-3.1.0.jar (41 kB at 74 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.7.1/maven-assembly-plugin-3.7.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.7.1/maven-assembly-plugin-3.7.1.pom (15 kB at 46 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.7.1/maven-assembly-plugin-3.7.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.7.1/maven-assembly-plugin-3.7.1.jar (240 kB at 142 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/3.7.0/maven-dependency-plugin-3.7.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/3.7.0/maven-dependency-plugin-3.7.0.pom (19 kB at 30 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/3.7.0/maven-dependency-plugin-3.7.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/3.7.0/maven-dependency-plugin-3.7.0.jar (207 kB at 41 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/3.0.1/maven-release-plugin-3.0.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/3.0.1/maven-release-plugin-3.0.1.pom (9.8 kB at 16 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/3.0.1/maven-release-3.0.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/3.0.1/maven-release-3.0.1.pom (11 kB at 20 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/3.0.1/maven-release-plugin-3.0.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/3.0.1/maven-release-plugin-3.0.1.jar (61 kB at 36 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml (14 kB at 26 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml (21 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml (1.0 kB at 3.6 kB/s)
[INFO] 
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] >>> archetype:3.3.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO] 
[INFO] <<< archetype:3.3.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO] 
[INFO] 
[INFO] --- archetype:3.3.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
Downloading from central: https://repo.maven.apache.org/maven2/archetype-catalog.xml
Downloaded from central: https://repo.maven.apache.org/maven2/archetype-catalog.xml (16 MB at 18 kB/s)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /home/ljp/data/ljp/test
[INFO] Parameter: package, Value: com.work
[INFO] Parameter: groupId, Value: com.work
[INFO] Parameter: artifactId, Value: work-maven-test
[INFO] Parameter: packageName, Value: com.work
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /home/ljp/data/ljp/test/work-maven-test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  15:25 min
[INFO] Finished at: 2025-02-11T13:07:47+08:00
[INFO] ------------------------------------------------------------------------

然后查看一下创建好的项目中生成的比较重要的项目文件。

# 查看配置好的项目
$ ls
work-maven-test
$ tree work-maven-test
├── pom.xml
└── src├── main│   └── java│       └── com│           └── work│               └── App.java└── test└── java└── com└── work└── AppTest.java10 directories, 3 files
<!-- pox.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.work</groupId><artifactId>work-maven-test</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>work-maven-test</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>
// App.java
package com.work;/*** Hello world!**/
public class App 
{public static void main( String[] args ){System.out.println( "Hello World!" );}
}
// AppTest.java
package com.work;import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;/*** Unit test for simple App.*/
public class AppTest extends TestCase
{/*** Create the test case** @param testName name of the test case*/public AppTest( String testName ){super( testName );}/*** @return the suite of tests being tested*/public static Test suite(){return new TestSuite( AppTest.class );}/*** Rigourous Test :-)*/public void testApp(){assertTrue( true );}
}

[!IMPORTANT]

补充:欸,好像上述的结果和我们直接使用 IDEA 中的内置 Maven 创建的 Java 项目不太一样,原因是因为使用不同的模板,我们使用的模板适合大部分的 Java 项目。

src/main/java 目录包含项目源代码,src/test/java 目录包含测试源,而 pom.xml文件是项目的项目对象模型,主要用于描述本项目(的依赖情况)。

3.4.1.2.编写项目

pom.xml 可能看上去有些许复杂,但是我可以帮助您抽丝剥茧,简化您对该文件的理解难度,因此我对上述的 pom.xml 做了一些修改和注释,以供您理解和作为模板参考。

<!-- 理解 pox.xml -->
<!--'xmlns=' XML 命名空间'xmlns:xsi' XML Schema 实例命名空间'xsi:schemaLocation=' 指定 XML Schema 位置这些声明的主要作用是帮助 XML 解析器正确地验证和处理 Maven POM 文件,确保它符合 Maven 规范。-->
<projectxmlns="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"><!-- 指定 Maven 项目对象模型 POM 的版本 --><modelVersion>4.0.0</modelVersion><!-- 定义项目的所属组织 --><groupId>com.work</groupId><!-- 定义项目的具体名称 --><artifactId>work-maven-test</artifactId><!-- 指定项目构建的打包类型为 .jar --><packaging>jar</packaging><!-- 定义项目的版本号 --><version>v0.1.0</version><!-- 和 artifactId 的名称保持一样即可(这是一个可选字段) --><name>work-maven-test</name><!-- 填写为本项目制定的官方网址 --><url>https://work-maven-test.work.com</url><!-- 填写所有依赖项的容器, 在内部填写一个一个 dependency 标签 --><url>http://maven.apache.org</url><!-- 填写依赖的 Java 版本 --><properties><java.version>17</java.version></properties><dependencies><!-- 依赖名称: 依赖官网/依赖源码 --><!-- Junit: https://junit.org/junit5/ --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope> <!-- 如果不指定 scope 会默认将依赖设置为 compile 生命阶段, 因此设置 scope 本质是确保某些依赖只在某个阶段被使用 --></dependency></dependencies>
</project>

我们引入一个依赖到项目中进行实战,就选择 Google 开发的 Gson 吧,再次修改 pom.xml

<!-- 修改 pom.xml -->
<!--'xmlns=' XML 命名空间'xmlns:xsi' XML Schema 实例命名空间'xsi:schemaLocation=' 指定 XML Schema 位置这些声明的主要作用是帮助 XML 解析器正确地验证和处理 Maven POM 文件,确保它符合 Maven 规范。-->
<projectxmlns="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"><!-- 指定 Maven 项目对象模型 POM 的版本 --><modelVersion>4.0.0</modelVersion><!-- 定义项目的所属组织 --><groupId>com.work</groupId><!-- 定义项目的具体名称 --><artifactId>work-maven-test</artifactId><!-- 指定项目构建的打包类型为 .jar --><packaging>jar</packaging><!-- 定义项目的版本号 --><version>v0.1.0</version><!-- 和 artifactId 的名称保持一样即可(这是一个可选字段) --><name>work-maven-test</name><!-- 填写为本项目制定的官方网址 --><url>https://work-maven-test.work.com</url><!-- 填写依赖的 Java 版本 --><properties><java.version>17</java.version></properties><!-- 填写所有依赖项的容器, 在内部填写一个一个 dependency 标签 --><dependencies><!-- 依赖名称: 依赖官网/依赖源码 --><!-- Junit: https://junit.org/junit5/ --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope> <!-- 如果不指定 scope 会默认将依赖设置为 compile 生命阶段, 因此设置 scope 本质是确保某些依赖只在某个阶段被使用 --></dependency><!-- Gson: https://github.com/google/gson --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.12.1</version></dependency></dependencies>
</project>

然后修改 App.java 文件,在内部使用关于 Gson 的代码进行依赖测试。

// 修改 App.java
package com.work;import com.google.gson.Gson;public class App {public static void main(String[] args) {// 创建一个对象Person person = new Person("John", 30);// 创建Gson实例Gson gson = new Gson();// 将对象转换为 JSON 字符串String json = gson.toJson(person);System.out.println("JSON Output: " + json);// 将 JSON 字符串转换为对象Person personFromJson = gson.fromJson(json, Person.class);System.out.println("Person Name: " + personFromJson.getName());System.out.println("Person Age: " + personFromJson.getAge());}
}class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}

然后清理项目,打包得到我们的 jar 包(跳过测试阶段),最后看看能不能得到预期的结果。

# 查看执行结果
$ mvn clean package -DskipTests
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.work:work-maven-test >----------------------
[INFO] Building work-maven-test v0.1.0
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.pom (13 kB at 11 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.12.1/gson-parent-2.12.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.12.1/gson-parent-2.12.1.pom (27 kB at 38 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.pom (4.3 kB at 17 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.36.0/error_prone_parent-2.36.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.36.0/error_prone_parent-2.36.0.pom (16 kB at 58 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.jar (286 kB at 384 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.jar (19 kB at 77 kB/s)
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ work-maven-test ---
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ work-maven-test ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/ljp/data/ljp/test/work-maven-test/src/main/resources
[INFO] 
[INFO] --- compiler:3.13.0:compile (default-compile) @ work-maven-test ---
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target/classes
[WARNING] 未与 -source 8 一起设置引导类路径
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ work-maven-test ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/ljp/data/ljp/test/work-maven-test/src/test/resources
[INFO] 
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ work-maven-test ---
[INFO] Recompiling the module because of changed dependency.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file with javac [debug target 1.8] to target/test-classes
[WARNING] 未与 -source 8 一起设置引导类路径
[INFO] 
[INFO] --- surefire:3.2.5:test (default-test) @ work-maven-test ---
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.2.5/maven-surefire-common-3.2.5.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/3.2.5/maven-surefire-common-3.2.5.jar (308 kB at 640 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.2.5/surefire-api-3.2.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.2.5/surefire-logger-api-3.2.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.2.5/surefire-extensions-api-3.2.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.2.5/surefire-booter-3.2.5.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.2.5/surefire-extensions-spi-3.2.5.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.2.5/surefire-logger-api-3.2.5.jar (14 kB at 55 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/3.1.1/maven-common-artifact-filters-3.1.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-common-artifact-filters/3.1.1/maven-common-artifact-filters-3.1.1.jar (61 kB at 96 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-spi/3.2.5/surefire-extensions-spi-3.2.5.jar (8.2 kB at 9.6 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.2.5/surefire-shared-utils-3.2.5.jar
Downloaded from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar (501 kB at 417 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/3.2.5/surefire-api-3.2.5.jar (171 kB at 130 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/3.2.5/surefire-booter-3.2.5.jar (118 kB at 85 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-extensions-api/3.2.5/surefire-extensions-api-3.2.5.jar (26 kB at 12 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-shared-utils/3.2.5/surefire-shared-utils-3.2.5.jar (2.4 MB at 1.1 MB/s)
[INFO] Tests are skipped.
[INFO] 
[INFO] --- jar:3.4.1:jar (default-jar) @ work-maven-test ---
[INFO] Building jar: /home/ljp/data/ljp/test/work-maven-test/target/work-maven-test-v0.1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.012 s
[INFO] Finished at: 2025-02-11T15:36:18+08:00
[INFO] ------------------------------------------------------------------------# 找到上述 Build 成功的 jar 所在地
$ ls
pom.xml  src  target$ cd target && ls
classes            generated-test-sources  maven-status  work-maven-test-v0.1.0.jar
generated-sources  maven-archiver          test-classes$ java -jar work-maven-test-v0.1.0.jar
work-maven-test-v0.1.0.jar中没有主清单属性

欸怎么回事?没有主清单属性其实是因为 work-maven-test-v0.1.0.jar 文件中的 META-INF/MANIFEST.MF 文件在打包的时候没有指定启动主类,我们需要自己添加主类位置(或者您使用 jar -xf work-maven-test-v0.1.0.jar 解包后在 META-INF/MANIFEST.MF 中添加 Main-Class: com.example.Main 也是可以的,不过我个人不推荐这么做)。

# 尝试运行 jar 包
$ java -cp "work-maven-test-v0.1.0.jar" com.work.App
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gsonat com.work.App.main(App.java:11)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gsonat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)... 1 more

嗯?怎么找不到 Gson 包,其实是需要我们手动引入才可以,早在使用 package 时就拉取了 Gson.jar 包,找到后一起运行即可。

# 再次尝试运行
$ java -cp "work-maven-test-v0.1.0.jar:/home/ljp/.m2/repository/com/google/code/gson/gson/2.12.1/gson-2.12.1.jar" com.work.App
JSON Output: {"name":"John","age":30}
Person Name: John
Person Age: 30

终于运行成功了,但是每次都需要这么做有些麻烦,有没有便携的方法呢?有!

# 确保在项目根目录下执行下面的指令
$ mvn exec:java -Dexec.mainClass="com.work.App"
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.work:work-maven-test >----------------------
[INFO] Building work-maven-test v0.1.0
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec:3.5.0:java (default-cli) @ work-maven-test ---
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/4.0.2/plexus-utils-4.0.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/4.0.2/plexus-utils-4.0.2.pom (13 kB at 5.7 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.4.0/commons-exec-1.4.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.4.0/commons-exec-1.4.0.pom (9.5 kB at 24 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7.1/asm-9.7.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7.1/asm-9.7.1.pom (2.4 kB at 3.2 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.pom (2.8 kB at 10 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.pom (2.6 kB at 9.4 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/4.0.2/plexus-utils-4.0.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/4.0.2/plexus-utils-4.0.2.jar (193 kB at 82 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.4.0/commons-exec-1.4.0.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7.1/asm-9.7.1.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.jar
Downloading from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.jar (73 kB at 98 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.jar (52 kB at 47 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/commons/commons-exec/1.4.0/commons-exec-1.4.0.jar (66 kB at 57 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.7.1/asm-9.7.1.jar (126 kB at 98 kB/s)
JSON Output: {"name":"John","age":30}
Person Name: John
Person Age: 30
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  8.002 s
[INFO] Finished at: 2025-02-11T16:21:36+08:00
[INFO] ------------------------------------------------------------------------

果然,无需我们做什么,就可以直接借用 mvn 的手来自动配置所有的依赖,可以完全确保跟着 pom.xml 填写配置来自动管理依赖。

[!IMPORTANT]

补充:不过在有些时候不应该借助 mvn 来运行,而应该把所有的依赖都打进 .jar 中,例如生产环境中是几乎不可能安装一个 Maven 在生产环境中的,必须保证 Jave 运行时环境可以直接使用 .jar 包。

对于我们上述的项目来说可以尝试使用 maven-jar-plugin 插件,而对于一些 spring boot 项目中,经常可以看到有人会使用 spring-boot-maven-plugin 插件来把所有的依赖都打进一个 .jar 包中。

<project><!-- 其他的配置标签 --><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><archive><manifestEntries><Main-Class>com.work.App</Main-Class></manifestEntries></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
</project>

这样就可以直接使用 java -jar target/work-maven-test-v0.1.0-jar-with-dependencies.jar 来得到结果了。至于 Spring Boot 项目的,我暂时给出下面的插件配置,但是等您了解了 Spring Boot 的使用时,我们再来进行实验。

<project><!-- 其他的配置标签 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
3.4.2.创建插件 Maven 项目
3.4.2.1.创建项目

接下来我们不再使用命令行的配置,而是转为使用 IDEA 中的集成 Maven 来创建项目(因此默认使用 maven-archetype-webapp 模板来生成项目),实战的同时编写一个插件项目,并且通过生命阶段 install 安装到本地项目中,最好优化使用体验,使得用户可以在 Maven 中使用该插件来执行某一个目标。

我们定义一个额外的插件查找路径,以 prefix:goal 方式执行自定义插件。假设您有一个 Maven 插件,名为 com.work:my-plugin(也就是 Group ID:Artifact ID),其中包含一个 sayhello 目标(goal)。

并且您希望用户能够使用 mvn my:sayhello,而不是完整的 mvn com.work:my-plugin:sayhello

在这里插入图片描述

[!NOTE]

吐槽:目标这个说法我怀疑是来自于 makefile 这些早期的构建工具,每一个目标说白了就是对应一个构建指令。

3.4.2.2.编写项目

首先,您需要一个自定义 Maven 插件 my-plugin,还是像之前一样构建一个项目后,定义我们的 pom.xml

<!-- pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!--'xmlns=' XML 命名空间'xmlns:xsi' XML Schema 实例命名空间'xsi:schemaLocation=' 指定 XML Schema 位置这些声明的主要作用是帮助 XML 解析器正确地验证和处理 Maven POM 文件,确保它符合 Maven 规范。-->
<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 项目对象模型 POM 的版本 --><modelVersion>4.0.0</modelVersion><!-- 定义项目的所属组织 --><groupId>com.work</groupId><!-- 定义项目的具体名称 --><artifactId>my-plugin</artifactId><!-- 指定项目构建的打包类型为 .jar --><packaging>jar</packaging><!-- 定义项目的版本号 --><version>v0.1.0</version><!-- 和 artifactId 的名称保持一样即可(这是一个可选字段) --><name>my-plugin</name><!-- 填写为本项目制定的官方网址 --><url>https://my-plugin.work.com</url><!-- 填写依赖的 Java 版本 --><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- 填写所有依赖项的容器, 在内部填写一个一个 dependency 标签 --><dependencies><!-- 依赖名称: 依赖官网/依赖源码 --><!-- Junit: https://junit.org/junit5/ --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope> <!-- 如果不指定 scope 会默认将依赖设置为 compile 生命阶段, 因此设置 scope 本质是确保某些依赖只在某个阶段被使用 --></dependency><!-- maven-plugin-api: https://maven.apache.org/ref/3.9.9/maven-plugin-api/ --><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>3.8.1</version></dependency></dependencies>
</project>

[!CAUTION]

警告:编写好 pom.xml 后一定要点击下面这个按钮来同步配置。

在这里插入图片描述

注意上面的 pom.xml 中我们引入的 maven-plugin-api 提供了用于开发 Maven 插件的核心 API。利用依赖来实现 sayhello 目标(MyMojo.java),是的你没看错 mvc 的指令是可以使用 Java 来实现的。

不过我还没怎么仔细查阅插件开发文档,以后有需要再补充吧,待补充…

3.5.自搭仓库

自行搭建一个 Maven 仓库,也还没怎么仔细查阅文档,以后有需要再来补充吧,待补充…

相关文章:

业务开发 | 基础知识 | Maven 快速入门

Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念&#xff08;POM&#xff09;&#xff0c;Maven 可以从中央信息中管理项目的构建&#xff0c;报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…...

基于 Python(Flask)、JavaScript、HTML 和 CSS 实现前后端交互的详细开发过程

以下是一个基于 Python&#xff08;Flask&#xff09;、JavaScript、HTML 和 CSS 实现前后端交互的详细开发过程&#xff1a; --- ### 一、技术选型 1. **后端**&#xff1a;Python Flask&#xff08;轻量级Web框架&#xff09; 2. **前端**&#xff1a;HTML/CSS JavaScript&…...

STM32 RCC功能说明 复位和时钟控制RCC

目录 背景 RCC配置时钟主要涉及两方面 程序 第1步、RCC默认初始化 第2步、等待HSE工作稳定 第3步、设置PLL时钟源以及倍频数 第4步、设置AHB总线时钟&#xff08;HCLK&#xff09; 第5步、设置PCLK1(APB1总线) 第6步、设置PCLK2(APB2总线) 第7步、FLASH存储器的配置 …...

Windows可以永久暂停更新了

最终效果图&#xff1a; 第一步&#xff1a; winR组合键打开运行对话框&#xff0c;输入“regedit”&#xff0c;点击“确定”或回车&#xff1a; 第二步&#xff1a; 注册表定位到“\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”&#xff0c;新建DWO…...

高级 Python Web 开发:基于 FastAPI 构建高效实时聊天系统与并发控制

高级 Python Web 开发&#xff1a;基于 FastAPI 构建高效实时聊天系统与并发控制 目录 &#x1f310; WebSocket 实时通讯概述&#x1f4ac; FastAPI 中实现 WebSocket 聊天系统&#x1f527; WebSocket 并发控制与性能优化&#x1f512; WebSocket 安全性与认证机制&#x1…...

深入理解Java虚拟机(JVM)

JVM概述 JVM作用 java虚拟机负责装载字节码到其内部&#xff0c;解释/编译为对应平台上的机器码指令执行&#xff0c;通俗说就是将字节码转换为机器码 JVM内部构造 1、类加载部分&#xff1a;负责把硬盘上的字节码加载到内存中&#xff08;运行时数据区&#xff09; 2、运…...

笔试面试——逻辑题

1.n从1开始&#xff0c;每个操作可以选择对n加1或者对n加倍&#xff0c;若想获得整数2014&#xff0c;最少需要多少个操作。 2.一个池塘&#xff0c;养龙虾若干&#xff0c;请想一个办法尽量准确的估算其中有多少龙虾? 3. S先生&#xff0c;P先生&#xff0c;Q先生他们知道桌子…...

【深度学习入门实战】基于Keras的手写数字识别实战(附完整可视化分析)

​ 本人主页:机器学习司猫白 ok,话不多说,我们进入正题吧 项目概述 本案例使用经典的MNIST手写数字数据集,通过Keras构建全连接神经网络,实现0-9数字的分类识别。文章将包含: 关键概念图解完整实现代码训练过程可视化模型效果深度分析环境准备 import numpy as np impo…...

软考高级《系统架构设计师》知识点(一)

计算机硬件 校验码 码距&#xff1a;就单个编码A:00而言&#xff0c;其码距为1&#xff0c;因为其只需要改变一位就变成另一个编码。在两个编码中&#xff0c;从A码到B码转换所需要改变的位数称为码距&#xff0c;如A:00要转换为B:11&#xff0c;码距为2。一般来说&#xff0c;…...

用大模型学大模型01-制定学习计划

提示词&#xff1a;我想学习大模型&#xff0c;需要AI制定一个完整的学习计划&#xff0c;并给出学习路径和学习资料。以教科书目录的方式给出学习路线 第1章&#xff1a;数学与编程基础&#xff08;4-6周&#xff09; 1.1 数学基础 线性代数&#xff08;矩阵运算、特征值分…...

lvs的DR模式

基于Linux的负载均衡集群软件 LVS 全称为Linux Virtual Server,是一款开源的四层(传输层)负载均衡软件 Nginx 支持四层和七层(应用层)负载均衡 HAProxy 和Nginx一样,也可同时支持四层和七层(应用层)负载均衡 基于Linux的高可用集群软件 Keepalived Keepalived是Linux…...

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…...

【C++学习篇】C++11第二期学习

目录 1. 可变参数模板 1.1 基本语法及原理 1.2 包扩展 1.3empalce系列接⼝ 2. lamba 2.1 lambda的语法表达式 2.2 捕捉列表 2.3 lamba的原理 1. 可变参数模板 1.1 基本语法及原理 1. C11⽀持可变参数模板&#xff0c;也就是说⽀持可变数量参数的函数模板和类模板&…...

TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器

TextWebSocketHandler 和 ServerEndpoint 都可以用于实现 WebSocket 服务器&#xff0c;但它们属于不同的技术栈&#xff0c;使用方式和功能有一些区别。以下是它们的对比&#xff1a; 1. 技术栈对比 特性TextWebSocketHandler (Spring)ServerEndpoint (Java EE/JSR-356)所属框…...

【C++高并发服务器WebServer】-18:事件处理模式与线程池

本文目录 一、事件处理模式1.1 Reactor模式1.2 Proactor模式1.3 同步IO模拟Proactor模式 二、线程池 一、事件处理模式 服务器程序通常需要处理三类事件&#xff1a;I/O事件、信号、定时事件。 对应的有两种高效的事件处理模式&#xff1a;Reactor和Proactor&#xff0c;同步…...

23种设计模式的定义和应用场景-02-结构型模式-C#代码

23种设计模式的定义和应用场景&#xff1a; 1. 创建型模式&#xff08;共5种&#xff09;&#xff1a; 单例模式&#xff08;Singleton&#xff09;、工厂方法模式&#xff08;Factory Method&#xff09;、抽象工厂模式&#xff08;Abstract Factory&#xff09;、建造者模式…...

数据脱敏方案总结

什么是数据脱敏 数据脱敏的定义 数据脱敏百度百科中是这样定义的&#xff1a; 数据脱敏&#xff0c;指对某些敏感信息通过脱敏规则进行数据的变形&#xff0c;实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集…...

自然语言处理NLP入门 -- 第二节预处理文本数据

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;数据的质量直接影响模型的表现。文本预处理的目标是清理和标准化文本数据&#xff0c;使其适合机器学习或深度学习模型处理。本章介绍几种常见的文本预处理方法&#xff0c;并通过 Python 代码进行示例。 2.1 文本清理…...

02.10 TCP之文件传输

1.思维导图 2.作业 服务器代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> …...

基于STM32的ADS1230驱动例程

自己在练手项目中用到了ADS1230&#xff0c;根据芯片手册自写的驱动代码&#xff0c;已测可用&#xff0c;希望对将要用到ADS1230芯片的人有所帮助。 芯片&#xff1a;STM32系列任意芯片、ADS1230 环境&#xff1a;使用STM32CubeMX配置引脚、KEIL 部分电路&#xff1a; 代码…...

Bro想要玩github api

Bro想要在vscode 和 rest client插件的帮助下&#xff0c;修改我的github个人信息 ### 先安装REST client插件 ### 文件名test-github.http ### bro需要自己在github develop setting 获得token ### ref link: https://docs.github.com/en/authentication/keeping-your-accoun…...

idea插件开发,如何获取idea设置的系统语言

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/145578160 版本要求 大于 2024.3 错误用法 网上有的说使用&#xff1a;UIUtil com.intellij.util.ui.UIUtil 代码示例&#xf…...

怎麼使用靜態住宅IP進行多社媒帳號管理

隨著社交媒體平臺的多樣化&#xff0c;很多人發現一個社媒帳號已經無法滿足需求。以下是幾個常見場景&#xff1a; 企業需求&#xff1a;企業可能需要在不同平臺上運營多個品牌帳號&#xff0c;為每個市場地區單獨設立帳號。個人需求&#xff1a;一些自由職業者或內容創作者可…...

InfiniBand与IP over InfiniBand(IPOIB):实现高性能网络通信的底层机制

在现代高性能计算(HPC)和数据中心环境中,网络通信的效率和性能至关重要。InfiniBand(IB)作为一种高性能的串行计算机总线架构,以其低延迟、高带宽和高可靠性而广泛应用于集群计算和数据中心。IP over InfiniBand(IPOIB)则是在InfiniBand网络上实现IP协议的一种方式,它…...

掌握 PHP 单例模式:构建更高效的应用

在 PHP 应用开发中&#xff0c;资源的高效管理至关重要。单例模式是一种能够帮助我们实现这一目标的设计模式。本文将深入探讨单例模式的概念、工作原理以及在 PHP 项目中何时应该&#xff08;或不应该&#xff09;使用它。 什么是单例模式&#xff1f; 单例模式是一种设计模…...

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…...

Python入门全攻略(四)

函数 初识函数 函数&#xff1a;封装具有某种功能的代码块。 函数定义 使用def关键字来定义函数 # 定义函数 def 函数名(): 代码块 # 调用函数 函数名() 函数参数 def 函数名(形参) 代码块 # 调用 函数名(实参) 位置参数 按参数顺序传参 def func(a, b): print(a b)…...

Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)

csdn你…怎么不自动保存了很崩溃啊啊啊啊&#xff0c;我记得发现没保存之后我又改了一遍然后保存了&#xff0c;怎么现在又没了啊啊啊啊&#xff0c;过了这么久我都不记得了啊啊啊啊啊 参考 在 Ubuntu 22.04|20.04|18.04 上安装 OpenLDAP 和 phpLDAPadmin 在 Ubuntu 22.04|20…...

Linux ARM64 将内核虚拟地址转化为物理地址

文章目录 前言一、通用方案1.1 kern_addr_valid1.2 __pa 二、ARM64架构2.1 AT S1E1R2.2 is_kernel_addr_vaild2.3 va2pa_helper 三、demo演示参考资料 前言 本文介绍一种通用的将内核虚拟地址转化为物理地址的方案以及一种适用于ARM64 将内核虚拟地址转化为物理地址的方案&…...

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…...