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

Gradle+SpringBoot多模块开发

关于使用Gradle结合SpringBoot进行多模块开发。
本来是打算使用buildSrc之类的,但是感觉好像好麻烦,使用这种方法就可以实现,没必要采用其他的。
我不怎么会表述,可能写的跟粑粑一样,哈哈哈哈
这是我的项目地址。
存在gitee,会一直更新
TinaSprout
首先这是模块的目录结构

C:\USERS\MI\CODESPACE\IDEAPROJECTS\TINASPROUT.gitignore
│  build.gradle
│  gradlew
│  gradlew.bat
│  LICENSE
│  settings.gradle
│
├─.gradle
│  ├─7.6.1
│  │  │  gc.properties
│  │  │
│  │  ├─checksums
│  │  │      checksums.lock
│  │  │      md5-checksums.bin
│  │  │      sha1-checksums.bin
│  │  │
│  │  ├─dependencies-accessors
│  │  │      dependencies-accessors.lock
│  │  │      gc.properties
│  │  │
│  │  ├─executionHistory
│  │  │      executionHistory.bin
│  │  │      executionHistory.lock
│  │  │
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  │      resourceHashesCache.bin
│  │  │
│  │  └─vcsMetadata
│  ├─buildOutputCleanup
│  │      buildOutputCleanup.lock
│  │      cache.properties
│  │      outputFiles.bin
│  │
│  └─vcs-1
│          gc.properties
│
├─.idea
│  │  compiler.xml
│  │  git_toolbox_prj.xml
│  │  gradle.xml
│  │  jarRepositories.xml
│  │  misc.xml
│  │  modules.xml
│  │  vcs.xml
│  │  workspace.xml
│  │
│  └─modules
│      ├─tinasprout-core
│      │      TinaSprout.tinasprout-core.main.iml
│      │
│      └─tinasprout-robot
│              TinaSprout.tinasprout-robot.main.iml
│
├─gradle
│  └─wrapper
│          gradle-wrapper.jar
│          gradle-wrapper.properties
│
├─tinasprout-core
│  │  .gitignore
│  │  build.gradle
│  │  gradlew
│  │  gradlew.bat
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─wuxianggujun
│      │  │          └─tinasproutcore
│      │  │              │  TinaSproutCoreApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      BotConfig.java
│      │  │              │
│      │  │              └─network
│      │  │                      WsHandler.java
│      │  │
│      │  └─resources
│      │      │  application.properties
│      │      │
│      │      ├─static
│      │      └─templates
│      └─test
│          └─java
│              └─com
│                  └─wuxianggujun
│                      └─tinasproutcore
│                              TinaSproutCoreApplicationTests.java
│
└─tinasprout-robot│  .gitignore│  build.gradle│  gradlew│  gradlew.bat│├─gradle│  └─wrapper│          gradle-wrapper.jar│          gradle-wrapper.properties│└─src├─main│  ├─java│  │  └─com│  │      └─wuxianggujun│  │          └─tinasproutrobot│  │                  TinasproutRobotApplication.java│  ││  └─resources│      │  application.properties│      ││      ├─static│      └─templates└─test└─java└─com└─wuxianggujun└─tinasproutrobotTinasproutRobotApplicationTests.java

步骤就是,现在创建一个Gradle项目,取名为TinaSprout(当然,这是我项目的名字,你们随便取)然后删除src的目录,用不到。
然后新建两个子模块tinasprout-coretinasprout-robot
tinasprout-core ----- 是用来写核心框架的。
tinasprout-robot -----是SpringBoot启动项目。
将两个子模块的settings.gradle删除,不需要。
完成之后开始编写我们根目录的settings.gradle文件,将两个子模块引入。

rootProject.name = 'TinaSprout'
include 'tinasprout-core'
include 'tinasprout-robot'

现在我们开始编写根目录的build.gradle,用于管理子模块

buildscript {repositories {mavenLocal()maven {url 'https://repo.huaweicloud.com/repository/maven/'}}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:3.0.4")}
}plugins {id 'java'id 'org.springframework.boot' version '3.0.4' apply false//apply false的作用是告诉Gradle不要执行插件的逻辑,只是声明依赖id 'io.spring.dependency-management' version '1.1.0'
}allprojects {apply plugin: 'java'group 'com.wuxianggujun'version '1.0-SNAPSHOT'sourceCompatibility = '17'configurations {compileOnly {extendsFrom annotationProcessor}}repositories {mavenCentral()maven {url 'https://repo.huaweicloud.com/repository/maven/'}}dependencies {testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'}tasks.withType(JavaCompile) {options.encoding = "UTF-8"}}subprojects {apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'dependencyManagement {imports {mavenBom "org.springframework.boot:spring-boot-dependencies:3.0.4"}}dependencies {implementation 'org.springframework.boot:spring-boot-starter'implementation 'org.springframework.boot:spring-boot-starter-web'compileOnly 'org.projectlombok:lombok'developmentOnly 'org.springframework.boot:spring-boot-devtools'annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'annotationProcessor 'org.projectlombok:lombok'testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') {useJUnitPlatform()}}

通过上面的build.gradle配置文件,设置了allprojects和subprojects用于定义一些共用的内容。反正不难,应该看得懂吧!
接下来是tinasprout-core,我是想将这个打包成jar包,供给tinasprout-robot使用。所以指定bootjar的enabled为false,jar 的enabled为true

bootJar{enabled(false)archiveBaseName = 'tinasprout-core'archiveVersion = '0.0.1-SNAPSHOT'
}jar{enabled = true
}dependencies {implementation "com.alibaba:fastjson:1.2.83"implementation 'io.netty:netty-all:4.1.86.Final'
}

接下来,我们看tinasprout-robot的配置文件,这是用于部署在服务器启动SpringBoot的。

springBoot {mainClass = 'com.wuxianggujun.tinasproutrobot.TinasproutRobotApplication'
}bootJar {archiveBaseName = 'TinaSprout'archiveVersion = '0.0.1-SNAPSHOT'// 将子模块一起打包进来includeEmptyDirs = true// 设置输出目录,相对于项目根目录destinationDirectory = file("$rootDir/build")
}dependencies {implementation project(':tinasprout-core')
}

指定springBoot的mainClass,用于在jar启动的时候可以运行springboot。
bootJar的一些属性,是我自己假的,当然你们也可以删除,不影响。
我是要添加这些是要将这个jar包,部署在服务器,所以修改名称输出在根目录的build文件下。
在这里插入图片描述
通过运行bootjar将SpringBoot项目打包成jar包,我们就可以在build目录中看见。
在这里插入图片描述
现在项目模块化已经完成了,我也不知道应该搞什么。直接来运行看看效果吧。
打开终端,将文件夹拖动到当前目录,我们使用命令来查看一下jar包。
在这里插入图片描述
使用这条命令查看,这个命令用于查看一个 JAR 文件中包含的所有文件和目录,可以用来确认 JAR 文件中是否包含了需要的类和资源文件。

jar tf .\TinaSprout-0.0.1-SNAPSHOT.jar //其他命令
jar tf <jar包> | grep 'BOOT-INF/lib' 
jar tf <jar包> | grep 'BOOT-INF/classes'

在这里插入图片描述
这是输出内容,可以看到tinasprout-core-1.0-SNAPSHOT-plain已经被打包进去了。

META-INF/
META-INF/MANIFEST.MF
org/
org/springframework/
org/springframework/boot/
org/springframework/boot/loader/
org/springframework/boot/loader/ClassPathIndexFile.class
org/springframework/boot/loader/ExecutableArchiveLauncher.class
org/springframework/boot/loader/JarLauncher.class
org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class
org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
org/springframework/boot/loader/LaunchedURLClassLoader.class
org/springframework/boot/loader/Launcher.class
org/springframework/boot/loader/MainMethodRunner.class
org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class
org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class
org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class
org/springframework/boot/loader/PropertiesLauncher.class
org/springframework/boot/loader/WarLauncher.class
org/springframework/boot/loader/archive/
org/springframework/boot/loader/archive/Archive$Entry.class
org/springframework/boot/loader/archive/Archive$EntryFilter.class
org/springframework/boot/loader/archive/Archive.class
org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class
org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class
org/springframework/boot/loader/archive/ExplodedArchive.class
org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class
org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class
org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class
org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class
org/springframework/boot/loader/archive/JarFileArchive.class
org/springframework/boot/loader/data/
org/springframework/boot/loader/data/RandomAccessData.class
org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class
org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class
org/springframework/boot/loader/data/RandomAccessDataFile.class
org/springframework/boot/loader/jar/
org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class
org/springframework/boot/loader/jar/AbstractJarFile.class
org/springframework/boot/loader/jar/AsciiBytes.class
org/springframework/boot/loader/jar/Bytes.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class
org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class
org/springframework/boot/loader/jar/CentralDirectoryParser.class
org/springframework/boot/loader/jar/CentralDirectoryVisitor.class
org/springframework/boot/loader/jar/FileHeader.class
org/springframework/boot/loader/jar/Handler.class
org/springframework/boot/loader/jar/JarEntry.class
org/springframework/boot/loader/jar/JarEntryCertification.class
org/springframework/boot/loader/jar/JarEntryFilter.class
org/springframework/boot/loader/jar/JarFile$1.class
org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class
org/springframework/boot/loader/jar/JarFile.class
org/springframework/boot/loader/jar/JarFileEntries$1.class
org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class
org/springframework/boot/loader/jar/JarFileEntries$Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class
org/springframework/boot/loader/jar/JarFileEntries.class
org/springframework/boot/loader/jar/JarFileWrapper.class
org/springframework/boot/loader/jar/JarURLConnection$1.class
org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class
org/springframework/boot/loader/jar/JarURLConnection.class
org/springframework/boot/loader/jar/StringSequence.class
org/springframework/boot/loader/jar/ZipInflaterInputStream.class
org/springframework/boot/loader/jarmode/
org/springframework/boot/loader/jarmode/JarMode.class
org/springframework/boot/loader/jarmode/JarModeLauncher.class
org/springframework/boot/loader/jarmode/TestJarMode.class
org/springframework/boot/loader/util/
org/springframework/boot/loader/util/SystemPropertyUtils.class
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/com/
BOOT-INF/classes/com/wuxianggujun/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/TinasproutRobotApplication.class
BOOT-INF/classes/application.properties
BOOT-INF/lib/
BOOT-INF/lib/tinasprout-core-1.0-SNAPSHOT-plain.jar
BOOT-INF/lib/spring-boot-autoconfigure-3.0.4.jar
BOOT-INF/lib/spring-boot-3.0.4.jar
BOOT-INF/lib/jakarta.annotation-api-2.1.1.jar
BOOT-INF/lib/spring-webmvc-6.0.6.jar
BOOT-INF/lib/spring-web-6.0.6.jar
BOOT-INF/lib/spring-context-6.0.6.jar
BOOT-INF/lib/spring-aop-6.0.6.jar
BOOT-INF/lib/spring-beans-6.0.6.jar
BOOT-INF/lib/spring-expression-6.0.6.jar
BOOT-INF/lib/spring-core-6.0.6.jar
BOOT-INF/lib/snakeyaml-1.33.jar
BOOT-INF/lib/fastjson-1.2.83.jar
BOOT-INF/lib/netty-all-4.1.89.Final.jar
BOOT-INF/lib/logback-classic-1.4.5.jar
BOOT-INF/lib/log4j-to-slf4j-2.19.0.jar
BOOT-INF/lib/jul-to-slf4j-2.0.6.jar
BOOT-INF/lib/spring-jcl-6.0.6.jar
BOOT-INF/lib/jackson-datatype-jsr310-2.14.2.jar
BOOT-INF/lib/jackson-module-parameter-names-2.14.2.jar
BOOT-INF/lib/jackson-annotations-2.14.2.jar
BOOT-INF/lib/jackson-core-2.14.2.jar
BOOT-INF/lib/jackson-datatype-jdk8-2.14.2.jar
BOOT-INF/lib/jackson-databind-2.14.2.jar
BOOT-INF/lib/tomcat-embed-websocket-10.1.5.jar
BOOT-INF/lib/tomcat-embed-core-10.1.5.jar
BOOT-INF/lib/tomcat-embed-el-10.1.5.jar
BOOT-INF/lib/micrometer-observation-1.10.4.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-x86_64.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-aarch_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-transport-classes-epoll-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-classes-kqueue-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-native-unix-common-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-4.1.89.Final.jar
BOOT-INF/lib/netty-buffer-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-haproxy-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http2-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-memcache-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-mqtt-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-redis-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-smtp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-socks-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-stomp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-xml-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-4.1.89.Final.jar
BOOT-INF/lib/netty-common-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-proxy-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-ssl-ocsp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-rxtx-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-sctp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-udt-4.1.89.Final.jar
BOOT-INF/lib/logback-core-1.4.5.jar
BOOT-INF/lib/slf4j-api-2.0.6.jar
BOOT-INF/lib/log4j-api-2.19.0.jar
BOOT-INF/lib/micrometer-commons-1.10.4.jar
BOOT-INF/classes/static/
BOOT-INF/classes/templates/
BOOT-INF/lib/spring-boot-jarmode-layertools-3.0.4.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idx

接下来,运行看看

java -jar .\TinaSprout-0.0.1-SNAPSHOT.jar 

在这里插入图片描述
输入命令之后可以看到。项目已经成功的被启动了。
在这里插入图片描述

相关文章:

Gradle+SpringBoot多模块开发

关于使用Gradle结合SpringBoot进行多模块开发。 本来是打算使用buildSrc之类的&#xff0c;但是感觉好像好麻烦&#xff0c;使用这种方法就可以实现&#xff0c;没必要采用其他的。 我不怎么会表述&#xff0c;可能写的跟粑粑一样&#xff0c;哈哈哈哈 这是我的项目地址。 存在…...

Qt 之 emit、signals、slot的使用

本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;C语言基础&#xff0c;Qt编程入门&#xff0c;QT信号与槽机制&#xff0c;QT界面开发-图像绘制&#xff0c;QT网络&#xff0c;QT数据库编程&#xff0c;QT项目实战&#xff0c;QSS&am…...

每日学术速递3.6

Subjects: cs.CV 1.Multi-Source Soft Pseudo-Label Learning with Domain Similarity-based Weighting for Semantic Segmentation 标题&#xff1a;用于语义分割的基于域相似性加权的多源软伪标签学习 作者&#xff1a;Shigemichi Matsuzaki, Hiroaki Masuzawa, Jun Miura …...

C# 将对象转换成字节数组(二进制数据)

在将自定义对象或者数组等这样的数据存储到数据库时往往需要转换成二进制字节&#xff0c;尤其是在一些O/RM数据库框架中&#xff0c;下面是转换的函数&#xff0c;一个是将对象转换成二进制字节数组&#xff0c;另一个是将从数据库中读取的二进制流转换成程序中的对象。 这里…...

巾帼绽芬芳 一起向未来(下篇)

编者按&#xff1a;为了隆重纪念纪念“三八”国际妇女节113周年&#xff0c;快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇&#xff08;节日简介、节日发展和节日意义&#xff09;、中篇&#xff08;节日活动宗旨和世界各国庆祝方式&#xff09;和下篇&…...

代码还原小试牛刀(一):魔改的MD5

一、目标 2023年了&#xff0c;MD5已经是最基础的签名算法了&#xff0c;但如果你还只是对输入做了简单的MD5&#xff0c;肯定会被同行们嘲笑。加点盐&#xff08;salt&#xff09;是一种基本的提升&#xff0c;但在这个就业形势严峻的时代&#xff0c;仅仅加盐肯定不够了。 …...

6. 找大佬

1 题目描述 找大佬成绩20开启时间2021年09月24日 星期五 18:00折扣0.8折扣时间2021年11月15日 星期一 00:00允许迟交否关闭时间2021年11月23日 星期二 10:00 众所周知&#xff0c;每个专业里都会有一些大佬隐藏在人群里。软件工程专业也是如此。今天的你就像从人群中找到真正的…...

【CSS】标签显示模式 ① ( 标签显示模式 | 块级元素 )

文章目录一、标签显示模式 ( 块级元素 | 行内元素 )二、块级元素1、块级元素简介2、块级元素特点3、文字块级元素4、代码示例一、标签显示模式 ( 块级元素 | 行内元素 ) 标签显示模式 : 指的是 标签显示的方式 , 标签类型有很多 , 不同的情景使用不同类型的标签 ; 块级元素 : …...

hive真实表空间大小统计

1. 问题 如果是采用hdfs上传加载的表、或者是flume直接写hdfs的表空间通常看hive的属性是不准确的。 2. 思路 为了使结果更精确&#xff0c;我们直接使用linux下命令统计hive仓库目录下的每个表对应的文件夹目录占用空间的大小。 3. 解决方法 这里建立三层表结构 ods: 原始…...

微信小程序引入Vant UI步骤

官方文档教程 1、通过 npm 安装 # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i vant-weapp -S --production2、修改 app.json 将 app.json 中的 “style”: “v2” 去除&#xff0c;小程序的新…...

【震撼发布】《致敬未来的攻城狮计划》| 文末赠书3本

《致敬未来的攻城狮计划》—— 文末有福利 摘要&#xff1a; 一个崭新的计划&#xff0c;寻找那群有志于向嵌入式发展的未来工程师&#xff01; 文章目录1 活动计划初衷2 活动计划形式3 活动计划收获4 活动计划要求5 活动计划时间6 活动计划致谢7 活动计划特别说明8 温馨提示9 …...

8.装饰者模式

目录 简介 角色组成 实现步骤 1. 新建 Log.class&#xff0c;添加如下代码 2. 新建 Log4j.class&#xff0c;继承 Log.class&#xff0c;并实现 record() 方法 3. 新建 Decorator.class&#xff0c;继承 Log.class 4. 新建 Log4jDecorator.class&#xff0c;继承 Decorat…...

GIT基础常用命令-1 GIT基础篇

git基础常用命令-1 GIT基础篇1.git简介及配置1.1 git简介1.2 git配置config1.2.1 查看配置git config1.2.2 配置设置1.2.3 获取帮助git help2 GIT基础常用命令2.1 获取镜像仓库2.1.1 git init2.1.2 git clone2.2 本地仓库常用命令2.2.1 git status2.2.2 git add2.2.3 git diff2…...

华为OD机试题,用 Java 解【数列描述】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

2022掉队的“蔚小理”,按下了兔年加速键

配图来自Canva可画 进入2023年&#xff0c;各大车企又展开了新一轮的“竞速”。尽管1月份汽车整体销量出现了“阴跌”&#xff0c;但从各路车企发布的销量目标来看&#xff0c;车企对于2023依旧保持着较高的信心和预期。在一众车企中&#xff0c;以“蔚小理”为代表的新势力们…...

【NLP相关】attention的代码实现

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

凌恩生物资讯

凌恩生物转录组项目包含范围广&#xff0c;项目经验丰富&#xff0c;人均10年以上项目经验&#xff0c;其中全长转录组测序研究基因结构已经成为发文章的趋势&#xff0c;研究物种包括高粱、玉米、拟南芥、鸡、人和小鼠、毛竹、棉花等。凌恩生物提供专业的全长转录组测序及分析…...

Leetcode 148. 排序链表(二路归并)

题目&#xff1a;    给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 解法一&#xff1a;    递归解法&#xff0c;自顶向下    链表版二路归并排序&#xff08;升序&#xff0c;递归版&#xff09;&#xff0c;稳定排序    时间复杂度…...

记录Paint部分常用的方法

Paint部分常用的方法1、实例化之后Paint的基本配置2、shader 和 ShadowLayer3、pathEffect4、maskFilter5、colorFilter6、xfermode1、实例化之后Paint的基本配置 Paint.Align Align指定drawText如何将其文本相对于[x,y]坐标进行对齐。默认为LEFTPaint.Cap Cap指定了笔画线和路…...

ArrayList集合底层原理

ArrayList集合底层原理ArrayList集合底层原理1.介绍2.底层实现3.构造方法3.1集合的属性4.扩容机制5.其他方法6.总结ArrayList集合底层原理 1.介绍 ​ ArrayList是List接口的可变数组的实现。实现了所有可选列表操作&#xff0c;并允许包括 null 在 内的所有元素。 每个 Array…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...