初识Maven(一)命令行操作和idea创建maven工程

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供**构建**和**依赖**管理支持的工具。

 

构建过程包含的主要的环节:- 清理:删除上一次构建的结果,为下一次构建做好准备
- 编译:Java 源程序编译成 *.class 字节码文件
- 测试:运行提前准备好的测试程序
- 报告:针对刚才测试的结果生成一个全面的信息
- 打包- Java工程:jar包- Web工程:war包
- 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入Maven的本地仓库
- 部署- 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上- 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上
依赖管理中要解决的具体问题:- jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
- jar 包之间的依赖:通过依赖的传递性自动完成
- jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

fd0f8a1f30a9423d83d3c714f7526018.png

 Maven下载页面:Maven – Download Apache Maven

下载好压缩包后解压(记得钥解压到非中文、没有空格的目录)

198e559f14c24ab38dfc3aabb499c333.png

 进入Maven的核心配置文件conf/setting.xml

9f1ab21a3dc742238a638c3349152778.png

打开看到如图部分,如果没有自己指定本地仓库,则会按照图中所示的路径存放后面所需的资源。所以我们可以按照图中格式自己手动配置本地仓库的位置(非中文、没有空格

1d6efaf60645456e834798d347197f35.png

 配置镜像仓库,在配置文件中,原本是如下配置

b18550b8da6e48b6b89a43bcec0b2f8e.png

 但Maven下载jar包默认访问境外的中央仓库,速度慢,如下改成国内阿里云提供的镜像仓库,访问国内网站

adca88e9e1a447829507284702a6d941.png

配置Maven工程的基础JDK(我用的适合1.8

08697bbfee284d68baf8c580b4513566.png 配置环境变量

Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。

新建-》按图配置

5571635d0a74428a9f61672601429613.png

 

 配置path变量

c1c7303a7aae4fe4a309beb0a52568e6.png

在命令行查看一下是否可以 

配置完成则可以在命令行查看Maven版本

e1680abe2a4c44d18b48bd7287a0ef5f.png

 

 

根据坐标创建Maven工程

Maven中的坐标
#[1]向量说明
使用三个『向量』在『Maven的仓库』中唯一的定位到一个『jar』包。groupId:公司或组织的 id
artifactId:一个项目或者是项目中的一个模块的 id
version:版本号
#[2]三个向量的取值方式
groupId:公司或组织域名的倒序,通常也会加上项目名称
例如:com.atguigu.maven
artifactId:模块的名称,将来作为 Maven 工程的工程名
version:模块的版本号,根据自己的需要设定
例如:SNAPSHOT 表示快照版本,正在迭代过程中,不稳定的版本
例如:RELEASE 表示正式版本
举例:groupId:com.atguigu.maven
artifactId:pro01-atguigu-maven
version:1.0-SNAPSHOT

坐标和仓库中jar包的存储路径之间的对应关系

5454a1aebb444648a098730c59d8eac5.png

 

用命令行操作Maven

创建目录作为后面操作的工作空间(存储创建的maven工程

例如:D:\software\ja\Maven-workspace\summer-maven-try

5b16e8b33a1749e9a0b8e682567a450d.png

 如图在命令行中在工作空间目录下使用如下命令创建Maven工程

c5f9cb8b23a64238af18eeb96fd2847f.png

 在下载完后会出现

dd2df7879f2847d1bcb689bbea6fdd56.png

(7识上图中数字7后代表的选项操作,也可以输别的数) 

就是对应上面所说的坐标信息 ,可按下图示例操作(名字不唯一,自定义

290b6a2709724c139dd252c816eecd6e.png

 上图pro-maven-java(Maven下的java工程)

根据上述操作完,得到如下图构建成功的绿色字体提示 

671e13e7cdd14c47bb4956cf04104bb2.png

dir /b 可以查看当前路径下的所有文件和文件夹。
dir /b /s 可以查看当前路径下的所有文件和文件夹以及子目录下的文件。

如下图我们在我们的工作空间发现在执行完上面的工程创建后,在该目录下自动创建出如下文件

我的命名如下
groupId:personal.august.maven
artifactId:project01-maven-java
version:1.0-SNAPSHOT

(下图是依照我的命名得到的文件路径)

5ea1dff44f504f8eb7239a3582a820b6.png

创建完工程后做一些调整

自动生成的 App.java 和 AppTest.java 可以删除。(大概就是下面这样的简单代码,我们可以用也可以自己创建)

6581615a6d2a4d768c26942cf3f2fccd.png

Maven 默认生成的工程,对 junit 依赖的是较低的 3.8.1 版本,我们可以改成较适合的 4.12 版本。(junit3不支持注解)

c3deaabedfdd4c5ea043d67c46a99f9c.png

在如图中的pom.xml文件修改 

<!-- 依赖信息配置 -->
<!-- dependencies复数标签:里面包含dependency单数标签 -->
<dependencies><!-- dependency单数标签:配置一个具体的依赖 --><dependency><!-- 通过坐标来依赖其他jar包 --><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- 依赖的范围 --><scope>test</scope></dependency>
</dependencies>

但是改哪个版本,按当时吧,我看的教程应该还没有很久,

自动生成的pom.xml解读(配置信息都在这个文件里

<!-- 当前Maven工程的坐标 --><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><!-- 当前Maven工程的打包方式,可选值有下面三种: --><!-- jar:表示这个工程是一个Java工程  --><!-- war:表示这个工程是一个Web工程 --><!-- pom:表示这个工程是“管理其他工程”的工程 --><packaging>jar</packaging><name>pro01-maven-java</name><url>http://maven.apache.org</url><properties><!-- 工程构建过程中读取源码时使用的字符集 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- 当前工程所依赖的jar包 --><dependencies><!-- 使用dependency配置一个具体的依赖 --><dependency><!-- 在dependency标签内使用具体的坐标依赖我们需要的一个jar包 --><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- scope标签配置依赖的范围 --><scope>test</scope></dependency></dependencies>

POM

POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现。

 

POM 理念集中体现在 Maven 工程根目录下 pom.xml 这个配置文件中。所以这个 pom.xml 配置文件就是 Maven 工程的核心配置文件。学习 Maven 就是学这个文件怎么配置,各个配置有什么用。

 

 可以发现Maven约定的目录结构:

130c940bf7b54b038b4a034611d8395d.png

 (Maven 为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。

目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码。

 

 在Maven工程下编写代码

在上述工程创建完成后,自动生成相应的文件

19510564f7404d5eb01306112843e581.png

main目录及其以下的子目录字文件为主体程序,其下的目录命名则是按照我们自定义的坐标名字自动生成

如下直观体现(和我自定义的名字有出入,图中Calculator类则是我们后面使用时创建存放的

主体程序

b23bb2d487dd4b8ea5e2701b96f08100.png

 主体程序指的是被测试的程序,同时也是将来在项目中真正要使用的程序。

36dccd247bb648d9b471c0c008dd3cca.png

(记得包名和目录得要一致)

 

20615b64e2ab4b9d81a835bf217fb8c5.png

 

package personal.august.maven;	
import org.junit.Test;
import personal.august.maven.Calculator;// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;public class CalculatorTest{@Testpublic void testSum(){// 1.创建Calculator对象Calculator calculator = new Calculator();// 2.调用Calculator对象的方法,获取到程序运行实际的结果int actualResult = calculator.sum(5, 3);// 3.声明一个变量,表示程序运行期待的结果int expectedResult = 8;// 4.使用断言来判断实际结果和期待结果是否一致// 如果一致:测试通过,不会抛出异常// 如果不一致:抛出异常,测试失败assertEquals(expectedResult, actualResult);}}

 

 执行Maven的构建命令

90b48330d1c44c28a0e816ed69bcc3bf.png

4e4b7440c1f34844bde9ca5fbe53e22c.png

 

相关操作命令

编译操作:

主程序编译:mvn compile
测试程序编译:mvn test-compile
主体程序编译结果存放的目录:target/classes
测试程序编译结果存放的目录:target/test-classes

670e464c963a44cd91603eff6cc5e120.png

(未编译前如上图)

执行完mvn compile命令后生成target文件夹(在project01-maven-java目录下执行,pom.xml的所在目录)

078935a9729a417d9964fe192c7b48b2.png

 f334134bc4f64bf4865934b1af03195c.png

16d8834013a1407ca25bb739cfe98a95.png

mvn compile(对main目录内容进行编译)

执行mvn  compile- test后(对test目录进行编译)target目录下内容:

17ace025bbfa408db08a8fea477d3f66.png

(注意编码字符集不同,电脑可能默认是ANSI,将java文件的编码改为UTF-8就可

783908a88ca04ba2aff0908fb323c93a.png

 

 清理操作

mvn clean (删除target目录)

 

测试操作

mvn test

89531d7263334f55b3509794753e9986.png

在测试之前会对其编译,所以如果特使代码有所变动,也可以同步更新

 测试的报告存放的目录:target/surefire-reports

该目录下的一些文件:

测试报告信息

b70dcbbedbe14b6db8d6a42f7b9991db.png

当前环境的信息dce5d559c6244eec92f191a0b280b46e.png

 a

打包操作

mvn package

打包的结果——jar 包,存放的目录:target

709b37a8fa1948aa8f09a53353755dc7.png

19b05d1d46264b909cee63673bea2010.png

最后一个即是打包的文件, 打开发现里面只存放主体程序文件

a

安装操作

mvn install

安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。

以我自定义的坐标为例:

<groupId>personal.august.maven</groupId><artifactId>project01-maven-java</artifactId><version>1.0-SNAPSHOT</version>

在 Maven 仓库中生成的路径如下:(已知我的仓库的位置是D:\software\ja\Maven-repository)

D:\software\ja\Maven-repository\personal\august\maven\project01-maven-java\1.0-SNAPSHOT

如下图执行mvn clean install (组合操作,清理并安装,可以确保文件时最新的状态,且clean是将工作空间的target文件删除后再生成

2adf1e3ce5e247eca8c2936211338fd4.png

d4788e2319ee4b68853694bf6722a700.png

(最后一个就是同名pom文件) 

 另外,安装操作还会将 pom.xml 文件转换为 XXX.pom 文件一起存入本地仓库。所以我们在 Maven 的本地仓库中想看一个 jar 包原始的 pom.xml 文件时,查看对应 XXX.pom 文件即可,它们是名字发生了改变,本质上是同一个文件。

57a3b5e525c4441bae8efcffeeb8cb4b.png

 (图中信息也可以体现)

 创建Maven版的Web工程

说明:

41e5176d6aed4b35b1347799263ad83c.png

 

操作:

运行生成工程的命令

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

  注意:如果在上一个工程的目录下执行 mvn archetype:generate 命令,那么 Maven 会报错:不能在一个非 pom 的工程下再创建其他工程。所以不要再刚才创建的工程里再创建新的工程,请回到工作空间根目录来操作。

不允许再java工程下创建一个web工程,要返回到上一级目录(与其平级,cd ..返回当前目录的上一级目录)

9d6605cb355e4762b2aacb0802590fc8.png

直接将上面长串的命令复制过去执行 

52b50931c2d743efa170430bc97ceb4f.png

也要按提示去自定义名字

 3a817c91e64049e698c0c781c26f6dc3.png

在pom.xml中确认打包方式为war

<packaging>war</packaging>

工程创建完成后生成的目录如下

17b06b2c365d4a97861615bf750c1c87.png

webapp 目录下有 index.jsp

WEB-INF 目录下有 web.xml

创建一些补充的目录(会比较规范)

3c6434309f5a4ecb965a0edee31b070d.png

 创建web工程的使用示例

在包下创建Servlet类(注意包名要和目录相同)

package personal.august.maven;import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;public class HelloServlet extends HttpServlet{protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("hello maven web");}}

在web.xml中注册Servlet(WEB-INF目录下)

<servlet><servlet-name>helloServlet</servlet-name><servlet-class>personal.august.maven.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>helloServlet</servlet-name><url-pattern>/helloServlet</url-pattern></servlet-mapping>

在index.jsp页面编写超链接(webapp目录下)

<html>
<body>
<h2>Hello World!</h2>
<a href="helloServlet">Access Servlet</a>
</body>
</html>

上述操作完成后,我们要对web工程进行编译

但是在编译之前我们要现导入依赖的jar包,如上HelloServlet类中导入的jar包等

以配对servlet-api.jar包的依赖为例

不知道详细信息的依赖可以到https://mvnrepository.com/网站查询。使用关键词搜索,然后在搜索结果列表中选择适合的使用。

6add3b784d214bb089b3f3568a7c07e7.png

 6a776cfd9cd442e08a6d26514de77dbd.png

点击版本号进入

f591d61db8eb4ddb87f4eb84c73775db.png

复制框中内容到pom.xml即可, (是添加在dependencies的标签内)

1ec62bc72d70426db5b8f2a101eb8929.png

 执行编译  mvn compile (在该工程目录下执行,可知和java工程一样,执行完将生成target文件夹,里面存放编译后的文件内容

a80f3196150048109c582dc0d6edf500.png

执行mvn package  将web工程打包为war

a01c55d3cfa0443aaf66a465eaa2162c.png

 如下 target目录下生成的war包,和其解压文件(倒数一二d08a048f7db1474d9b0cf6cee240cad2.png

将war部署到Tomcat 上运行(将war包复制到Tomcat/webapps目录下)

因为启动时会自动解压war包,所以也可以选择将其解压文件复制放到webapps目录下

461b950e06bd4617b8eb89f4a813cb73.png

在命令行窗口下的tomcat的bin目录下执行startup.bat,然后打开浏览器访问Document Error: Not Found

8e4d538c11434aa387a670d6f65ad101.png

3960294ae1f94f4386dd052d15556e20.png

 点击得到

7f0064ae8f7e423aac1e53be322f5681.png

 (如果遇到

a7a279726f5548fe8c2ee43444cfc87b.png

可以检查以下8080端口是否被占用,执行命令杀掉该进程后再访问

如果遇到

org.apache.catalina.LifecycleException: 协议处理程序初始化失败(再tomcat启动的页面)

可以将conf/logging.properties文件中的字符编码改为UTF-8,解决org.apache.catalina.LifecycleException: 协议处理程序初始化失败_诗水人间的博客-CSDN博客

  

 让web依赖java工程

明确一个意识:从来只有 Web 工程依赖 Java 工程,没有反过来 Java 工程依赖 Web 工程。本质上来说,Web 工程依赖的 Java 工程其实就是 Web 工程里导入的 jar 包。最终 Java 工程会变成 jar 包,放在 Web 工程的 WEB-INF/lib 目录下。

在project02-maven-web工程的pom.xmlde dependencies标签中添加如下内容

7c666269a93b4b339b1ce684704d8191.png

在web工程中,编写测试代码(放在test目录下,新创建和main同级

\project02-maven-web\src\test\java\personal\august\maven

把 Java 工程的 CalculatorTest.java 类复制到 project02-

maven-web\src\test\java\personal\august\maven目录下

执行mvn test ,测试操作中会提前自动执行编译操作,如果测试成功就说明编译也是成功的。

6d51ef6b89684d678f7767378ac33347.png

执行打包命令 mvn package,在war包中我们可以看到web工程依赖的java类放在了如下目录中 

5644818c91264a1fb80516aaf66499a0.png

 查看当前web工程所依赖的jar包的列表 mvn  dependency:list(以列表的形式查看

7dc0d2c33cd94ed18a050597854f3b87.png 在执行最后部分可以看到如下

44ee4c8d46f14651ac3beaf921b244c0.png

875638cd40dd4e7994fac802cb39e0ce.png

mvn  dependency:tree (以树的形式查看

4a2de703ef314d94b3b2dbe5102d7a7a.png

 我们在 pom.xml 中并没有依赖 hamcrest-core,但是它却被加入了我们依赖的列表。原因是:junit 依赖了hamcrest-core,然后基于依赖的传递性,hamcrest-core 被传递到我们的工程了。

 

依赖范围

标签的位置:dependencies/dependency/scope

标签的可选值:compile/test/provided/system/runtime/import

e126c796e1f64121970438758747f88e.png

 9d5c9ec478f74c558f63febce185fa1b.png

 

compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。比如 SSM 框架所需jar包。test:测试过程中使用的 jar 包,以 test 范围依赖进来。比如 junit。provided:在开发过程中需要用到的“服务器上的 jar 包”通常以 provided 范围依赖进来。比如 servlet-api、jsp-api。而这个范围的 jar 包之所以不参与部署、不放进 war 包,就是避免和服务器上已有的同类 jar 包产生冲突,同时减轻服务器的负担。“服务器上已经有了,就不用再添加

通过compile范围依赖的jar包会放入war包,通过test范围依赖的jar包不会放入war包。

 

传递的依赖性

 

A 依赖 B,B 依赖 C,那么在 A 没有配置对 C 的依赖的情况下,A 里面能不能直接使用 C?
在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。
B 依赖 C 时使用 compile 范围:可以传递
B 依赖 C 时使用 test 或 provided 范围:不能传递,所以需要这样的 jar 包时,就必须在需要的地方明确配置依赖才可以。

排除传递依赖

a3ccba1eeb204b9c99fdba97959849ad.png

配置方式(exclusions标签)

034050282e1842e7a6aba738c2197de6.png

 

继承

Maven工程之间,A 工程继承 B 工程

  • B 工程:父工程
  • A 工程:子工程

本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

(对jar包统一管理,课将所有信息版本统一再父工程中进行管理

父工程的创建(打包方式为pom,一般写不业务代码,专门管理其他Maven工程的工程

a5052a382d254b0ba67f96b42fd25b46.png

 如果没有修改打包方式就在里面创建子工程会出现错误

abd41b2f7f05452c935b1676e7ef4347.png

再父工程的目录下创建子工程

45e0221b9bdc466a93d8108e213cd4d7.png

再父工程的pom.xml中添加如下内容

(如图只有一个子工程,因为我只建了一个,haha15cfdee40ced43eb91065231d0a21a21.png

 0733f798954c48ffad8e5444c5ef44d5.png

在子工程的pom.xml中

1d11c5290e42476697dc20f47f80692a.png

父工程中配置依赖统一管理

3dd79328cf3e4e6f970319f79495ed97.png

。。。。。。。。

子工程中引用那些被父工程管理的依赖(省略版本号)

 a659bf0d6c59418c9066411da4a86aa2.png

。。。。。。。 (如果子工程自己定义了,则按子工程自己的来

 

在父工程中声明自定义属性

43ab65d391a44e5787cb0e6e2fa955db.png

 (实现同步修改,相当于typedef的效果吧)

 

聚合

概念的对应关系:从继承关系角度来看:父工程
子工程
从聚合关系角度来看:总工程
模块工程

聚合的配置(和继承一样,配置modules)

776e495dc10f454c8a99d09a986c756a.png

依赖循环问题(如果依赖是一个循环,则会发生错误,这个错误的含义是循环引用) 

 

 

使用IDEA创建Maven工程下的web工程

2022版 的IDEA创建一个maven项目(超详细)_idea创建maven项目_无尽的沉默的博客-CSDN博客

 

(记得要把本地仓库路径 、配置文件的路径等改为自己设置的)849847cf2b874042b72890c260fd2575.pngf099f10b0f794376a412279a3e96a471.png

 上面的那个Archetype可以自己选择,我看网上创建web好像是选这个

 5e4aae255dfa4265b18f86be9d743249.png

(如果没有点如下提示中的配置,则要自己去构建目录

cd7b8946bd284173a16be706c2218b30.png

 首先在main文件夹下补全java,resorces文件夹,与main同级的test文件夹(后java,resorces也和main一样去创建)

c2ccf7e9f3df4478a4df4e9fab518691.png

 7897dd3b775d4ebbadbbf2576c31fab2.png

可以发现自己创建时,会由很多提示,直接创建 

我们在文件名右击

78464acb55994d6989fe0a686c6e5fe0.jpeg

 将对应的目录设置为对应的目录类型,得到如下图标形式就可以了

e0099aef415b48a39c0c54f51e3b5f52.png

 (后来发现其实只要在创建时,直接点这里的maven就好,

 1046c94bac694315b67b251650df48d4.png

(构建系统的选项中的maven,然后点高级设置创建号一个工程,然后可以自己在添加自己需要的目录,即使没有自动生成对应groupid一样的目录,到那时自己去生成就好,这时可以设置树外观-》压缩空的中间包,创建目录时直接创建于groupid的同名软件包即可)

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI】机器学习——绪论

文章目录 1.1 机器学习概念1.1.1 定义统计机器学习与数据挖掘区别机器学习前提 1.1.2 术语1.1.3 特点以数据为研究对象目标方法——基于数据构建模型SML三要素SML步骤 1.2 分类1.2.1 参数化/非参数化方法1.2.2 按算法分类1.2.3 按模型分类概率模型非概率模型逻辑斯蒂回归 1.2.4…

力扣刷题49 字母 异位词分组

目录 题目描述代码实现基本实现优化代码 基础知识回溯集合 参考 题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”…

桌面应用小程序,一种创新的跨端开发方案

Qt Group在提及2023年有桌面端应用程序开发热门趋势时&#xff0c;曾经提及三点&#xff1a; 关注用户体验&#xff1a;无论您是为桌面端、移动端&#xff0c;还是为两者一起开发应用程序&#xff0c;有一点是可以确定的&#xff1a;随着市场竞争日益激烈&#xff0c;对产品的期…

Vue框架--Vue中的属性监听

1.侦听属性概述 Vue提供了对属性变化的侦听操作,使用watch关键字实现。当被监视的属性变化时, 回调函数自动调用, 进行相关操作。这里需要注意的是你所侦听的属性必须存在。 2.代码实现 可以使用两种方式实现属性的侦听。 第一种:我们把侦听属性作为一个配置项目,放入Vue实…

ctfhub ssrf(3关)

文章目录 内网访问伪协议读取文件扫描端口 内网访问 根据该题目&#xff0c;是让我们访问127.0.0.1/falg.php&#xff0c;访问给出的链接后用bp抓包&#xff0c;修改URL&#xff0c;发送后得到flag&#xff1a; 伪协议读取文件 这题的让我们用伪协议&#xff0c;而网站的目录…

用WebGPU实现基于物理的渲染

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 最近&#xff0c;我花了相当多的时间在 WebGPU 中使用 IBL&#xff08;基于图像的照明&#xff09;编写 PBR&#xff08;基于物理的渲染&#xff09;渲染器。 PBR 本身并没有什么新奇之处。 这是一项自 2014 年以来就存在的…

GeoServe Web 管理界面 实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

tkinter控件样式

文章目录 以按钮为例共有参数动态属性 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框&#x1f48e;文件对话框&#x1f48e;控件样式扫雷小游戏&#x1f48e;强行表白神器 以按钮为例 tkinter对控件的诸…

47、TCP的流量控制

从这一节开始&#xff0c;我们学习通信双方应用进程建立TCP连接之后&#xff0c;数据传输过程中&#xff0c;TCP有哪些机制保证传输可靠性的。本节先学习第一种机制&#xff1a;流量控制。 窗口与流量控制 首先&#xff0c;我们要知道的是&#xff1a;什么是流量控制&#xff…

【GPT引领前沿】GPT4技术与AI绘图

推荐阅读&#xff1a; 1、遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用 2、GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程…

Mybatis的关联关系配置一对一,一对多,多对多的映射关系

目录 关联关系映射 一对一关联&#xff1a; 一对多关联&#xff1a; 多对多关联&#xff1a; 导入数据库表 一对多 一对一 多对多 关联关系映射 关联关系映射在Mybatis中主要通过三种方式实现&#xff1a;一对一关联和一对多关联及多对多关联。 一对一关联&#xff1a;…

RHCA之路---EX280(5)

RHCA之路—EX280(5) 1. 题目 Using the example files from the wordpress directory under http://materials.example.com/exam280/wordpress create a WordPress application in the farm project For permanent storage use the NFS shares /exports/wordpress and /export…

【STM32】学习笔记-PWR(Power Control)电源控制

PWR&#xff08;Power Control&#xff09;电源控制 PWR&#xff08;Power Control&#xff09;电源控制是一种技术或设备&#xff0c;用于控制电源的开关和输出。它通常用于电源管理和节能&#xff0c;可以通过控制电源的工作状态来延长电子设备的使用寿命&#xff0c;减少能…

QT建立TCP服务器

QT core gui network *************************************************** #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket>//客户端头文件 #include <QList>//存放客户端…

网易低代码引擎Tango正式开源

一、Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架,借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建。Tango 低代码设计器直接读取前端项目的源代码,并以源代码为中心,执行和渲染前端视图,并为用户提供低代码可视化搭建能力,…

N5235B是德科技网络分析仪50GHz

181/2461/8938对无源元器件和简单的有源器件执行基本分析 适用于对成本非常敏感的应用&#xff0c;可以在高达 50 GHz 的频率范围内精确测量 S 参数 具有出色的性价比&#xff0c;可用于微波器件制造测试 可以配置经济型解决方案&#xff0c;用于信号完整性测量和材料表征 …

Android列表片段

下面创建第二个片段WorkoutFragment&#xff0c;它包含不同训练项目构成的一个列表&#xff0c;用户可以从这个列表中选择训练项目。 列表视图是只包含一个列表的片段 列表片段是一种专门处理列表的片段&#xff0c;它会自动绑定到一个列表视图&#xff0c;所以不需要另外创建…

关于人工智能的担忧

人工智能的快速发展引发了一系列关于其潜在风险和担忧的讨论。以下是一些常见的人们对人工智能的担忧&#xff1a; 失业问题&#xff1a;人工智能的出现可能会导致很多工作岗位的消失&#xff0c;特别是那些需要重复性劳动的工作。人们担心机器取代人类工作将导致大规模失业和社…

String.format() 格式化字符串的方法, 不同占位符表示的含义及使用方式

学习目标&#xff1a; 目标如下&#xff1a; String.format() 格式化字符串的方法&#xff0c; 不同占位符表示的含义及使用方式 学习内容&#xff1a; 内容&#xff1a; 占位符类型 String.format()方法是一种格式化字符串的方法 字符串&#xff1a;一个占位符"%s&q…

Java设计模式:四、行为型模式-08:策略模式

文章目录 一、定义&#xff1a;策略模式二、模拟场景&#xff1a;策略模式三、违背方案&#xff1a;策略模式3.0 引入依赖3.1 工程结构3.2 优惠券折扣计算类3.3 单元测试 四、改善代码&#xff1a;策略模式4.1 工程结构4.2 策略模式结构图4.3 优惠券折扣实现4.3.1 定义优惠券接…