从零开始学习Maven

news2025/1/14 18:14:08

maven

Maven是apache公司开发的基于项目对象模型(POM) 可以通过一些描述信息来管理项目的构建、报告和文档的软件管理工具。

Maven 是用来管理项目,进行项目构建的一个软件。  java编写

项目构建流程1. 导入jar包  2. 配置文件  3.编写代码  4. 测试  5.部署

maven的好处

使用传统项目开发crm项目,项目大小:

 同样的项目使用maven开发

 同样的代码,实现功能都一样,maven项目如何做到的?可以初步推断maven项目中一定没有jar包。没有jar包的maven项目如何运行?

 

 maven的好处如何实现

maven的两大核心:

**依赖管理:对jar包管理过程

**项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署等一系列的操作都通过命令来实现 

通过maven命令将web项目发布到tomcat:

maven安装、配置本地仓库

安装前提:maven程序是java开发的,它的运行依赖jdk。

maven官网下载:Maven – Download Apache Maven

目录结构:

 

配置环境变量

Jdk环境变量:JAVA_HOME

 将maven_home环境变量配置到path环境变量中

查询maven的版本信息,验证配置成功:

 

配置仓库

本地仓库 :本电脑,通过setting配置

私服仓库:局域网内的服务器,通过pom文件配置

中央仓库:互联网,存放了99%的jar包

国内: 该仓库由阿里公司镜像映射通过setting配置

国外: 该仓库由apache公司维护 【自动找】

Maven默认的远程仓库,URL地址:http://search.maven.org/

配置maven本地仓库信息

 

配置国内镜像仓库

 

maven项目的生命周期maven的常用命令

在maven中存在“三套”生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令前面操作会自动执行

CleanLifeCycle:清理生命周期

         Clean

defaultLifeCycle:默认生命周期

         compile,test,package,install,deploy

siteLifeCycle:站点生命周期

         site

创建相关命令:

mvn archetype:generator :创建 Maven 项目

mvn eclipse:eclipse :生成 Eclipse 项目文件

clean生命周期命令

mvn clean :清除目标目录中的生成结果

default生命周期命令

mvn compile :编译源代码
mvn test 运行应用程序中的单元测试
mvn package 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar

Site生命周期命令

mvn site 生成项目相关信息的网站     

概念模型

两个核心:

**依赖管理:对jar包管理

**项目构建:通过命令进行项目构建 

命令方式创建maven项目

maven创建java项目

先创建一个项目的文件夹名: 例如 maven;

在该文件夹下敲入命令

Mvn archetype:generate -DgroupId=com.kaikeba.test -DartifactId=hello -DpackageName=com.kaikeba.test -Dversion=1.0-SNAPSHOT

注意:高版本的maven不用archetype:create

原因:版本命令冲突,即在maven3.0.5以上版本舍弃了create,使用generate生成项目

maven创建web项目

mvn archetype:generate -DgroupId=com.kaikeba.test -DartifactId=helloapp -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp

第一次构建项目,所有依赖的jar包都要从maven的中央仓库下载,所以需要时间等待。等以后我们的本地仓库中积累了我们常用的jar包后,我们的开发将变得非常规范和方便。

在项目目录下输入

Mvn eclipse:eclipse -DdownloadSources=true

转成eclipse可以导入的maven项目

以IDE(eclipse)方式生成maven项目

安装eclipse的maven 插件

要在 eclipse 中使用 maven,首先需要安装 maven 插件。可以使用 eclipse 的更新管理器,更新地址为

http://m2eclipse.sonatype.org/update/

配置eclipse与maven相关的内容

选择window-->preferences-->输入maven

 

修改installations的参数值:

修改user settings参数值:

在eclipse中创建Maven项目

创建maven相关项目

右键-->new -->other...  或 直接按快捷键 ctrl +N

 

 

如果勾选,就会快速创建一个简单的项目,如果不勾选的话,得选择java项目或web项目的插件

创建java项目(不勾选Create a simple project 时)

 

创建web项目(不勾选 create a simple project 时)

 

maven项目标准目录结构

 

maven整合servlet

 

 

 

创建好的web项目,错误:

  1. web.xml缺失

  1. jdk编译版本1.5,在pom.xml中添加插件

 

  1. 创建servlet,serlvet编译报错,原因:缺失servlet-api-xx.jar包

 

查找依赖

注意:选择依赖选择[jar]

 

依赖范围(了解)

添加依赖范围:默认是compile

Provided: 运行部署到tomcat不在需要

如果将servlet-api.jar设置为compile,打包后包含serlvet-api.jar,war包部署到tomcat跟tomcat中存在servlet-api.jar包冲突。导致运行失败。

 

解决:

 

 

总结:如果使用到tomcat自带jar包,将项目中依赖作用范围设置为:provided,其他可以默认

 

运行项目

tomcat:run

 

调试:

 

Maven整合struts2

1、通过工具生成web.xml

 

 

2、添加struts2的依赖

3、创建struts.xml

4、创建action类

5、在web.xml中配置struts2框架核心过滤器

 

  1. 编写action中方法
  2. 在struts.xml中配置

核心pom文件解析

<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.chongshi.test</groupId>

      <artifactId>hello</artifactId>

      <version>1.0</version>

   <packaging>jar</packaging>



  <name>hello</name>

  <url>http://maven.apache.org</url>



  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>



  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

</project>

Ø projectpom.xml文件中的顶层元素; 
Ø modelVersion
:指明POM使用的对象模型的版本。这个值很少改动。
Ø groupId:指明创建项目的组织或者小组的唯一标识。GroupId是项目的关键标识,典型的,此标识以组织的完全限定名来定义。比如,org.apache.maven.plugins是所有Maven插件项目指定的groupId 

Ø artifactId
指明此项目产生的主要产品的基本名称。项目的主要产品通常为一个JAR文件。第二,象源代码包通常使用artifactId作为最后名称的一部分。典型的 产品名称使用这个格式: <artifactId>- <version>. <extension>( 如:myapp-1.0.jar) 

Ø version
:项目产品的版本号。Maven帮助你管理版本,可以经常看到SNAPSHOT这个版本,表明项目处于开发阶段。 

Ø name
:项目的显示名称,通常用于maven产生的文档中。 

Ø url
:指定项目站点,通常用于maven产生的文档中。 

Ø description
:描述此项目,通常用于maven产生的文档中。

本项目的坐标信息及打包方式

 

【2】属性/常量配置

 

<properties>

        <!--项目字符编码 -->

         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!--自定义项目版本号-->

        <spring.version>4.3.5</spring.version>

 </properties>

【3】依赖配置【核心】

【4】私服配置

 

【5】插件配置

 

maven核心知识

依赖配置

 

 

依赖范围scope

scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

    1.compile 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test:测试依赖范围。只对于测试classpath有效
    3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:运行时提供。例如:jdbc驱动

 

传递依赖

MakeFriends.jar直接依赖于HelloFriends.jar,而HelloFriends.jar又直接依赖于Hello.jar,那么MakeFriends.jar也依赖于Hello.jar,这就是传递性依赖,只不过这种依赖是间接依赖,如下图所示:

 

依赖原则:路径最短优先,第一声明顺序其次。

  1. 间接依赖路径最短优先原则
  2. 第一声明优先原则

有人就问了如果 a-b-c1.0   , d-e-c1.1  这样路径都一样怎么办?

maven会以在pom文件中申明的顺序来选版本,如果pom文件中先申明了d再申明了a,test项目最后依赖的会是c1.1

备注:遇到冲突的时候通过maven的依赖原则来调整坐标在pom文件的申明顺序是最好的办法

3.排除依赖

 <dependencies>

  <dependency>

      <groupId>junit</groupId>     

      <artifactId>junit</artifactId>     

      <version>3.8.1</version>

      <scope>test</scope>

      <exclusions>     

          <exclusion>     

            <groupId>...</groupId>     

            <artifactId>...</artifactId>     

          </exclusion>

    </exclusions>     

  </dependency>        

</dependencies>

4版本锁定

 

Maven常用插件

jdk编译插件:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.3</version>
  <configuration>
     <source>1.8</source>
     <target>1.8</target>
  </configuration>
 </plugin>

Deploy插件

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-deploy-plugin</artifactId>

    <version>3.3</version>

    <configuration>

        <updateReleaseInfo>true</updateReleaseInfo>

    </configuration>

</plugin>

Tomcat插件配置: 自动发布到 tomcat 

步骤一:

在tomcat安装目录下找到tomcat-users.xml文件。该文件路径为【tomcat安装根目录】 /conf/

修改文件内容,增加下列内容:

 tomcat 6

Java代码  

  1. <role rolename="manager"/>  
  2. <user username="tomcat" password="123456" roles="manager"/>  

 tomcat 7

Java代码  

  1. <role rolename="manager-gui"/>
  2. <role rolename="manager-script"/>
  3. <user username="tomcat" password="123456" roles="manager-gui,manager-script"/>  

步骤二:

在你的项目的pom.xml文件中,增加下列<plugin></plugin>中内容:

Java代码  

  1. <build>  
  2.        。。。。。  
  3.         <plugins>  <plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><path>/test</path> <url>http://localhost:8080/manager/</url><server>tomcat</server> </configuration> </plugin>
  4.  
  5.         </plugins>  
  6.     </build>  

 其中username和password就是tomcat中配置的username和password。

里面的server需要在maven的配置文件settings.xml里配置如下:

<server><id>tomcat</id><username>admin</username><password>123456</password></server>

 如果是tomcat7,url需要改成http://localhost:8080/manager/text

Jetty插件

 Jettytomcat一样也属于web容器。Jettymaven中做为一个插件。我们要在pom.xml中添加jetty的插件,才能调用jetty

<project>…</project>标签之间,插入如下信息:

<build>

        <finalName>Struts2Example</finalName>

        <plugins>

            <plugin>

                <groupId>org.mortbay.jetty</groupId>

                <artifactId>maven-jetty-plugin</artifactId>

                <version>6.1.10</version>

                <configuration>

                    <scanIntervalSeconds>10</scanIntervalSeconds>

                    <stopKey>foo</stopKey>

                    <stopPort>9999</stopPort>

                </configuration>

                <executions>

                    <execution>

                        <id>start-jetty</id>

                        <phase>pre-integration-test</phase>

                        <goals>

                            <goal>run</goal>

                        </goals>

                        <configuration>

                            <scanIntervalSeconds>0</scanIntervalSeconds>

                            <daemon>true</daemon>

                        </configuration>

                    </execution>

                    <execution>

                        <id>stop-jetty</id>

                        <phase>post-integration-test</phase>

                        <goals>

                            <goal>stop</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>

在项目目录下执行mvn jetty:jetty   

等插件下载完成后就可以运行jetty了,运行命令:mvn jetty:run 

通过maven整合SSH框架(重点)

搭建struts2环境

  1. 创建strut2配置文件:struts.xml
  2. 在web.xml中配置strut2的核心过滤器
  3. <!-- 配置Struts核心过滤器 -->
    	<filter>
    		<filter-name>struts</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>struts</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    

搭建spring环境

  1. 创建spring配置文件applicationContext.xml
  2. 在web.xml中配置监听器:ContextLoaderListener
<!-- 配置监听器:默认加载WEB-INF/applicationContext.xml -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 通过上下文参数指定spring配置文件路径 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

搭建Hibernate环境

  1. 创建Hibernate核心配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<!-- 会话工厂 -->
	<session-factory>
		<!-- 数据库方言,根据数据库选择 -->
	    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

		<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 是否对日志中输出的sql语句进行格式化 -->
		<property name="hibernate.format_sql">true</property>

		<property name="hibernate.hbm2ddl.auto">update</property>
		
		
	</session-factory>
</hibernate-configuration>

Struts2跟spring整合

整合关键点:action对象创建,交给spring创建

  1. 创建action类
  2. 将action对象配置到spring配置文件中
  3. 在struts.xml中在action节点中class属性配置为spring工厂中action对象bean的id

Spring跟Hibernate框架整合

整合关键点:1、数据源dataSource交给spring   2SessionFactory对象创建交给spring创建   3、事务管理

  1. 配置dataSource
<!-- 加载属性文件 -->		
	<context:property-placeholder location="classpath:db.properties"/>	
		
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
  1. 配置SessionFactory对象
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocations" value="classpath:applicationContext.xml"></property>
	</bean>	
  1. 事务管理
    1. 配置事务管理器: PlatFormTransactionManager:接口
      1. Jdbc:DataSourceTransactionManager
      2. Hibernate:HibernateTransactionManager
<!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

	<!-- xml方式管理事务 -->
	<!-- 配置通知:具体增强逻辑 -->
	<tx:advice id="txAdvice">
		<tx:attributes>
			<!-- 匹配业务类中方法名称 -->
			<tx:method name="save*" />
			<tx:method name="update*" />
			<tx:method name="delete*" />
			<tx:method name="find*" read-only="true"/>
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>
	
	<!-- 配置aop -->
	<aop:config>
		<!-- 配置切点:具体哪些方法要增强(真正被增强的方法)-->
		<aop:pointcut expression="execution(* cn.itcast.service.*.*(..))" id="cut"/>
		<!-- 配置切面:将增强逻辑作用到切点  (通知+切入点) -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
	</aop:config>
	<!-- xml方式管理事务 -->

需求

在地址栏输入action请求:http://locahost:8080/project/customerAction_findOne.action?custId=1,action-service-dao。完成客户查询

具体实现

  1. 创建客户实体类、映射文件、将映射文件引入Hibernate核心配置文件中
  2. 创建action、service、dao。完成注入
    1. 在类中添加属性生成set方法
    2. 在spring配置文件中完成注入

     

3.在struts.xml中配置action,配置结果视图

 

总结:

  1. 页面提交参数,在服务端action接收参数         
  2. 调用业务层方法dao的方法DB           
  3. 将返回的数据存值栈                           
  4. 配置结果视图,跳转页面                       

通过maven对项目进行拆分、聚合(重点)

对现在已有maven ssh项目进行拆分,拆分思路:将dao层的代码已经配置文件全体提取出来到一个表现上独立的工程中。同样service、action拆分。

ssh-parent: 父工程

ssh-dao:(子模块)

ssh-service

ssh-web

拆分完成对拆分后的项目进行聚合,提出概念父工程

创建父工程

 

 

 

创建好父工程目录结构:只有pom.xml,可以推断父工程不进行编码。

  1. 项目需要的依赖的信息,在父工程中定义,子模块继承过程
  2. 将各个子模块聚合到一起

 

将创建父工程发布到本地仓库

将来service、dao工程发布到本地仓库。发布的service工程会报错。

如果忘记此步骤,将父工程发布到本地仓库。

创建子模块ssh-dao

Ssh-dao负责数据访问层:包含dao相关代码&配置文件

 

 

 

将spring的配置文件拆分

 

 

:项目基础的信息

 

:dao层bean对象

创建子模块ssh-service

 

 

 

将ssh-dao工程打包到本地仓库;

在service工程pom.xml文件添加ssh-dao的依赖

单元测试

  1. 批量加载spring配置文件
    1. classpath:spring/applicationContext-*.xml
    2. classpath*:spring/applicationContext-*.xml:既要加载本项目中配置文件,还要加载jar包中配置文件

  1. 传递依赖范围(了解)

 

A:ssh-service 工程

B:ssh-dao工程

C:junit单元测试

总结:当项目中需要的某一个依赖没有传递过来。在自己工程中添加对应依赖就可以。

创建子模块ssh-web:war

在ssh-web项目中添加service工程依赖。

 Web.xml

 

运行方式

Maven方式:

方式1:运行父工程。父工程将各个子模块聚合到一起。将ssh-web打war包发布到tomcat

方式2:直接运行web工程

其他方式:

部署到tomcat

私服应用(了解)

 

私服安装

  1. 下载安装包

 解压到本地磁盘

 使用管理员权限打开dos,在dos下执行命令安装私服

 启动服务

 找到私服的访问url:

http://localhost:8081/nexus/#welcome

登陆:admin/admin123

私服仓库类型

 

Hosted:宿主仓库

         存放本公司开发的jar包(正式版本、测试版本、第三方:存在版权问题--Oracle)

Proxy:代理仓库

         代理中央仓库、Apache下测试版本的jar包

Group:组仓库

         将来连接组仓库。包含Hosted:宿主仓库,Proxy:代理仓库

上传jar包到私服上(应用)

  1. 在maven目录下conf/settings.xml.认证:配置用户名密码
<server>
      <id>releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
	<server>
      <id>snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

 

 

  1. 在将要上传的项目的pom.xml中配置jar包上传路径url
<distributionManagement>
  	<repository>
  		<id>releases</id>
	<url>http://localhost:8081/nexus/content/repositories/releases/</url>
  	</repository> 
  	<snapshotRepository>
  		<id>snapshots</id>
	<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
  	</snapshotRepository> 
  </distributionManagement>

 

  1. 执行命令发布项目到私服(上传)

deploy

 

下载jar包到本地仓库(应用)

  1. 在maven目录下conf/settings.xml。配置模板
<profile>   
	<!--profile的id-->
   <id>dev</id>   
    <repositories>   
      <repository>  
	<!--仓库id,repositories可以配置多个仓库,保证id不重复-->
        <id>nexus</id>   
		<!--仓库地址,即nexus仓库组的地址-->
        <url>http://localhost:8081/nexus/content/groups/public/</url>   
		<!--是否下载releases构件-->
        <releases>   
          <enabled>true</enabled>   
        </releases>   
		<!--是否下载snapshots构件-->
        <snapshots>   
          <enabled>true</enabled>   
        </snapshots>   
      </repository>   
    </repositories>  
	 <pluginRepositories>  
    	<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
        <pluginRepository>  
        	<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
            <id>public</id>  
            <name>Public Repositories</name>  
            <url>http://localhost:8081/nexus/content/groups/public/</url>  
        </pluginRepository>  
    </pluginRepositories>  
  </profile>  

 

  1. 激活模板

<activeProfiles>

    <activeProfile>dev</activeProfile>

  </activeProfiles>

Maven的好处

  1. 不再拷贝jar包。项目不需要存放jar包。导致项目源代码小
  2. 使用maven开发的工程,如果环境统一导入别的maven的项目不会报错
  3. 代码耦合度进一步降低.
  4. 方便项目进行升级
  5. 节省人力成本

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

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

相关文章

【MyBatis】RC隔离级别下,MyBatis 一级缓存、二级缓存造成的不一致情况

前言 数据库的MVCC 及 锁机制保证了数据的隔离、一致性。而建立在数据库之上的缓存&#xff0c;都会破坏掉数据库的一致性保障。本文探索在RC隔离级别下&#xff0c;MyBatis 一级缓存、二级缓存造成的坑。顺便复习一下 Spock 的用法&#xff0c;更加体验到了 Groovy 清爽的语法…

insert唯一索引加锁流程

MySQL版本&#xff1a;8.0.29 测试表&#xff1a; 测试数据&#xff1a; 开始测试&#xff1a; 事务1执行 加锁分析&#xff1a; mysql> SELECT * FROM performance_schema.data_locks\G *************************** 1. row ***************************ENGINE: INNO…

Express 中使用JWT进行登录验证

cookie 篇 : Node.js 中 cookie的验证登录 | session 篇 : Node.js 中 session验证登录 在前面讲过了两种验证登录的方式&#xff0c;其一是cookie&#xff0c;其二是session&#xff1b;那么在讲JWT之前先来简单的回顾这两种方式区别&#xff1b;cookie和sessi…

Java笔记023-包装类、String类、字符串的特性、String类、StringBuffer类、StringBuilder类

常用类包装类包装类的分类1、针对八种基本定义相应的引用类型-包装类2、有了类的特点&#xff0c;就可以调用类中的方法基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble包装类和基本数据的转换演示包装类和基本数据…

LInux目录结构

文章目录Linux的目录结构Linux的目录结构Linux路径的描述方式目录各功能介绍HOME目录和工作目录Linux的目录结构 Linux的目录结构 Linux的目录结构是一个树型结构。 Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘 Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在…

【UE4 第一人称射击游戏】37-拾取副武器“M4A1”

上一篇&#xff1a;【UE4 第一人称射击游戏】36-切换武器时改变UI本篇效果&#xff1a;在拾取副武器“M4A1”前&#xff0c;点击键盘2键是无法切换武器的&#xff0c;当拾取武器后&#xff0c;点击键盘2键可以切换武器&#xff08;目前仅是右下角的图标和文字实现了切换&#x…

VBA小模板,一个不放回的抽奖用的例子

1 问题 一个不放回的抽奖用VBA怎么写&#xff0c;下面用一个类似对对碰/ 翻牌子的游戏&#xff08;抽到的奖励不放回&#xff0c;可抽的东西越来越少&#xff09;来举例说明 1.1 首先要回顾下几个经典的随机模型 古典概型&#xff0c;重点就是每次抽奖的各个奖品&#xff0c;概…

宇视门禁一体机接线图

宇视门禁一体机接线图宇视门禁一体机带反馈信号电磁锁接线图门禁的GND线通用&#xff0c;可以连到同一根线上&#xff0c;也可以分开连简单整理如图一体机线颜色和功能对应表颜色线路绿色RS485_A粉色RS485_B黑色GND蓝色WIEGAND_OUT_D0白色WIEGAND_OUT_D1灰色WIEGAND_IN_D0棕色W…

测试面试真题|工作2年,从小厂到大厂,薪资翻倍是怎样的体验?

最近&#xff0c;霍格沃兹测试学院学员 C 同学成功拿下某互联网大厂年薪 30W 测试开发岗位 Offer&#xff0c;顺利完成从手工测试工程师到测试开发的逆袭&#xff0c;薪资翻倍&#xff08;涨幅 100%&#xff09;&#xff0c;并获得了学院颁发的优秀学员奖学金。C 同学工作刚满 …

【3D目标检测】Delving into Localization Errors for Monocular 3D Object Detection

目录概述细节错误分析概述 本文是基于单目图像的3D目标检测方法。 【2021】【MonoDLE】 研究的问题: 核心问题&#xff1a;如何提高基于单目图像的3D目标检测的效果。作者量化了每个子任务的整体影响&#xff0c;观察到以下现象 观察一&#xff1a;定位误差是制约目标检测性…

变异凯撒题解

题目变异凯撒&#xff0c;说明没有使用一般的凯撒加密看到一个密码&#xff0c;我们可以找一下规律首先密文不完全是字母&#xff0c;但是经典凯撒加密的密文一定都是字母&#xff0c;说明这个题目可能是ASCLL码表偏移&#xff0c;而不是字母表偏移经典凯撒加密是字母和字母的偏…

SSM纯注解后台代码整合(Spring+SpringMvc+Mybatis)

SSM后台整合&#xff08;SpringSpringMvcMybtis事务Rest风格统一结果封装统一异常处理拦截器&#xff09; 文章目录1 基础环境搭建1.1 建表1.2 创建web项目1.3 导入依赖坐标&#xff08;pom.xml&#xff09;1.4 包路径的创建1.5 在pojo包下编写book实体类1.6 在webapp包下导入静…

很多人还不知道中视频计划手机上发布多端横竖屏视频的方法

如果说你刚开始接触中视频&#xff0c;你必须要学会的小知识。 横屏视频是16&#xff1b;9的视频&#xff0c;一般是手机横向拍摄的视频。 上传这样的视频有两种方法。第一种是需要用到电脑&#xff0c;第二种就是我今天要分享的这种&#xff0c;没有电脑&#xff0c;我们用手…

测试新人入职第一天都做什么?

测试入职第一天都做什么&#xff1f; 大家都知道&#xff0c;入职一家新公司就是一个新的起点&#xff0c;新的开始。不管在之前公司干了多久&#xff0c;还是第一次踏入社会进入企业上班&#xff0c;都需要遵守新公司的规则以及规章制度。不管企业的规章制度是什么&#xff0…

前端提交信息规范 commit规范 commitlint husky commitizen

前端提交规范 约定式提交约定式提交安装commitizen 及其适配器husky commitlint 提交校验至此恭喜你已经配置好提交校验了&#xff0c;快去试试吧技术同学开发中有没有出现 &#xff1a; 因某种原因当需要回滚&#xff0c;这时候一看之前提交的massage真的乌烟瘴气 无法分辨回…

使用ResNet50实现CIFAR100数据集的训练

如果对你有用的话&#xff0c;希望能够点赞支持一下&#xff0c;这样我就能有更多的动力更新更多的学习笔记了。&#x1f604;&#x1f604; 使用ResNet进行CIFAR-10数据集进行测试&#xff0c;这里使用的是将CIFAR-10数据集的分辨率扩大到32X32&#xff0c;因为算力相关的…

蓝桥杯2019年第十届省赛C++B组

文章目录A&#xff1a;组队&#xff08;5分 √&#xff09;B&#xff1a;年号字串&#xff08;5分 √&#xff09;C: 数列求值&#xff08;10分 √&#xff09;D: 数的分解&#xff08;10分 &#xff09;F: 特别数的和&#xff08;15分 √&#xff09;A&#xff1a;组队&#x…

【蓝桥杯简单篇】Python组刷题日寄Part05

刷题日记&#xff1f;刷题日寄&#xff01; 萌新备战蓝桥杯python组 &#x1f339; 发现有需要纠正的地方&#xff0c;烦请指正&#xff01; &#x1f680; 欢迎小伙伴们的三连关注&#xff01; 往期系列&#xff1a; 【蓝桥杯简单篇】Python组刷题日寄Part01 【蓝桥杯简单篇】…

Oracle Mysql审计日志等保测评

mysql oracle的审计日志 mysql的审计日志说是有两种方法&#xff0c;一种是需要安装插件模式的审计&#xff0c;一种直接开一个参数 1.安装插件模式 一、 mysql 日志 配置永久配置 &#xff1a; 保存时间及大小 https://blog.csdn.net/m0_51197424/article/details/12432840…

设计模式(二)----软件设计原则

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;要尽量根据7条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本。 1、单一职责原则 ( 核心&#xff1a;尽量保证类&#xff0…