maven常用插件详解

news2024/12/24 9:48:46

官网讲解:https://maven.apache.org/plugins/

Maven 实际上是一个依赖插件执行的框架,它执行的每个任务实际上都由插件完成的。Maven 的核心发布包(jar)中并不包含任何 Maven 插件,它们以独立构件的形式存在, 只有在 Maven 需要使用某个插件时,才会去仓库中下载。

目录

    • 一、maven-antrun-plugin
    • 二、Maven 生成站点
      • 1、maven-site-plugin(构建简单的站点)
      • 2、maven-javadoc-plugin(生成javadoc文档)
      • 3、maven-checkstyle-plugin(检查代码)
      • 4、maven-jxr-plugin(查看源码)
      • 5、自定义站点外观
    • 三、maven-invoker-plugin
    • 四、maven-surefire-plugin
    • 五、maven-compiler-plugin
    • 六、spring-boot-maven-plugin
    • 七、versions-maven-plugin
    • 八、build-helper-maven-plugin
    • 九、maven-resources-plugin
    • 十、maven-archetype-plugin
    • 十一、flatten-maven-plugin
    • 十二、maven-help-plugin
    • 十三、maven-dependency-plugin

在了解插件前建议先学习一下maven生命周期,不然很多地方会不理解:https://blog.csdn.net/weixin_43888891/article/details/130756192

插件使用的两种类型:

  1. 一种插件是需要绑定到生命周期进行使用的,使用的时候需要引入到项目当中,然后将插件绑定到指定的生命周期,然后执行声明周期命令会自动调用该插件,例如:mvn clean、mvn install
  2. 还有一部分插件可以脱离生命周期单独调用,也就是不需要引入到项目一样可以使用,直接通过如下命令可以直接调用插件。
    • 使用 Maven 命令执行插件的目标,语法如:mvn [插件名]:[目标名]
    • 例如,调用 maven-compiler-plugin 插件的 compile 目标,命令如:mvn compiler:compile(注意不能使用插件的全名,一定是缩写名,不然会报找不到插件)

插件的xml声明结构如下:

<dependencyManagement>
	<dependencies>
		<!--管理依赖版本的-->
	</dependencies>
</dependencyManagement>

<dependencies>
		<!--项目当中真正的要引用的依赖,如果dependencyManagement当中声明了依赖版本,那么在这里可以省略版本号-->
</dependencies>

<build>
	<pluginManagement>        
		<plugins>
			<!--管理插件版本的-->
      	</plugins>
    </pluginManagement>
     <plugins>
         <!--添加插件,如果pluginManagement当中声明了插件版本,那么在这里可以省略版本号-->
          <plugin>
          	  <!--插件坐标-->
              <groupId></groupId>
              <artifactId></artifactId>
              <version></version>
              <!--executions 元素定义了一些执行配置。-->
              <executions>
                  <!--executions 下的每一个 executin 子元素都可以用来配置执行一个任务-->
                  <execution>
                    <!--任务的唯一标识。可以随便自定义 -->
                    <id></id>
                    <!--插件目标需要绑定的生命周期阶段。 -->
                    <phase></phase>
                    <!--用于指定一组插件目标,其子元素 goal 用于指定一个插件目标。 -->
                    <goals>
                    	<goal>run</goal>
                    </goals>
                    <!--该任务的相关配置,至于configuration里面的标签,每个任务的标签可能不一样,具体得看插件 -->
                    <configuration>
						....
                    </configuration>
                  </execution>
              </executions>
          </plugin>
      </plugins>   
</build>  

一、maven-antrun-plugin

官网介绍:https://maven.apache.org/plugins/maven-antrun-plugin/

我们想要在 clean 生命周期的 clean 阶段中显示自定义文本信息,则只需要在项目的 POM 中 ,通过 build 元素的子元素 plugins,将 maven-antrun-plugin:run 目标绑定到 clean 阶段上,并使用该插件输出自定义文本信息即可。

<build>
	<plugins>
        <!-- 绑定插件 maven-antrun-plugin -->
        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-antrun-plugin</artifactId>
              <version>3.0.0</version>
              <executions>
                  <execution>
                    <!--自定义 id -->
                    <id>custom clean</id>
                    <!--插件目标绑定的构建阶段 -->
                    <phase>clean</phase>
                    <!--插件目标 -->
                    <goals>
                    	<goal>run</goal>
                    </goals>
                    <!--配置 -->
                    <configuration>
                      	<!-- 执行的任务 -->
                    	<target>
                        	<!--自定义文本信息 -->
                        	<echo message="清理阶段"/>
                      </target>
                    </configuration>
                  </execution>
              </executions>
          </plugin>
	</plugins>
</build>

执行命令 mvn clean ,结果如下:

插件的运行顺序: 当插件目标绑定到生命周期的不同阶段时,其执行顺序由生命周期阶段的先后顺序决定。如果多个目标绑定到同一个生命周期阶段,其执行顺序与插件声明顺序一致,先声明的先执行,后声明的后执行。

以上我们只是简单使用maven-antrun-plugin:run插件在到达指定的生命周期打印了一段文字,实际我们还可以通过该插件来完成一些特殊工作,例如打包过后自动将包上传到指定位置等等…

二、Maven 生成站点

1、maven-site-plugin(构建简单的站点)

作用:将整个项目的依赖数据生成一个网站,不仅会展示当前项目的依赖,而且还会展示传递依赖、以及依赖版本的管理等等…

maven-site-plugin属于一个maven内置绑定插件,默认就绑定到了site生命周期,所以我们项目当中并不需要引入相关依赖。打开命令行窗口,跳转到 当前项目的目录中,执行如下 mvn 命令:mvn site 就可以生成了。

注意:假如项目特别大的情况下,生成的会非常慢

执行成功以后可以在当前项目target目录下会有一个site目录,这就是生成的站点!

站点生成成功后,我们也可以执行mvn site:run命令运行这个站点。运行的时候会使用 Maven 内置的 jetty 容器来启动。站点启动后,我们可以在浏览器中输入localhost:8080/来浏览该站点。

2、maven-javadoc-plugin(生成javadoc文档)

官网介绍:https://maven.apache.org/plugins/maven-javadoc-plugin/usage.html

在插件的 Usage 页面我们可以看到添加该依赖的方式有两种。

在这里我们使用reporting的方式,将javadoc集成到站点。

<reporting>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-javadoc-plugin</artifactId>
			<version>3.4.1</version>
			<configuration>
				<aggregate>true</aggregate>
			</configuration>
		</plugin>
	</plugins>
</reporting>

此时我们在项目目录下执行 mvn clean site 命令。生成之后会发现站点文档多了一个Project Reports

生成javadoc的时候需要注意,有的测试类可能没有public,需要加上public,不然可能会异常!

点击进来可以看到一共是两个javadoc,一个是test的。

点进来就是这样的,一般实际开发当中很少使用,但是对于开源框架来说javadoc文档是必不可缺的。

3、maven-checkstyle-plugin(检查代码)

checkstyle 插件可以帮助团队中的各个成员来检查编码规范,并生成检查后的报告。我们首先在 pom.xml 文件中加入 checkstyle 插件的依赖:

<reporting>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-checkstyle-plugin</artifactId>
			<version>3.2.2</version>
		</plugin>
	</plugins>
<reporting>	

他跟maven-javadoc-plugin一样,都是可以将报告集成到站点文档当中。待 Maven 下载该插件完成后,执行命令mvn clean site来重新生成站点。执行mvn site:run命令来重新启动站点。启动后,同样是在 Project Reports 目录下,可以看到新生成的 checkStyle 结果。

4、maven-jxr-plugin(查看源码)

Maven 的 jxr 插件是一个很强大的插件,可以随时查看项目的源代码。相同步骤,首先在 pom.xml 文件中加入 jxr 插件的依赖:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jxr-plugin</artifactId>
	<version>3.3.0</version>
	<configuration>
		<aggregate>true</aggregate>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>

他跟maven-javadoc-plugin一样,同样也是可以集成到站点文档当中。待 Maven 下载该插件完成后,重新生成站点,并重启站点,即可在左边的目录中看到新生成的源码目录,点击后即阅读其中的源码。

5、自定义站点外观

默认情况下,如果用户想要自定义站点的外观,需要在src/site目录下创建 site.xml 文件,在该文件中定义其中的参数和配置。

<project name="ximi-mall">
    <!-- 定义左侧banner -->
    <bannerLeft>
        <name>Sonatype</name>
        <src>https://pic.7y7.com/Uploads/Picture/2020-11-05/5fa3aefd70710_600_0.jpg</src>
        <href>http://maven.apache.org/</href>
    </bannerLeft>
    <!-- 定义菜单栏 -->
    <body>
    <menu ref="reports"/>
    </body>
    <!-- 定义皮肤 -->
    <skin>
        <groupId>org.apache.maven.skins</groupId>
        <artifactId>maven-fluido-skin</artifactId>
        <version>1.11.2</version>
    </skin>
</project>

这里,我们简单配置了 site.xml 文件,重新定义了站点的 logo,以及站点的皮肤(skin)。重新打开站点后,样式已经发生了很大的变化。

这里面的皮肤可以直接在 Maven 的官网中找到皮肤列表。在这其中选择自己喜欢的皮肤类型。

三、maven-invoker-plugin

官网介绍:https://maven.apache.org/plugins/maven-invoker-plugin/run-mojo.html

Maven 自动化构建是一种方案,即当某个项目构建完成后(特别是有代码更新的情况下),所有依赖它的相关项目也应该开始构建过程,以确保这些项目的稳定运行。

Maven 的自动化构建主要通过如下两种方案实现:

  • 使用 maven-invoker-plugin 插件。
  • 使用持续集成(CI)服务器自动管理构建自动化,例如 Jenkins (了解即可)。

假如有A、B、C三个项目,其中B和C都引用了A,现在有个需求,在本地构建A的时候,要求连B和C也一块同步构建。

<build>
    <plugins>
        <!-- 添加invoker 插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-invoker-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <debug>true</debug>
                <!--设置 A和B项目 添加的 pom 文件所在的文件夹  -->
                <projectsDirectory>D:\maven</projectsDirectory>
                <!-- 设置 A和B项目 pom 文件 -->
                <pomIncludes>
                    <pomInclude>B\pom.xml</pomInclude>
                    <pomInclude>C\pom.xml</pomInclude>
                </pomIncludes>
            </configuration>
            <executions>
                <execution>
                    <id>id-integration-test</id>
                    <!-- 执行的目标 -->
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • projectsDirectory:需要构建项目的目录,该元素可单独使用,表示该目录下的所有 Maven项目都会在当前项目构建完成后开始构建;
  • pomIncludes:该元素内可以声明一个或多个 pomInclude 元素,需与 projectDirectory 元素配合使用,共同指定需要构建项目的 pom.xml。

通过mvn help:describe -Dplugin=invoker命令可以查看该插件是在哪个声明周期开始执行的以及这个插件有多少个目标。

mvn help:describe -Dplugin=插件标识

maven-invoker-plugin 插件绑定的 Maven 生命周期阶段为 integration-test 及其以后,所以执行 integration-test 阶段及其以后的都可以触发该插件。

四、maven-surefire-plugin

官网介绍:https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html

在default生命周期当中有一个test阶段,也就是只要我们执行mvn package或者mvn install都会经过test阶段,该阶段内置绑定了maven-surefire-plugin插件。

在这里插入图片描述

该插件主要起到的作用是我们在package或者install的时候,他会执行test目录下带有@Test注解的方法。

我们可以通过声明该插件让他跳过单元测试。就算失败了也不让他影响主流程代码的打包。

<plugin>
	 <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <!-- 打包跳过单元测试 -->
     <configuration>
     	<!-- 将其设置为“true”以完全绕过单元测试。 -->
         <skipTests>true</skipTests>
         <!-- 将此设置为“true”以忽略测试期间的失败。不推荐使用,但在某些情况下很方便。 -->
         <testFailureIgnore>true</testFailureIgnore>
     </configuration>
 </plugin>

除了使用插件我们还可以在idea上手动跳过测试

或者是直接使用命令跳过测试:mvn package -DskipTests

五、maven-compiler-plugin

官网介绍:https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html

这个插件也是maven内置绑定插件,编译的时候自动使用该插件,也就是这个插件决定了我们使用的Java版本。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>utf-8</encoding>
        <parameters>true</parameters>
    </configuration>
</plugin>

关于configuration属性讲解

  • source:源代码使用的JRE版本,假如我们什么都不设置他就是根据插件的版本而使用默认的jdk版本,如下图所示。当然也可以通过<maven.compiler.source>标签进行设置JRE版本,目前插件最新版就是3.11。
  • target:需要生成的目标class文件的JRE版本,跟上面的一样,他可以通过<maven.compiler.target>标签指定
  • encoding:字符集编码,可以通过<project.build.sourceEncoding>标签指定
  • parameters:默认为false,设置为true将生成元数据以对方法参数进行反射(这是 官网的介绍)。通过此参数设置true可以获取方法的真实参数名,否则获取到的就是arg0、arg1。springboot的父工程spring-boot-starter-parent就是将parameters设置为了true。
User findUser(String arg0, String arg1);

在实际开发使用当中我们往往不会声明该插件,因为maven自动就绑定了该插件,我只需要指定对应的配置即可。

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

假如使用的是springboot项目,并且继承了spring-boot-starter-parent那我们properties当中什么都可以不配置。spring-boot-starter-parent已经为我们配置好了。

六、spring-boot-maven-plugin

注意上面的插件都是<groupId>org.apache.maven.plugins</groupId>,也就是maven所提供的,而spring-boot-maven-plugin是springboot给我们提供的。

如果不使用该插件我们maven install打出来的jar包是不包含项目所依赖的包的,也就意味着项目根本没法运行。这个插件的版本是随着springboot的版本的。

<build>
    <!-- 打出来的jar包名 -->
    <finalName>consumer-consul</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.10</version>
            <configuration>
            	<!-- 主启动类全类名 -->
                <mainClass>
                    com.gzl.cn.OrderConsulMain80
                </mainClass>
            </configuration>
            <executions>
                <!--插件id,自定义的 -->
                <id>repackage</id>
                <execution>
                	<!--插件目标 -->
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

spring-boot-starter-parent已经给我们做了插件管理,也就是我们项目当中假如需要使用该插件,直接通过如下就可以直接使用:

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

七、versions-maven-plugin

官网介绍:https://www.mojohaus.org/versions/versions-maven-plugin/index.html

versions-maven-plugin插件可以管理项目版本,特别是当Maven工程项目中有大量子模块时,可以批量修改pom版本号,插件会把父模块更新到指定版本号,然后更新子模块版本号与父模块相同,可以避免手工大量修改和遗漏的问题。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.15.0</version>
    <configuration>
		  <generateBackupPoms>false</generateBackupPoms>-->
	 </configuration>
</plugin>

注意:这个插件我们项目当中可以不引用他,直接使用命令就可以。假如项目当中引用了插件并且指定了一些配置,那么使用命令运行会遵循项目当中的配置。

(1)使用插件升级版本,比如这里想升级为0.0.4-SNAPSHOT在顶级目录执行命令

mvn versions:set -DnewVersion=0.0.4-SNAPSHOT

设置generateBackupPoms为false,则直接修改pom,不会生成备份文件,也就不需要使用commit再次确认,但是也无法使用revert命令回退版本号。

假如项目当中引用了上面的插件依赖并且设置了generateBackupPoms为false,那么命令中不需要携带generateBackupPoms=false,也不会生成备份文件。

mvn versions:set -DnewVersion=0.0.4-SNAPSHOT -DgenerateBackupPoms=false

(2)如果想回退可以使用以下命令回退 到备份的pom.xml:

mvn versions:revert

(3)没有问题执行以下命令会删除备份文件 就不能根据备份文件回退了

mvn versions:commit

关于参数:

为了更好的使用插件修改版本号,减少不必要的版本号修改,推荐Maven工程遵循如下规范:

  1. 同一项目中所有模块版本保持一致
  2. 子模块统一继承父模块的版本
  3. 统一在顶层模块Pom的节中定义所有子模块的依赖版本号,子模块中添加依赖时不要添加版本号
  4. 开发测试阶段使用SNAPSHOT
  5. 生产发布使用RELEASE
  6. 新版本迭代只修改父POM中的版本和子模块依赖的父POM版本

八、build-helper-maven-plugin

官网介绍:https://www.mojohaus.org/build-helper-maven-plugin/index.html

这个插件包含各种独立的小目标来帮助Maven的构建生命周期。这里就简单说一下timestamp-property插件目标吧。假如我们要实现打出来的jar包要求加上时间戳,这时候可以通过该插件来完成。

如下是默认jar包命名规则:

<build>
  <finalName>${project.artifactId}-${project.version}</finalName>
</build>

添加如下:

<build>
    <finalName>ProjectName-${build.time}</finalName>
	<plugins>
	<!--打包插件我这里就省略掉了哈-->
	   <plugin>
	       <groupId>org.codehaus.mojo</groupId>
	       <artifactId>build-helper-maven-plugin</artifactId>
	       <version>3.4.0</version>
	       <configuration>
	           <timeZone>GMT+8</timeZone>
	       </configuration>
	       <executions>
	           <execution>
	               <id>timestamp-property</id>
	               <goals>
	                   <goal>timestamp-property</goal>
	               </goals>
	               <configuration>
	                   <!-- 这个name就是自定义的通过${build.time}就可以取到指定格式的日期 -->
	                   <name>build.time</name>
	                   <pattern>yyyyMMdd-HHmmss</pattern>
	                   <timeZone>GMT+8</timeZone>
	               </configuration>
	           </execution>
	       </executions>
	   </plugin>
	</plugins>
</build>

打出来的包如下:

九、maven-resources-plugin

详细讲解:https://blog.csdn.net/weixin_43888891/article/details/130755755

十、maven-archetype-plugin

官网介绍:https://maven.apache.org/archetype/maven-archetype-plugin/

maven-archetype-plugin插件可以帮我们创建maven项目,插件提供了不同类型的项目模板,其中最简单的模板就是 maven-archetype-quickstart,只需要用户提供项目最基本的信息,就能生成项目的基本结构及 POM 文件,在cmd执行如下命令即可创建项目:

mvn archetype:generate -DgroupId=com.gzl.cn -DartifactId=helloMaven -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

经常使用ide来创建项目,一般很少有人知道其实通过命令也是可以创建项目的。

参数说明:

  • -DgroupId: 项目组 ID,通常为组织名或公司网址的反写。
  • -DartifactId: 项目名。
  • -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart 用于快速创建一个简单的 Maven 项目。
  • -DinteractiveMode: 是否使用交互模式。

使用命令创建好的项目如下:

十一、flatten-maven-plugin

springcloud都在使用该插件:https://github.com/alibaba/spring-cloud-alibaba/blob/2021.x/pom.xml

自 Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符。
像这样:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>

  <properties>
	<revision>1.0</revision>
  </properties>
  ...
</project>

或者像这样:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}${sha1}${changelist}</version>
  ...
  <properties>
    <revision>1.0</revision>
    <changelist>-SNAPSHOT</changelist>
    <sha1/>
  </properties>
</project>

可以使用这样的命令:

mvn -Drevision=2.7.8 -Dchangelist=-RELEASE -Dsha1=ssbd clean package

由于properties标签是可以被继承的,所以在子工程当中也可以使用该标签${revision},这样就做到了一处修改处处修改。

但是现在存在一个问题:Install / Deploy 时,子工程当中的版本占位符将不能被替换。这将导致 Install / Deploy 后, maven 不能识别。无法识别的话那他都不知道继承哪个版本的父pom,自然肯定会存在问题!

这个时候就需要通过flatten-maven-plugin来解决这个问题!将如下依赖直接引入到父工程。

<build>
	<plugins>
		<plugin>
		     <groupId>org.codehaus.mojo</groupId>
		     <artifactId>flatten-maven-plugin</artifactId>
		     <version>1.2.7</version>
		     <configuration>
		         <updatePomFile>true</updatePomFile>
		         <flattenMode>resolveCiFriendliesOnly</flattenMode>
		     </configuration>
		     <executions>
		         <execution>
		             <id>flatten</id>
		             <phase>process-resources</phase>
		             <goals>
		                 <goal>flatten</goal>
		             </goals>
		         </execution>
		         <execution>
		             <id>flatten.clean</id>
		             <phase>clean</phase>
		             <goals>
		                 <goal>clean</goal>
		             </goals>
		         </execution>
		     </executions>
		 </plugin>
	</plugins>	 
</build>	

引入依赖后,install的时候会发现会有如下几个文件。实际上这个插件就是在pom的基础上生成一个新的pom,新的pom会把变量给替换成真的值,这样就可以避免上面所说的问题,然后install的时候插件会让maven直接编译他新生成的pom。

这时候再去仓库看看安装好的,会发现已经成功替换了

十二、maven-help-plugin

关于maven-help-plugin我们不需要引用到项目,直接可以调用命令即可,提供的有如下:

  • mvn help:system:用于查看系统属性和环境变量等系统信息
  • mvn help:active-profiles:查看当前激活的profiles
  • mvn help:all-profiles:查看所有profiles
  • mvn help:effective-pom:查看完整的pom信息,详解:https://blog.csdn.net/weixin_43888891/article/details/130483451
  • mvn help:effective-settings:查看构建的时候使用的镜像相关信息

十三、maven-dependency-plugin

关于maven-dependency-plugin我们也不需要引用到项目,直接可以调用命令即可,提供的有如下:

  • mvn dependency:list:查看已解析依赖,也就是项目当中可以使用的
  • mvn dependency:tree:看到依赖树
  • mvn dependency:analyze :查看项目当中引用的依赖哪些使用到了,哪些没有使用到

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

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

相关文章

数据翻译的代码辅助插件,一个注解搞定,减少30%SQL代码量

一、开源项目简介 Easy Trans是一款用于做数据翻译的代码辅助插件&#xff0c;利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能力自动查表&#xff0c;让开发者可以快速的把ID/字典码 翻译为前端需要展示的数据。 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概…

CTF入门指南

何为CTF &#xff1f; CTF&#xff08;Capture The Flag&#xff09;夺旗比赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)

文档关键信息提取形成知识图谱&#xff1a;基于NLP算法提取文本内容的关键信息生成信息图谱&#xff08;含pyltp安装使用教程&#xff09; 1. 项目介绍 目标&#xff1a;输入一篇文档&#xff0c;将文档进行关键信息提取&#xff0c;进行结构化&#xff0c;并最终组织成图谱组…

Cisco® Catalyst® 8000V 边缘软件 (Catalyst 8000V) 17.11.1a 发布 - 虚拟路由器

Cisco Catalyst 8000v Edge Software, IOS XE Release Dublin-17.11.1a ED 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-8000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Catalyst 8000V 边…

Spark集群的运行基本流程是怎样的?

Spark集群的运行架构 Spark是基于内存计算的大数据并行计算框架&#xff0c;比MapReduce计算框架具有更高的实时性&#xff0c;同时具有高效容错性和可伸缩性&#xff0c;在学习Spark操作之前&#xff0c;首先介绍Spark运行架构&#xff0c;如图所示。 在上图中&#xff0c;Sp…

asp网站Repuest获取Http网络读卡器刷卡数据Response回应驱动读卡器显示响声

RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 中文液晶显示http协议网络读卡器是一款能利用现有的计算机网络&#xff0c;不需要独立布线就可以组成一个高性能低成本实时联网ID卡管理系统的端终设备&#xff0c;刷卡后即时向远程计算机传…

快递业的最新发展趋势:2023年市场预测

快递业是随着电子商务崛起而迅速发展的行业之一。自从互联网取代了线下商业模式&#xff0c;电子商务的发展成为了现代零售业的主要趋势&#xff0c;而快递业则变得越来越重要和不可或缺。未来的快递业需要应对许多挑战和机遇。 在2023年&#xff0c;快递业将进一步走向数字化、…

淘宝商品分类详情API接口

淘宝商品分类详情API接口&#xff0c;是指淘宝开放平台提供的接口&#xff0c;用于获取淘宝商品分类的详细信息&#xff0c;包括分类ID、分类名称、父级分类ID、子分类ID等。 具体使用方法如下&#xff1a; 获取淘宝开放平台的API请求地址和appkey等必要信息&#xff1b; 调用…

云南省地矿测绘院1:500地形免像控项目分享

无人机航测系统的出现&#xff0c;将测绘项目时间由“年”缩短到“月”&#xff0c;但布设相控仍然是一个麻烦而辛苦的工作。尤其是在野外人力难以到达的地方&#xff0c;相控布设更是占据项目时间的绝大部分&#xff0c;野外复杂多变的环境也给作业人员带来很多危险。 所以&a…

数据结构第四天: Complete Binary Search Tree 【搜索二叉树,完全二叉树】

二叉搜索树 bst 被递归地定义为具有以下属性的二叉树节点的左子树仅包含键小于节点键的节点 a 的右子树节点只包含键大于或等于节点键的节点 左右子树也必须是二叉搜索树 完全二叉树cbt是一棵完全充满可能异常的树从左到右填充的底层现在给定一系列不同的非负整数键&#xff0c…

5.25黄金是延续下跌还是强势反弹?今日如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周四(5月25日)亚市盘中&#xff0c;现报1957.89美元/盎司&#xff0c;昨日最高触及1985.28美元/盎司&#xff0c;最低触及1956.68美元/盎司。周三公布的会议纪要显示…

web自动化测试进阶篇03 ———自动化并发测试应用

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

选择小程序第三方开发框架时,需要考虑哪些因素?

在选择小程序第三方开发框架时&#xff0c;我们需要综合考虑开发者技术栈、项目需求和目标平台等因素。Taro 是一个多端统一开发框架&#xff0c;适合需要覆盖多个平台的开发者&#xff0c;最终的选择应该基于个人的技术背景和项目需求&#xff0c;同时也要关注框架的稳定性、社…

如何解决接口幂等性问题?

什么是幂等性&#xff1f; 参考地址&#xff1a;解决幂等问题 概念&#xff1a; 一个接口&#xff0c;不管我调多少次&#xff0c;只要参数不变&#xff0c;结果也应该不变。 但是在实际工作中&#xff0c;幂等性一般分为两种&#xff1a; 请求幂等&#xff1a;每次请求&…

Linux的学习

学习笔记&#xff0c;只写重点&#xff0c;不连贯&#xff0c;写得很水。 视频from:2021韩顺平 一周学会Linux。学习地址&#xff1a;https://www.bilibili.com/video/BV1Sv411r7vd 老师说明&#xff1a;后面我们的Redis、ginx包括项目都会使用到Linux,也是和我讲解的Linux版本…

开源网安受邀参加2023澳门万讯论坛,引领软件安全领域国产化替代浪潮

近日&#xff0c;2023万讯论坛在澳门成功举办。本次论坛由万讯电脑科技主办&#xff0c;旨在为澳门引入更多具有市场竞争力且自主研发的国内科技产品。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;受邀参加本次论坛并分享软件安全领域国产化替代方案。 随着全球通…

Typescript ?问号的几种不同用法

1、作为Typescript 接口属性数量不确定时的定义方法 如果使用接口来限定了变量或者形参, 那么在给变量或者形参赋值的时候, 赋予的值就必须和接口限定的一模一样才可以, 多一个或者少一个都不行。 但是开发中我们往往可能会遇到少一个或者多一个的场景。 &#xff08;1&#…

Springboot +spring security,如何解决Session共享问题

一.简介 前一篇文章的所有的会话都是基于单机&#xff0c;如果服务部署在集群中&#xff0c;就会出现session失效的问题&#xff0c;为什么在集群环境下会出现session失效呢&#xff1f; 二.集群环境下session失效的原因 当用户第一次访问项目时&#xff0c;是机器1处理了登…

Kubernetes1.22.0 部署 metricis-service

概述 Install cfssl cat > proxy-client-csr.json<<EOF {"CN": "aggregator","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN",&quo…

SVD求解两组多维点之间的欧式变换矩阵,及halcon代码实现

之前研究了二维点的仿射变换&#xff0c;用解矩阵的方式求解了两组二维点之间的变换矩阵。 学习了下SVD&#xff0c;看到可以用SVD求解两组多维点之间的欧式变换矩阵&#xff0c;当然也是个最优化问题。 这里的变换只有平移和旋转&#xff0c;没有缩放。 一、先说结论&#…