框架 - Maven入门
框架 - Maven入门
- 【第一部分:Maven简介】
- 1、Maven 概述
- 2、完成一个java项目 需要做的工作
- 3、传统项目开发存在的问题
- 4、改进项目的开发和管理,需要使用到Maven
- 5、Maven项目的构建过程
- 6、Maven 工具的安装和配置
- 【第二部分:Maven的核心概念】
- 1、Maven 的核心概念-简介
- 2、Maven 工程约定的目录结构(重点)
- 【第一个 maven 工程】
- 3、仓库
- 4、POM 文件、坐标、依赖(重点)
- 5、Maven 的生命周期
- 6、Maven 的常用命令
- 7、Maven 的插件
- 【第三部分:Maven 在 IDEA 中的应用】
- 1、在IDEA中设置maven
- 2、IDEA 创建 Maven版 Java项目
- 3、IDEA 创建 Maven版 Web项目
- 4、常用技巧
- 5、总结:以后一般使用maven的模板创建项目
- 【第四部分:依赖管理 和 Maven的常用设置】
- 1、依赖范围 ———— 使用scope表示的
- 2、maven的属性设置
- 3、maven的全局变量
- 4、指定资源位置
- 【思维导图】
- 传送门
【第一部分:Maven简介】
1、Maven 概述
Maven 项目对象模型(POM),可以通过一小段 描述信息 来管理项目的构建、报告和文档的 【项目管理构建工具】软件。Maven 是 Apache 软件基金会组织维护的一款【自动化构建工具】,专注服务于 Java 平台的项目构建和依赖管理。
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,是一款在大型项目开发过程中不可或缺的重要工具。
Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;
Maven 提供规范的管理各个常用 jar 包及其各个版本,并且可以自动下载和引入项目中;
Maven 可以根据指定版本自动解决 jar 包版本兼容问题;
Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。
类似自动化构建工具还有: Maven, Gradle, Ant。
2、完成一个java项目 需要做的工作
1.分析项目要做什么,知道项目有哪些组成部分。
2.设计项目,通过哪些步骤,使用哪些技术。需要多少人, 多长的时间。
3.组建团队,招人, 购置设备,服务器, 软件, 笔记本。
4.开发人员写代码。 开发人员需要测试自己写代码。 重复多次的工作。
5.测试人员,测试项目功能是否符合要求。过程:软件开发需要编译代码 —> 开发人员自己测试代码 —> 把代码打包 —> 部署项目到测试服务器 —> 测试人员测试功能 —> 测试测试出 bug开发人员需要修改bug —> 开发人员自己测试代码 —> 把代码打包 —> 部署项目到测试服务器 —> 测试人员测试功能 —> 直到符合功能要求。上述过程需要重复多次,大型项目中构建项目比较复杂,有很多的配置文件,jar 文件,多个子项目等等。都用人力完成费时费力,效率比较低。
maven 可以让我们从上面的工作中解脱出来。maven 是自动化构建工具。
3、传统项目开发存在的问题
1)很多模块,模块之间有关系, 手工管理关系,比较繁琐。
2)需要很多第三方功能, 需要很多jar文件,需要手工从网络中获取各个jar,并且多个项目需要的 jar 包存在重复的问题;
3)管理jar的版本兼容问题: 你需要的是mysql.5.1.5.jar ,那你就不能给给一个mysql.4.0.jar
4)管理jar文件之间的依赖: 你的项目要使用a.jar,而a.jar需要使用到b.jar里面的class类。必须首先获取到b.jar才可以, 然后才能使用a.jar.
4、改进项目的开发和管理,需要使用到Maven
1)maven可以管理jar文件
2)自动下载jar和他的文档,源代码
3)管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.jar
4)管理你需要的jar版本
5)帮你编译程序,把java编译为class
6)帮你测试你的代码是否正确。
7)帮你打包文件,形成jar文件,或者war文件
8)帮你部署项目
5、Maven项目的构建过程
构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。maven支持的构建过程主要包括:① 清理:删除以前的编译结果,为重新编译做好准备。② 编译:将Java源程序编译为字节码文件。 .java ——> .class文件③ 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。④ 报告:在每一次测试后以标准的格式记录和展示测试结果。⑤ 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war包。⑥ 安装:在Maven环境下特指 将打包的结果 ——> jar包或war包 安装到本地仓库中。⑦ 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。把程序安装好可以执行。
6、Maven 工具的安装和配置
① 确保安装了 java 环境:maven 本身就是 java 写的,所以要求必须安装 JDK。查看 java 环境变量:echo %JAVA_HOME%② 下载并解压 maven 安装程序:官网 http://maven.apache.org/download.cgi我这里选择了最常用的版本:【apache-maven-3.3.9-bin.zip】,它是可以配合jdk1.8版本的解压到一个目录,非中文目录:【D:\zzzz\apache-maven-3.3.9】子目录 bin: 一些执行程序,最常用是mvn.cmd子目录 conf: maven工具本身的配置文件 settings.xml③ 配置 Maven 的环境变量:在系统的环境变量中,指定maven工具的安装目录:MAVEN_HOME=D:\zzzz\apache-maven-3.3.9再把它的bin加入到path之中 :path =%MAVEN_HOME%\bin④ 验证是否安装成功:打开dos窗口:mvn –v回车出现版本信息,即可
【第二部分:Maven的核心概念】
1、Maven 的核心概念-简介
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从 Maven的九个核心概念入手,
看看Maven是如何实现自动化构建的:
① POM: 一个文件,名称是pom.xml , pom翻译过来叫做项目对象模型。 maven把一个项目当做一个模型使用。控制maven构建项目的过程、管理jar依赖等。② 约定的目录结构 : maven项目的目录和文件的位置都是规定的。③ 坐标 : 是一个唯一的字符串,用来表示资源的。④ 依赖管理 : 管理你的项目中可以使用的jar文件⑤ 仓库管理 : 你的资源所存放的位置⑥ 生命周期 : maven工具构建项目的过程,即生命周期。⑦ 插件和目标:执行maven构建的时候用的工具就是插件⑧ 继承⑨ 聚合
2、Maven 工程约定的目录结构(重点)
约定:大家都认可的一种规则,虽然不这样做也可以,但最好不要违反约定。
maven 中约定的目录结构:
【Hello】:根目录,也就是工程名--------【src】:源代码----------------【main】:主程序------------------------【java】: 主程序的 java 源码------------------------【resources】:主程序的配置文件----------------【test】:测试程序 ------------------------【java】: 测试程序的 java 源码------------------------【resources】:测试程序的配置文件--------【pom.xml】:Maven 工程的核心配置文件一般情况下,我们习惯上采取的措施是:约定 > 配置 > 编码maven 的 pom.xml 记录的关于构建项目的各个方面的设置,maven 从 pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。
【第一个 maven 工程】
按照如下步骤,实现第一个 maven 项目,以 maven 推荐的约定方式创建目录、类文件。
1.某个目录中创建文件夹 Hello。(我这里是 D:\zzzz\Hello)2.在 Hello 中创建子目录 src3.拷贝 pom.xml 到 Hello 目录下,和 src 是同级放置的。4.进入 Hello/src 目录,创建 main, test 目录5.在 main 和test 目录,都创建 java、resources 目录。6.进入Hello/src/main/java 目录,创建目录 com/yuming/maven/ 即包名6.在 com/yuming/maven/目录下创建 HelloMaven.java 文件,编写代码,其中有个add方法,用来计算两个数字的和7.进入到 Hello 目录下,在地址栏输出cmd,回车,执行【mvn compile】mvn compile ,是编译 src/main/java目录下的所有java文件的。结果是在项目的根目录Hello下生成了target目录(目标目录),maven编译的java程序,生成的class文件都放在target目录中8.进入到 Hello/target/classes 目录下,在地址栏输出cmd,回车,执行 【java com.yuming.maven.HelloMaven】疑问:执行mvn compile时,dos窗口显示:Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pomDownloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8 KB at 4.4 KB/sec)Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pomDownloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9 KB at 14.6 KB/sec)............Downloading...Downloaded...下载了许多东西?1)为什么要下载?maven工具执行的操作,是需要很多插件来完成的,会在编译的时候,自动下载对应的插件jar文件--叫做插件--插件是完成某些功能2)下载的东西存放到哪里了。默认仓库(本机仓库):C:\Users\Administrator\.m2\repository3)配置本地仓库地址不想把本地仓库放在C盘下面,可以设置本机存放资源的目录位置(设置本机仓库):(1)找到 maven的配置文件。 在maven安装目录/conf/settings.xml先备份 settings.xml-----复制粘贴命名为【settings - 原备份.xml】(2)修改 settings.xml里面的 <localRepository> , 指定你的目录(不要使用中文目录)<localRepository>D:/zzzz/myLocalRepository</localRepository>然后把C:\Users\Administrator\.m2\repository下面的插件复制过来就好了。以后一些常用的插件下载之后,可以复制一份保存下来,直接粘贴使用,以免当时网络状况不好的情况
3、仓库
1、仓库是存放东西的,Maven 仓库存放的是:(1) Maven 的插件,插件也是一些 jar,这些 jar 可以完成一定的功能。(2)第三方框架或工具的 jar 包(3)我们自己开发项目的模块2、仓库的分类(1)本地仓库:存在于当前电脑上,默认存放在C:\Users\Administrator\.m2\repository中,为本机上所有的Maven工程服务。你也可以通过Maven的配置文件:在maven安装目录/conf/settings.xml中修改本地仓库所在的目录。(2)远程仓库:不在本机上, 通过网络才能使用。多电脑共享使用的。①:中央仓库:通过Internet访问,为全世界所有 Maven工程服务。最权威的。中央仓库的地址:https://repo.maven.apache.org ②:中央仓库的镜像:架设在不同位置,欧洲,美洲,亚洲等每个洲都有若干的服务器,为中央仓库分担流量。减轻中央仓库的访问,下载的压力。所在洲的用户首先访问的是本洲的镜像服务器。③:私服:在公司内部,在局域网中使用的,不是对外使用的。3、Maven 对仓库的使用,不需要人为参与在 Maven 构建项目的过程中如果需要某些插件,首先会到 Maven 的本地仓库中查找,如果找到则可以直接使用;如果找不到,它会自动连接外网,到远程中央仓库中查找;如果远程仓库中能找到,则先把所需要的插件下载到本地仓库,然后再使用,并且下次再用到相同的插件也可以直接使用本地仓库的;如果没有外网或者远程仓库中也找不到,则构建失败。开发人员需要使用某些插件--->首先查maven的本地仓库--->私服--->镜像--->中央仓库
4、POM 文件、坐标、依赖(重点)
-
POM: Project Object Model 项目对象模型。
Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明;以方便进行构建和描述;
pom.xml 是 Maven 的灵魂。
所以,maven 环境搭建好之后,所有的学习和操作都是关于 pom.xml 的。
其中主要用到这几个:
1)坐标(GAV):唯一值, 在互联网中唯一标识一个项目的
<groupId> 公司域名的倒写 </groupId><artifactId> 自定义项目名称 </artifactId><version> 自定版本号 </version>https://mvnrepository.com/ :搜索使用的中央仓库, 使用groupId 或者 artifactId作为搜索条件,下载相关jar包,比如mysql驱动jar包
2)packaging:项目打包的类型,可以不写,默认是jar ,web应用是war
3)依赖(dependency)
dependencies 和 dependency ,相当于是 java代码中的 import就是你的项目中要使用的各种资源说明, 比我的项目要使用mysql驱动------------------------------------------------------------------<dependencies><!--依赖mysql\mysql-connector-java\5.1.9下面的jar包 --><dependency><groupId> mysql </groupId><artifactId> mysql-connector-java </artifactId><version> 5.1.9 </version></dependency>还可以加很多个<dependency></dependency>依赖</dependencies>------------------------------------------------------------------
4)properties:设置属性
5)build :构建项目的相关参数配置,最常用的是设置 编译java代码使用的jdk的版本等
5、Maven 的生命周期
-
maven的生命周期:就是maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署
对于我们程序员而言,无论我们要进行哪个阶段的构建,直接执行相应的命令即可,
无需担心它前边阶段是否构建,Maven 都会自动构建。
这也就是 Maven 这种自动化构建工具给我们带来的好处。
6、Maven 的常用命令
-
Maven 对所有的功能都提供相对应的命令,要想知道 maven 都有哪些命令,那要看 maven 有哪些功能。
maven 三大功能:管理依赖、构建项目、管理项目信息。
管理依赖,只需要声明就可以自动到仓库下载;
管理项目信息,其实就是生成一个站点文档,一个命令就可以解决,最后再说;
maven 功能的主体其实就是项目构建。Maven 提供一个项目构建的模型,把编译、测试、打包、部署等都对应成一个个的生命周期阶段,并对
每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。【mvn clean】 清理:会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除【mvn compile】 编译 主程序:会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件【mvn test-compile】 编译 测试程序:会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件【mvn test】 测试:会生成一个目录surefire-reports,保存测试结果(测试报告)【mvn package】 打包主程序:会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包【mvn install】 安装主程序:会把本工程打包,并且按照本工程的坐标保存到 本地仓库 中【mvn deploy】 部署主程序:会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中。注意:执行以上命令必须在命令行进入 pom.xml 所在目录!并且:执行 Maven 的生命周期 后面的命令的时候,会自动把前面的命令依次执行一遍
-
【练习maven 各种命令】:
以上面【第一个 maven 工程】继续,测试 maven 各种命令1、单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。junit测试的内容:测试的是类中的方法, 每一个方法都是独立测试的。方法是测试的基本单位(单元)。maven借助单元测试,批量的测试类中的大量方法,是否符合预期的。2、测试步骤1)加入依赖,在pom.xml加入单元测试依赖,相当于java代码中,如果要连接mysql数据库,需要导入mysql的jar包一样<!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency> 2)在maven项目中的src/test/java目录下,创建测试程序。在 Hello/src/test/java 目录下,创建 com/yuming/maven/目录,在该目录中创建 测试程序推荐的创建测试类和测试方法的方式:1.测试类的名称 是Test + 你要测试的类名2.测试的方法名称 是:Test + 方法名称因为我们测试的是HelloMaven, 所以就创建测试类 TestHelloMaven测试的方法是add方法,创建测试方法testAdd【测试方法】的定义规则:1.方法是public的2.方法没有返回值 void3.方法名称是自定义的,推荐是Test + 方法名称4.在方法的上面加入 @Test------------------------------------------------------------------------package com.yuming.maven;//导入的这两个类就是在上面加入的依赖所表示的目录下jar包:junit\junit\4.11\junit-4.11.jar的里面的import org.junit.Assert; import org.junit.Test;public class TestHelloMaven {@Testpublic void testAdd(){System.out.println("测试 HelloMaven 类 add()方法:");HelloMaven hello = new HelloMaven();int res = hello.add(10,20);//验证hello.add(10,20)结果是不是30:/*junit提供的方法,对比结果的————assertEquals(期望值,实际值)如果期望值和实际值是相等的,证明我们的HelloMaven是没有问题的,如果不等,则会抛异常,说明HelloMaven有问题*/Assert.assertEquals(30,res);}}------------------------------------------------------------------------3) 执行【mvn clean】, 观察 taget 目录被清除4) 执行【mvn compile】,编译主程序,又生成了taget 目录① 编译src/main/java 目录下的所有java 为class文件, 同时把class拷贝到 target/classes目录下面② 把src/main/resources目录下的所有文件 都拷贝到target/classes目录下5) 进入 target/classes 目录,执行 java com.yuming.maven.HelloMaven,运行该程序6)进入 Hello 目录,执行 【mvn test-compile】 编译测试程序,会在target下面生成test-classes目录。存放测试程序的class文件7)进入 Hello 目录,执行 【mvn test】 执行 TestHelloMaven 类中方法,生成测试报告会在target下面生成一个目录surefire-reports,里面有生成的测试报告:8)进入目录 surefire-reports,查看测试报告com.yuming.maven.TestHelloMaven.txt-------------------------------------------------------------------------------Test set: com.yuming.maven.TestHelloMaven-------------------------------------------------------------------------------Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.053 sec9)打开 TestHelloMaven.java, 增加测试方法testAdd2@Testpublic void testAdd2(){System.out.println("测试 HelloMaven 类 add()方法:");HelloMaven hello = new HelloMaven();int res = hello.add(10,20);// 期望值,实际值Assert.assertEquals(50,res);}10)进入 Hello 目录,执行 【mvn test】不用执行 mvn test-compile进行重新编译,因为执行 Maven 的生命周期 后面的命令的时候,会自动把前面的命令依次执行一遍11)进入目录 surefire-reports,查看测试报告com.yuming.maven.TestHelloMaven.txt-------------------------------------------------------------------------------Test set: com.yuming.maven.TestHelloMaven-------------------------------------------------------------------------------Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.073 sec <<< FAILURE!testAdd2(com.yuming.maven.TestHelloMaven) Time elapsed: 0.007 sec <<< FAILURE!java.lang.AssertionError: expected:<50> but was:<30>at org.junit.Assert.fail(Assert.java:88)at org.junit.Assert.failNotEquals(Assert.java:743)at org.junit.Assert.assertEquals(Assert.java:118)at org.junit.Assert.assertEquals(Assert.java:555)at org.junit.Assert.assertEquals(Assert.java:542)......12)去TestHelloMaven.java中,将增加的测试方法testAdd2删掉,或者将该方法中的50改为30如果测试结果出错,没有解决的话,是进行不了后面的命令的。就是前面所述的:执行 Maven 的生命周期 后面的命令的时候,会自动把前面的命令依次执行一遍12)进入 Hello 目录,执行【mvn package】 ,会在target目录下生成 xxx.jar 文件,这就是所说的打包生成的jar包:ch01-maven-1.0-SNAPSHOT.jar,该jar包名字即为,我们在pom.xml中配置的artifactId和version的组合起来的:<groupId> com.yuming.maven </groupId><artifactId> ch01-maven </artifactId><version> 1.0-SNAPSHOT </version>13)进入 Hello 目录,执行【mvn install】, 把 xxx.jar 文件安装到本地 maven 仓库,安装成功后查看仓库中的 jar 文件
7、Maven 的插件
-
maven命令执行时,真正完成功能的是插件,插件就是一些jar文件、一些类。
-
maven 过程构建周期,由 maven 的插件 plugin 来执行完成。
1)clean 清理插件: maven-clean-plugin:2.5clean 阶段是独立的一个阶段,功能就是清除工程目前下的 target 目录2)resources 插件: maven-resources-plugin:2.6resource 插件的功能就是将项目的资源文件resources文件夹 拷贝 到目标目录3)compile 编译插件: maven-compiler-plugin功能就是把 src\main\java 源码编译成字节码生成 class 文件,并把编译好的 class 文件输出到 target\classes 目录下4) test 测试插件单元测试所用的 compile 和 resources 插件和主代码是相同的,但执行的目标不同,testCompile 和 testResources是把 src\test\java 下的代码编译成字节码输出到 target\test-classes,同时把 src\test\resources 下的配置文件拷贝到target\test-classes5) package 打包插件: maven-jar-plugin这个插件是把 class 文件、配置文件打成一个 jar(war 或其它格式)包6) deploy 发布插件: maven-install-plugin发布插件的功能就是把构建好的 artifact 部署到本地仓库,还有一个 deploy 插件是将构建好的 artifact 部署到远程仓库这些插件,在上面练习maven 各种命令时,在dos窗口基本上出现过的
-
插件可以在自己的项目中设置,最常使用的是 maven 编译的插件。设置项目使用的 jdk 版本时通过编译插件指定。
在pom.xml 文件中设置:
<!-- 构建项目的相关参数配置,最常用的是设置编译Java代码的jdk的版本 -->
<build><!-- 配置插件,在下面可以配置多个 --><plugins><!-- 配置某个具体的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId> <!-- 插件的名称 --><version>3.8.1</version> <!-- 插件的版本 --><configuration> <!-- 配置插件的信息 --><source>1.8</source> <!--告诉maven,我们写的代码是在jdk1.8上面 编译的 --><target>1.8</target> <!--告诉maven,我们写的代码是在jdk1.8上面 运行的 --></configuration></plugin></plugins>
</build>
【第三部分:Maven 在 IDEA 中的应用】
1、在IDEA中设置maven
DEA中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。
使用自己安装的maven, 需要覆盖IDEA中的默认的设置,让IDEA指定自己maven安装位置等信息:
- ①:配置 当前工程的设置:
File———— settings ———— Build,Execution,Deployment ———— Build Tools ———— Maven
在右面的窗口配置这几项:
Maven Home directory: maven的安装目录 :
D:\zzzz\apache-maven-3.3.9
User Settings File : 就是maven安装目录下/conf/setting.xml配置文件:
D:\zzzz\apache-maven-3.3.9\conf\settings.xml
Local Repository : 本机仓库的目录位置 :
D:\zzzz\myLocalRepository
配置完之后,点击右下角的Apply。
继续在左边窗口的Maven下面————Runner里面设置:
VM Options: -DarchetypeCatalog=internal
JRE: 项目的jdk(我使用的1.8版本)
说明:在maven项目创建时,会联网从远程仓库加载 archetype 元数据,下载速度很慢,导致创建过程卡住。
使用-DarchetypeCatalog=internal,表示仅使用内部元数据,不用下载, 创建maven项目速度快。
配置完之后,点击右下角的Apply。
- ②:配置 以后新建工程的设置:
File ———— other settings ———— Settings for New Project
配置和上面一样,两个位置的配置
2、IDEA 创建 Maven版 Java项目
首先新建一个空的工程:
File——New——Project——在打开的窗口左侧最下面:Empty project——Next——工程名字:【maven-project】
在工程下面创建一个普通java项目:
-
1、File————New————Module————选择左边的Maven:
1)在右边上方选择jdk,建议选择与之配套的jdk1.8的,
2)在下面的【create from archetype】
archetype也就是原型,准确说是一个项目模板,我们可以根据该模板来生成项目。
在【create from archetype】下面有许多定义好的模板:常用的Archetype:
(1) maven-archetype-quickstart ———— 普通的java项目模板
默认的Archetype,基本内容包括:
(1)一个包含junit依赖声明的pom.xml
(2)src/main/java主代码目录及一个名为App的类(内容就是一个HelloWord)
(3)src/test/java测试代码目录及一个名为AppTest的测试用例(2) maven-archetype-webapp ———— web项目模板
一个最简单的Maven web项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:
(1)一个packaging为war且带有junit依赖声明的pom.xml
(2)src/main/webapp/目录
(3)src/main/webapp/index.jsp文件
(4)src/main/webapp/WEB-INF/web.xml文件因为现在是创建普通的java项目,就选择maven-archetype-quickstart就好了,Next
-
2、设置该项目的坐标
groupId : com.yuming (公司域名的倒写)
artifactId: ch01-maven-java (自定义项目名称)
version : 1.0 (自定版本号)
-
3、点击Next之后,会出现当前maven项目的一些信息
-
4、点击Next之后,填写Module名和存储路径————Finish
Module名建议和上面的artifactId名一致
-
5、然后就生成了该项目(Module):【ch01-maven-java】
因为我们使用的maven-archetype-quickstart模板,
现在可以看到,果然生成了这些内容:
(1)一个包含junit依赖声明的pom.xml
(2)src/main/java主代码目录及一个名为App的类(内容就是一个HelloWord)
(3)src/test/java测试代码目录及一个名为AppTest的测试用例
注:这两个生成的类可以都删掉,写我们自己的类文件但是在之前讲到的【maven中约定的目录结构】,src/main和src/test下面都还应该有一个【resources】配置文件,
这里如果我们需要的话,可以手工在IDEA中创建:
在main和test上分别 右键 —— new —— Directory —— 命名为 resources要想使这两个resources成为IDEA中放置配置文件的文件夹,还需要一步,进行标识:
右键 main下面的resources ———— Mark Directory as —————— Resources Root
右键 test下面的resources ———— Mark Directory as —————— Test Resources Root最终,IDEA中maven版java项目的视图结构:
-
6、查看pom.xml
1、里面有自己项目的坐标(gav),可以再修改都行
2、在 < properties>里面修改jdk为1.8
3、< dependencies>,依赖,里面有一个单元测试的依赖
4、< build>下面< pluginManagement>,插件管理,里面有maven生命周期的所有插件,
是IDEA方便我们配置插件用都给列出来了,如果我们不需要配置他们,整个build可以都删掉
<?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><!-- 自己项目的坐标(gav)--><groupId>com.yuming</groupId><artifactId>ch01-maven-java</artifactId><version>1.0</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--maven构建项目使用的是utf-8 ,避免中文的乱码--><maven.compiler.source>1.8</maven.compiler.source> <!--设置 编译java代码使用的jdk版本为1.8--><maven.compiler.target>1.8</maven.compiler.target> <!--设置 运行java代码使用的jdk版本为1.8--></properties><!--依赖--><dependencies><dependency> <!--单元测试依赖--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies></project>
- 7、在src/main/java的下面新建类:HelloMaven.java
package com.yuming;
public class HelloMaven {public int add(int n1, int n2){return n1+n2;}public static void main(String[] args) {HelloMaven hello = new HelloMaven();int res = hello.add(10,20);System.out.println("10+20="+res); //10+20=30}
}
- 8、在src/test/java的下面新建测试类:TestHelloMaven.java
然后直接运行该方法,就可以了
在该类里面,可以写多个测试方法,每个测试方法都可以单独运行进行测试
也可以直接在类上,运行整个类,这样所有方法都执行了
package com.yuming;import org.junit.Assert;
import org.junit.Test;public class TestHelloMaven {@Testpublic void testAdd(){System.out.println("====testAdd 测试add方法=====");HelloMaven helloMaven = new HelloMaven();int res = helloMaven.add(10, 20);//测试结果是否正确://Assert.assertEquals(期望值,方法实际返回值);Assert.assertEquals(30,res);}@Testpublic void testAdd2(){System.out.println("====testAdd 测试add方法=====222");HelloMaven helloMaven = new HelloMaven();int res = helloMaven.add(10, 20);//测试结果是否正确://Assert.assertEquals(期望值,方法实际返回值);//Assert.assertEquals(50,res);Assert.assertEquals(30,res);}
}
- 9、使用IDEA中的maven工具窗口
在IDEA最右侧边缘处,可以点击“Maven”,打开maven工具窗口。
里面有我们创建的各个项目,项目下面第一个是【Lifecycle】,就是项目的生命周期,
clean、validate、compile、test等等,直接双击它就可以了
(不像之前没有使用IDEA工具时,要打开dos窗口,进去到pom.xml所在目录输出各种命令来执行了)
双击clean清理,可以看到target目录没有了;
双击compile编译,可以看到又生成了target目录。
双击test测试,可以看到生成了测试报告。。
双击package打包、双击install安装到本地仓库。。。。deploy部署。。
3、IDEA 创建 Maven版 Web项目
- 1、File————New————Module————选择左边的Maven:
1)在右边上方选择jdk,建议选择与之配套的jdk1.8的,
2)在下面的【create from archetype】中选择【maven-archetype-webapp】
maven-archetype-webapp ———— web项目模板:
一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:
(1)一个packaging为war且带有junit依赖声明的pom.xml
(2)src/main/webapp/目录
(3)src/main/webapp/index.jsp文件
(4)src/main/webapp/WEB-INF/web.xml文件
-
2、设置该项目的坐标
groupId : com.yuming (公司域名的倒写)
artifactId: ch02-maven-web (自定义项目名称)
version : 1.0 (自定版本号) -
3、其他步骤和上面一样,直到了生成该项目(Module):【ch02-maven-web】
可以看到该项目下,已经根据模板生成了:
(1)一个packaging为war且带有junit依赖声明的pom.xml
(2)src/main/webapp/目录
(3)src/main/webapp/index.jsp文件
(4)src/main/webapp/WEB-INF/web.xml文件显然,按照 maven archetype 原型创建的 maven web 工程缺少 maven 项目的完整结构:
src-main-java /resources,src-test-java/resources,所以需要我们手动添加文件目录,并进行进行标识:src/main下面的创建 java目录, 并右键—————— Mark Directory as —————— Sources Root
src/main下面的创建 resources目录,并右键—————— Mark Directory as —————— Resources Rootsrc下面创建 test目录
src/test下面创建 java目录, 并右键—————— Mark Directory as ——————Test Sources Root
src/test下面创建 resources目录,并右键—————— Mark Directory as ——————Test Resources Root
最终,IDEA中maven版web项目的视图结构:
- 4、查看pom.xml
1、里面有自己项目的坐标(gav),可以再修改都行
2、比java项目多了一个:< packaging>war</ packaging> , web项目,默认打包类型为war
3、将< properties>里面修改jdk为1.8
4、< dependencies>,依赖,里面有一个单元测试的依赖
因为是web项目,会用到Servlet和jsp,所以在这里添加这两个依赖,就相当于添加这2个jar包
5、< build>下面< pluginManagement>,插件管理,里面有maven生命周期的所有插件,
是IDEA方便我们配置插件用都给列出来了,如果我们不需要配置他们,整个build可以都删掉
<?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.yuming</groupId><artifactId>ch02-maven-web</artifactId><version>1.0</version><packaging>war</packaging> <!--web项目,默认打包类型为war--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source> <!--记住指定这里的jdk版本为1.8--><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency> <!--单元测试依赖--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency> <!--添加Servlet的依赖,也就是Servlet的jar包--><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency> <!--添加JSP的依赖(jar包)--><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency></dependencies></project>
-
5、创建servlet和jsp
-
6、IDEA配置管理Tomcat
【File】——> 【Settings】————【Build, Execution, Deployment】————>【Application Servers】,点击【+】,选择【Tomcat Server】,在弹出的对话框中填入Tomcat的安装路径:D:/apache-tomcat-9.0.30点击【OK】——>【OK】设置Tomcat的启动与关闭按钮:选择【Run】————>【Edit Configuration】,点击左侧【+】号,找到【Tomcat Server】---【Local】(若是没有找到Tomcat Server 可以点击最后一行 34 items more),在name后面填写名字:myTomcat下面的【Server】 -> 【Application server】有上面刚刚配置的本地 Tomcat 服务器,下面【JRE】选择自己的jdk版本。。热部署。。。最后点击Apply,再点OK按钮。这个时候就可以看到IDEA下面打开了一个窗口【Application Servers】,里面有自己刚刚设置的按钮【myTomcat】
-
7、发布网站(部署项目)
【Run】————>【Edit Configuration】,选择中间第二个:【Deployment】部署
点右边的【+】————>【Artifact】,就会在中间页面出现自己的项目:ch02-maven-web :war exploded
在下面的【Application content:】后面可以写网站的别名,但是要注意一定要以/开头
我的是:/myWeb点【Apply】。 点【OK】 -
8、启动Tomcat,进行测试
IDEA下面【Application Servers】窗口,找到【myTomcat】,点击左侧的run -
9、web项目打包
在IDEA最右侧边缘处,可以点击“Maven”,打开maven工具窗口,找到该项目,双击package进行打包,
最后在target目录下生成了:【ch02-maven-web-1.0.war】
这就是我们项目的成果,可以把它交给用户:—————————————————————————————————————————————————————————————————————————————— 把这个文件复制到 Tomcat安装目录/webapps文件夹下面(D:\apache-tomcat-9.0.30\webapps) 可以将ch02-maven-web-1.0.war重命名为 myWeb.war,方便下面访问,不改也行启动tomcat:双击Tomcat安装目录/bin目录下面的startup.bat, 这个时候去webapps文件夹下面,可以看到myWeb.war解压出来了一个文件夹:myWeb, 里面就是编译好的servlet和jsp文件等等打开浏览器,访问 http://localhost:8080/myWeb/index.jsp 可以正常访问关闭tomcat:双击bin目录下面的shutdown.bat ——————————————————————————————————————————————————————————————————————————————
4、常用技巧
-
1、在pom.xml,pom文件中添加一些依赖时,可能IDEA没有立即就识别出来,会报错,有一些红色波浪线。
解决办法:
右键 pom.xml ———— Maven ———— Reimport,相当于刷新,就好了 -
2、按照 maven archetype 原型创建的 maven web 工程缺少 maven 项目的完整结构是,我们需要自己创建缺少的文件夹,
然后要一个个右键,【Mark Directory as】进行标识,还有个方法是:
打开【Project Structure】工程结构, 点击左侧【Module】,在右侧选择【Sources】,
可以直接选中对应目录,然后点击“Mark as”后面对应的类型进行标识
-
3、IDEA 中导入 Maven 项目(module)
假设该项目名为【imModule】 1)找到该项目的所在文件夹,点进去,将imModule.iml删除掉(后面IDEA会自动生成该模块对应的iml文件)2)到IDEA中。File - new - Module from Existing Sources...在弹出的窗口中,找到该项目,选中它点击OK - 下一步,点击【import module from external module】,选择它下面的【Maven】- 然后一直Next - Finish3)File - Project Structure窗口,点击左边的Modules,选中【imModule】,在右边的【Dependencies】看是否有指定的jdk,如果没有就选择一个。
-
4、对于web项目打包之后,是war类型的文件,不能直接用压缩文件打开这个war文件
我们可以先把它复制一份,再重命名为rar或者zip等类型的文件,就可以用压缩文件打开查看有什么内容了
5、总结:以后一般使用maven的模板创建项目
- maven-archetype-quickstart ———— 普通的java项目模板
- maven-archetype-webapp ———— web项目模板
【第四部分:依赖管理 和 Maven的常用设置】
1、依赖范围 ———— 使用scope表示的
scope的值有 compile、 test、 provided等。默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段中起作用。
maven构建项目: 编译、 测试、 打包、安装、部署maven中的依赖范围有很多种,但是我们常用的只有以下三种:compile:编译依赖范围, 指A在编译时依赖B,该范围为 默认依赖范围。编译范围的依赖会用在【编译、测试、运行】,由于运行时需要,所以会参与【打包和部署】。test: 测试依赖范围,在编译和运行时都不需要,只在【测试】时需要。例如:Junit。由于运行时不需要,所以test范围依赖 不会被打包。provide:已提供依赖范围,只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在【编译、测试】时需要,在运行时不需要。例如:servlet-api.jar被Tomcat容器提供了,所以 不需要打包。junit的依赖范围: test<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope> <!--test依赖范围————只在测试阶段起作用--></dependency>servlet-api的依赖范围:provided<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version> <!--servlet-api.jar--><scope>provided</scope> <!-- provided已提供依赖范围————在编译和测试时用 --></dependency>项目的中的用到的所有依赖(jar ),必须在本地仓库中有。如果没有,会在pom.xml中报红色,
然后maven会自动下载到本地仓库里面,下载好之后,就没有红色了。
2、maven的属性设置
pom.xml中 设置maven的常用属性
<properties><maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本<maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
</properties>
3、maven的全局变量
-
自定义的属性,
1.在< properties> 通过自定义标签声明变量(标签名就是变量名)
2.在pom.xml文件中的其它位置,使用 ${标签名} 使用变量的值 -
自定义全局变量一般是定义 依赖的版本号, 当你的项目中要使用多个相同的版本号,
先使用全局变量定义, 再使用${变量名}
<properties><spring.version>4.3.10.RELEASE</spring.version> <!--定义全局变量-->
</properties><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version> ${spring.version} </version> <!--引用全局变量-->
</dependency>
4、指定资源位置
- src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 comile 和 test-comiple 阶段被编译,
编译结果分别放到了 target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件都会被忽略掉,
如果需要把 src目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。
需要指定资源文件位置。以下内容放到标签中。
<build><resources><resource><directory>src/main/java</directory> <!--目录--><includes> <!--包括目录下面的所有 .properties, .xml 文件都会扫描到--><include>**/*.properties</include><include>**/*.xml</include></includes> <filtering>false</filtering> <!--filtering 为 false 表示不启用过滤器 --></resource></resources></build>
-
作用:
1、默认情况下,即没有使用标签的时候, maven执行compile 编译代码时,除了使用编译插件进行编译,
在这之前会先使用resources插件, 会把src/main/resource目录中的所有文件拷贝到target/classes目录中。
但是src/main/java下面的 非java文件,并不会拷贝到target/classes目录中,会被忽略掉。2、我们的程序有需要把一些文件放在src/main/java目录中,当执行java程序时, 需要用到src/main/java目录中的文件。
这时需要告诉 maven 在compile 编译 src/main/java 目录下程序时,需把非java文件一同拷贝到target/classes目录中。
此时就需要在< build>中 加入< resources>标签.
【思维导图】
传送门
上一章:框架 - jdk动态代理
下一章:
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- C#学习笔记 11.01
C#学习笔记 11.01 (学习视频来自bilibili的传智播客赵老师基础教学视频) ArrayList 集合 这是一个普通类(非静态类) 这个东西的优势是长度不固定,可以任意改变。 如果我们调用其 Add方法,可以在后面接入…...
2024/4/27 9:02:28 - ES6的class
ES6的class: 为了和其他的语言一致,JS提供了关键词class模拟传统的class,但底层的实现机制仍然是原型继承 什么是class? 集中存储一个类型的构造函数和原型对象的程序结构,即简化版的面向对象(封装&…...
2024/4/26 1:42:08 - 吃货联盟 项目日记 0922
吃货联盟 项目日记 0922 目标一,项目的基本结构 定义一个订单类,情况如下 定义一个客户端类,情况如下 功能需求 完成客户端类中的start方法,showMenu方法 并且实现键盘输入与分支功能 用户输入了对应的数字,就打印分…...
2024/4/7 13:07:16 - javascript基础个人总结
一.js的作用 1)html:网页框架和内容 2)css:修饰、美化 3)js:网页的行为(交互、动态) 二.js的用法 1)直接写在标签当中 2)包含在script中(head、body&am…...
2024/4/25 10:36:29 - Vue中provide 和inject 依赖注入
provide:Object | () > Object inject:Array < string > | { [key: string]: string | Symbol | Object } provide:提供依赖。是一个对象,或者是一个返回对象的函数。里面呢就包含要给子孙后代的东西,也就是属…...
2024/4/26 9:10:52 - ECMA6/7/8...新增特性
ES6 ES2015 … ES11 ES2020了解ES6/7/8/9/最新进展:https://github.com/tc39/proposals/blob/master/finished-proposals.mdlet和const: 重点let 定义变量 const 定义常量 区别: 1.是否有变量提升 var有变量提升,let没有 2.是否能重复定义 v…...
2024/5/2 10:56:16 - Unity的C#编程教程_47_函数和方法
C# Functions and Methods Overview 1. Functions vs. Methods 函数和方法其实就是一个东西,在 C# 中通常称之为方法方法,就是一块打包的代码 比如我们最常见的,就是在 Unity 中初始化 C# 脚本的时候出现的两个方法: // Start …...
2024/4/28 21:05:30 - 初探并发
并发和并行 并发 并发就是两个或者多个事件在同一个时间段内发生,这样在宏观的尺度上他们是同时发生的。 例如事件A发生100毫秒之后,事件B发生了,它们在毫秒级的尺度上是依次发生的。 但是在秒级的尺度,时间A和时间B是在同一秒…...
2024/4/28 21:27:28 - centos安装udp,tcp的测试工具
1.下载安装包 wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz 2.解压缩文件 tar -zxvf netcat-0.7.1.tar.gz -C /usr/local 3.切换至/usr/local/netcat-0.7.1 1>查看编译配置文件 ./configure 2>编译安装 make && ma…...
2024/4/27 14:13:51 - 6.10tableau作业
一.根据所选维度和度量进行数据展示 操作: 1.创建所选度量参数和所选维度参数 2.创建所选维度和所选度量字段...
2024/4/25 22:07:57 - 安装scrapy的三种方法
方法一:使用pip直接安装 Windows:打开cmd,输入 pip install scrapy ,回车。 Mac:打开终端,输入 pip3 install scrapy,回车。 方法二:使用清华镜像 Windows:打开cmd&am…...
2024/5/1 1:26:56 - 【Spring】spring如何注入ServletRequest、ServletResponse
使用姿势 spring里有很多小知识点,今天学习一下ServletRequest、ServletResponse是如何注入容器里面的。 看一个小例子,如果我们想在controller的方法里面获取request可以怎么做? 参数中添加对应参数这种方式就是在方法后面加一个HttpServl…...
2024/5/1 5:41:21 - 移动端和web端测试有什么区别
移动端和web端测试有什么区别 单纯从功能测试的层面上来讲的话,APP 测试、web 测试 在流程和功能测试上是没有区别的。 根据两者载体不一样,则区别如下: 系统结构方面 web项目,b/s架构,基于浏览器的;web测…...
2024/5/1 18:42:34 - 3分钟学完Python,直接从入门到精通【史上最强干货库】
作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向“大佬”的段位,如果已经学了C或者C或者说如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,…...
2024/5/2 5:23:42 - OPPOR9t 官方原厂售后线刷包救砖包解账户锁屏幕锁
R9T下载地址: https://pan.baidu.com/s/1BAnXsO4GJBjsrHruqArGzQ...
2024/4/7 13:07:08 - 一个java后端开发人员接触到uniapp/uni-app开发安卓对接极光推送的点点滴滴
我是一个1年工作经验的java开发后端,菜的要死,学习过一点基础的前端vue开发,所以再看uniapp开发的时候让我觉得很有意思,也觉得自己应该也可以开发玩一玩,除了布局样式很薄弱,但是开发逻辑还是可以写一点的…...
2024/4/23 18:19:52 - Java中线程的使用(Thread类)
如何创建线程 创建线程的两种方式:继承Tread类,实现Runnable接口 继承Thread类 需要基层Thread类,并重写run方法,run方法里的内容就是线程需要执行的。 然后调用t.start()方法来开启这个线程。 public class Test_1 extends …...
2024/5/5 16:08:45 - 201819101026郝永华作业
java <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>显示试题</title> </head> <body> <div style"line-height:23px"><header><h1>测试&l…...
2024/4/7 13:07:05 - java开发环境JDK
jdk的安装与配置...
2024/4/23 19:25:40 - leetcode---重排链表
/*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {/*思路:1.使用快慢指针,将链表分成前后两个部分 L…...
2024/4/7 13:07:04
最新文章
- 企业节能降耗系统,助力企业节能降耗
随着社会的发展和能源消耗的增加,节能降耗已经成为企业可持续发展的重要课题。为了更有效地监测和管理能源消耗,越来越多的企业开始使用能耗在线监测系统。作为一种节能降耗的有力手段,能耗在线监测系统在企业中得到广泛应用。 能耗在线监测…...
2024/5/7 14:27:57 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 代码随想录35期Day08-字符串
344.反转字符串 位运算 func reverseString(s []byte) {l : 0r : len(s) - 1for l < r {s[l] ^ s[r]s[r] ^ s[l]s[l] ^ s[r]lr--} }541. 反转字符串II 没技巧 func reverseStringRange(s []byte, l int, r int) {if r > len(s) {r len(s) - 1}for l < r {s[l] ^…...
2024/5/6 17:52:14 - promise.all方式使用
romise.all( ).then( ) 处理多个异步任务,且所有的异步任务都得到结果时的情况。 比如:用户点击按钮,会弹出一个弹出对话框,对话框中有两部分数据呈现,这两部分数据分别是不同的后端接口获取的数据。 弹框弹出后的初…...
2024/5/6 9:11:04 - Verilog基础【二】
3.1 Verilog 连续赋值 关键词:assign, 全加器 连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。: assign LHS_target RHS_expression ;LHS(left hand side)…...
2024/5/7 3:16:07 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/6 18:23:10 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/6 18:40:38 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/6 23:37:19 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/7 14:19:30 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/7 0:32:52 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/6 6:01:13 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/6 7:24:06 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/7 1:54:46 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/6 20:04:22 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/7 0:32:51 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/6 7:24:04 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/6 7:24:04 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/6 19:38:16 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/6 7:24:03 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/7 0:32:49 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/6 21:25:34 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/7 11:08:22 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/7 7:26:29 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/7 0:32:47 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/6 16:50:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57