专题二:Spring源码编译

目录

下载源码

配置Gradle

配置环境变量

配置setting文件

配置Spring源码

配置文件调整

问题解决

完整配置

gradel.properties

build.gradle

settiings.gradel


在专题一: Spring生态初探中我们从整体模块对Spring有个整体的印象,现在正式从最基础的Spring模块进一步学习,第一步当然是下载源码,因为Spring是用的Gradle编译,对于我们大部分使用Maven做jar包管理的还是不太熟悉,因此记录下。

下载源码

因为公司使用的是Spring5.2.x所以就下载了这个版本,github源码地址如下:

GitHub - spring-projects/spring-framework at v5.2.6.RELEASE:

如果网络不稳定可以使用下载压缩版即可,网络稳定的话还是建议使用git clone 这样可以看到随时切换其他版本,查看不同版本提交记录:

配置Gradle

因为Spring源码编译下选择的是Gradle,所以需要配置本地环境,目前自己电脑用的mac版本,这里先使用Mac演示配置。后面有window电脑环境的时候再补充。

官网地址:

Gradle | ReleasesFind binaries and reference documentation for current and past versions of Gradle.icon-default.png?t=N7T8https://gradle.org/releases/

下载完以后是一个压缩包

解压到本地目录:

去bin目录下执行下 gradle -v 检查下下载的文件是否有问题,如果如下所示则下载正确。

配置环境变量

# 配置gradle path
export GRADLE_HOME=/自己的全路径
export PATH=$GRADLE_HOME/bin:$PATH
# 配置生效
source ~/.bash_profile

类似java,我再上面直接贴命令了,执行上述命令以后随便进入一个目录再次执行gradle -v 看下配置的环境变量是否生效。

配置setting文件

配置阿里元仓库地址

仓库服务

配置Spring源码

配置文件调整

以下是对Spring源码导入IDEA前的Gradle配置调整的总结:

  1. 修改gradle.properties文件

    • 设置Spring版本号:version=5.2.6.RELEASE
    • 增加Gradle编译时的内存分配:org.gradle.jvmargs=-Xmx2048M,这有助于处理较大的构建任务,减少内存不足的问题。
    • 开启Gradle的缓存功能:org.gradle.caching=true,这可以提高构建速度,通过缓存避免重复编译。
    • 开启Gradle并行编译:org.gradle.parallel=true,允许Gradle在多核处理器上并行执行任务,加快构建速度。
    • 开启Gradle守护进程模式:org.gradle.daemon=true,这可以保持Gradle进程持续运行,减少启动时间。
  2. 调整settings.gradle文件

    • 通常这个文件用于指定项目根目录下的所有子项目,可能需要根据Spring源码的结构进行适当的修改,以确保所有模块都能正确识别和构建。
  3. 调整build.gradle文件

    • 这个文件定义了项目的构建逻辑,包括依赖项、插件和其他构建配置。根据Spring源码的具体需求,可能需要添加或修改依赖项和插件配置。

问题解决

如果下载的版本和我一样,都是5.2.6可能有个小问题,这个包可能下载,要不自己去仓库找到放到自己本地仓库中,或者直接注释掉

//  id 'io.spring.gradle-enterprise-conventions' version '0.0.2'

完整配置

gradel.properties

# 源码的版本
version=5.2.6.RELEASE
# JVM参数家
org.gradle.jvmargs=-Xmx2048M
# 是否开启缓存
org.gradle.caching=true
# 是否开始并行
org.gradle.parallel=true
# 石佛开启守护线程
org.gradle.daemom=true
e

build.gradle

plugins {id 'io.spring.dependency-management' version '1.0.8.RELEASE' apply falseid 'org.jetbrains.kotlin.jvm' version '1.3.72' apply falseid 'org.jetbrains.dokka' version '0.10.1' apply falseid 'org.asciidoctor.jvm.convert' version '2.4.0'
//	id 'io.spring.gradle-enterprise-conventions' version '0.0.2'id 'io.spring.nohttp' version '0.0.4.RELEASE'id 'de.undercouch.download' version '4.0.0'id 'com.gradle.build-scan' version '3.2'id "com.jfrog.artifactory" version '4.12.0' apply falseid "io.freefair.aspectj" version '4.1.1' apply falseid "com.github.ben-manes.versions" version '0.24.0'
}apply from: "$rootDir/gradle/build-scan-user-data.gradle"
ext {moduleProjects = subprojects.findAll { it.name.startsWith("spring-") }javaProjects = subprojects - project(":framework-bom")withoutJclOverSlf4j = {exclude group: "org.slf4j", name: "jcl-over-slf4j"}
}configure(allprojects) { project ->apply plugin: "io.spring.dependency-management"dependencyManagement {imports {mavenBom "com.fasterxml.jackson:jackson-bom:2.10.3"mavenBom "io.netty:netty-bom:4.1.49.Final"mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR7"mavenBom "io.rsocket:rsocket-bom:1.0.0-RC7"mavenBom "org.eclipse.jetty:jetty-bom:9.4.28.v20200408"mavenBom "org.jetbrains.kotlin:kotlin-bom:1.3.72"mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.3.5"mavenBom "org.junit:junit-bom:5.6.2"}dependencies {dependencySet(group: 'org.apache.logging.log4j', version: '2.13.2') {entry 'log4j-api'entry 'log4j-core'entry 'log4j-slf4j-impl'entry 'log4j-jul'}dependency "org.slf4j:slf4j-api:1.7.30"dependency "com.google.code.findbugs:jsr305:3.0.2"dependencySet(group: 'org.aspectj', version: '1.9.5') {entry 'aspectjrt'entry 'aspectjtools'entry 'aspectjweaver'}dependencySet(group: 'org.codehaus.groovy', version: '2.5.11') {entry 'groovy'entry 'groovy-jsr223'entry 'groovy-templates'entry 'groovy-test'entry 'groovy-xml'}dependency "io.reactivex:rxjava:1.3.8"dependency "io.reactivex:rxjava-reactive-streams:1.2.1"dependency "io.reactivex.rxjava2:rxjava:2.2.19"dependency "io.projectreactor.tools:blockhound:1.0.2.RELEASE"dependency "com.caucho:hessian:4.0.62"dependency "com.fasterxml:aalto-xml:1.2.2"dependency("com.fasterxml.woodstox:woodstox-core:6.1.1") {exclude group: "stax", name: "stax-api"}dependency "com.google.code.gson:gson:2.8.6"dependency "com.google.protobuf:protobuf-java-util:3.11.4"dependency "com.googlecode.protobuf-java-format:protobuf-java-format:1.4"dependency("com.thoughtworks.xstream:xstream:1.4.11.1") {exclude group: "xpp3", name: "xpp3_min"exclude group: "xmlpull", name: "xmlpull"}dependency "org.apache.johnzon:johnzon-jsonb:1.2.4"dependency("org.codehaus.jettison:jettison:1.3.8") {exclude group: "stax", name: "stax-api"}dependencySet(group: 'org.jibx', version: '1.3.3') {entry 'jibx-bind'entry 'jibx-run'}dependency "org.ogce:xpp3:1.1.6"dependency "org.yaml:snakeyaml:1.26"dependency "com.h2database:h2:1.4.200"dependency "com.github.ben-manes.caffeine:caffeine:2.8.1"dependency "com.github.librepdf:openpdf:1.3.14"dependency "com.rometools:rome:1.12.2"dependency "commons-io:commons-io:2.5"dependency "io.vavr:vavr:0.10.2"dependency "net.sf.jopt-simple:jopt-simple:5.0.4"dependencySet(group: 'org.apache.activemq', version: '5.8.0') {entry 'activemq-broker'entry('activemq-kahadb-store') {exclude group: "org.springframework", name: "spring-context"}entry 'activemq-stomp'}dependency "org.apache.bcel:bcel:6.0"dependency "org.apache.commons:commons-pool2:2.8.0"dependencySet(group: 'org.apache.derby', version: '10.14.2.0') {entry 'derby'entry 'derbyclient'}dependency "org.apache.poi:poi-ooxml:4.1.2"dependency "org.apache-extras.beanshell:bsh:2.0b6"dependency "org.freemarker:freemarker:2.3.30"dependency "org.hsqldb:hsqldb:2.5.0"dependency "org.quartz-scheduler:quartz:2.3.2"dependency "org.codehaus.fabric3.api:commonj:1.1.0"dependency "net.sf.ehcache:ehcache:2.10.6"dependency "org.ehcache:jcache:1.0.1"dependency "org.ehcache:ehcache:3.4.0"dependency "org.hibernate:hibernate-core:5.4.14.Final"dependency "org.hibernate:hibernate-validator:6.1.4.Final"dependency "org.webjars:webjars-locator-core:0.44"dependency "org.webjars:underscorejs:1.8.3"dependencySet(group: 'org.apache.tomcat', version: '9.0.34') {entry 'tomcat-util'entry('tomcat-websocket') {exclude group: "org.apache.tomcat", name: "tomcat-websocket-api"exclude group: "org.apache.tomcat", name: "tomcat-servlet-api"}}dependencySet(group: 'org.apache.tomcat.embed', version: '9.0.34') {entry 'tomcat-embed-core'entry 'tomcat-embed-websocket'}dependencySet(group: 'io.undertow', version: '2.0.30.Final') {entry 'undertow-core'entry('undertow-websockets-jsr') {exclude group: "org.jboss.spec.javax.websocket", name: "jboss-websocket-api_1.1_spec"}entry('undertow-servlet') {exclude group: "org.jboss.spec.javax.servlet", name: "jboss-servlet-api_3.1_spec"exclude group: "org.jboss.spec.javax.annotation", name: "jboss-annotations-api_1.2_spec"}}dependencySet(group: 'com.squareup.okhttp3', version: '3.14.7') {entry 'okhttp'entry 'mockwebserver'}dependency("org.apache.httpcomponents:httpclient:4.5.12") {exclude group: "commons-logging", name: "commons-logging"}dependency("org.apache.httpcomponents:httpasyncclient:4.1.4") {exclude group: "commons-logging", name: "commons-logging"}dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.2"dependency "org.jruby:jruby:9.2.11.1"dependency "org.python:jython-standalone:2.7.1"dependency "org.mozilla:rhino:1.7.11"dependency "commons-fileupload:commons-fileupload:1.4"dependency "org.synchronoss.cloud:nio-multipart-parser:1.1.0"dependency("dom4j:dom4j:1.6.1") {exclude group: "xml-apis", name: "xml-apis"}dependency("jaxen:jaxen:1.1.1") {exclude group: "xml-apis", name: "xml-apis"exclude group: "xom", name: "xom"exclude group: "xerces", name: "xercesImpl"}dependency("junit:junit:4.12") {exclude group: "org.hamcrest", name: "hamcrest-core"}dependency("de.bechte.junit:junit-hierarchicalcontextrunner:4.12.1") {exclude group: "junit", name: "junit"}dependency "org.testng:testng:6.14.3"dependency "org.hamcrest:hamcrest:2.1"dependency "org.awaitility:awaitility:3.1.6"dependency "org.assertj:assertj-core:3.15.0"dependencySet(group: 'org.xmlunit', version: '2.6.2') {entry 'xmlunit-assertj'entry('xmlunit-matchers') {exclude group: "org.hamcrest", name: "hamcrest-core"}}dependencySet(group: 'org.mockito', version: '3.3.3') {entry('mockito-core') {exclude group: "org.hamcrest", name: "hamcrest-core"}entry 'mockito-junit-jupiter'}dependency "io.mockk:mockk:1.10.0"dependency("net.sourceforge.htmlunit:htmlunit:2.39.1") {exclude group: "commons-logging", name: "commons-logging"}dependency("org.seleniumhq.selenium:htmlunit-driver:2.39.0") {exclude group: "commons-logging", name: "commons-logging"}dependency("org.seleniumhq.selenium:selenium-java:3.141.59") {exclude group: "commons-logging", name: "commons-logging"exclude group: "io.netty", name: "netty"}dependency "org.skyscreamer:jsonassert:1.5.0"dependency "com.jayway.jsonpath:json-path:2.4.0"dependencySet(group: 'org.apache.tiles', version: '3.0.8') {entry 'tiles-api'entry('tiles-core', withoutJclOverSlf4j)entry('tiles-servlet', withoutJclOverSlf4j)entry('tiles-jsp', withoutJclOverSlf4j)entry('tiles-el', withoutJclOverSlf4j)entry('tiles-extras') {exclude group: "org.springframework", name: "spring-web"exclude group: "org.slf4j", name: "jcl-over-slf4j"}}dependency("org.apache.taglibs:taglibs-standard-jstlel:1.2.5") {exclude group: "org.apache.taglibs", name: "taglibs-standard-spec"}dependency "com.ibm.websphere:uow:6.0.2.17"dependency "com.jamonapi:jamon:2.81"dependency "joda-time:joda-time:2.10.5"dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.6"dependency "org.javamoney:moneta:1.3"dependency "com.sun.activation:javax.activation:1.2.0"dependency "com.sun.mail:javax.mail:1.6.2"dependencySet(group: 'com.sun.xml.bind', version: '2.3.0.1') {entry 'jaxb-core'entry 'jaxb-impl'entry 'jaxb-xjc'}dependency "javax.activation:javax.activation-api:1.2.0"dependency "javax.annotation:javax.annotation-api:1.3.2"dependency "javax.cache:cache-api:1.1.0"dependency "javax.ejb:javax.ejb-api:3.2"dependency "javax.el:javax.el-api:3.0.1-b04"dependency "javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0"dependency "javax.faces:javax.faces-api:2.2"dependency "javax.inject:javax.inject:1"dependency "javax.inject:javax.inject-tck:1"dependency "javax.interceptor:javax.interceptor-api:1.2.2"dependency "javax.jms:javax.jms-api:2.0.1"dependency "javax.json:javax.json-api:1.1.4"dependency "javax.json.bind:javax.json.bind-api:1.0"dependency "javax.mail:javax.mail-api:1.6.2"dependency "javax.money:money-api:1.0.3"dependency "javax.resource:javax.resource-api:1.7.1"dependency "javax.servlet:javax.servlet-api:4.0.1"dependency "javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02"dependency "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"dependency "javax.transaction:javax.transaction-api:1.3"dependency "javax.validation:validation-api:2.0.1.Final"dependency "javax.websocket:javax.websocket-api:1.1"dependency "javax.xml.bind:jaxb-api:2.3.1"dependency "javax.xml.ws:jaxws-api:2.3.1"dependency "org.eclipse.persistence:javax.persistence:2.2.0"// Substitute for "javax.management:jmxremote_optional:1.0.1_04" which// is not available on Maven Centraldependency "org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea"dependency "org.glassfish:javax.el:3.0.1-b08"dependency "org.glassfish.main:javax.jws:4.0-b33"dependency "org.glassfish.tyrus:tyrus-container-servlet:1.13.1"}generatedPomCustomization {enabled = false}resolutionStrategy {cacheChangingModulesFor 0, "seconds"}repositories {maven {url 'https://maven.aliyun.com/repository/public'}maven {url 'https://maven.aliyun.com/repository/central'}mavenCentral()maven { url "https://repo.spring.io/libs-spring-framework-build" }}}configurations.all {resolutionStrategy {cacheChangingModulesFor 0, "seconds"cacheDynamicVersionsFor 0, "seconds"}}
}configure([rootProject] + javaProjects) { project ->group = "org.springframework"apply plugin: "java"apply plugin: "java-test-fixtures"apply plugin: "checkstyle"apply plugin: 'org.springframework.build.compile'apply from: "${rootDir}/gradle/custom-java-home.gradle"apply from: "${rootDir}/gradle/ide.gradle"pluginManager.withPlugin("kotlin") {apply plugin: "org.jetbrains.dokka"compileKotlin {kotlinOptions {jvmTarget = "1.8"freeCompilerArgs = ["-Xjsr305=strict"]allWarningsAsErrors = true}}compileTestKotlin {kotlinOptions {jvmTarget = "1.8"freeCompilerArgs = ["-Xjsr305=strict"]}}}test {useJUnitPlatform()include(["**/*Tests.class", "**/*Test.class"])systemProperty("java.awt.headless", "true")systemProperty("testGroups", project.properties.get("testGroups"))systemProperty("io.netty.leakDetection.level", "paranoid")}checkstyle {toolVersion = "8.31"configDir = rootProject.file("src/checkstyle")}dependencies {testCompile("org.junit.jupiter:junit-jupiter-api")testCompile("org.junit.jupiter:junit-jupiter-params")testCompile("org.mockito:mockito-core")testCompile("org.mockito:mockito-junit-jupiter")testCompile("io.mockk:mockk")testCompile("org.assertj:assertj-core")// Pull in the latest JUnit 5 Launcher API to ensure proper support in IDEs.testRuntime("org.junit.platform:junit-platform-launcher")testRuntime("org.junit.jupiter:junit-jupiter-engine")testRuntime("org.apache.logging.log4j:log4j-core")testRuntime("org.apache.logging.log4j:log4j-slf4j-impl")testRuntime("org.apache.logging.log4j:log4j-jul")// JSR-305 only used for non-required meta-annotationscompileOnly("com.google.code.findbugs:jsr305")testCompileOnly("com.google.code.findbugs:jsr305")checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.15")}ext.javadocLinks = ["https://docs.oracle.com/javase/8/docs/api/","https://docs.oracle.com/javaee/7/api/","https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ"https://www.ibm.com/support/knowledgecenter/SS7JFU_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/","https://glassfish.java.net/nonav/docs/v3/api/","https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/","https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/","https://tiles.apache.org/tiles-request/apidocs/","https://tiles.apache.org/framework/apidocs/","https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/","https://www.ehcache.org/apidocs/2.10.4/","https://www.quartz-scheduler.org/api/2.3.0/","https://fasterxml.github.io/jackson-core/javadoc/2.10/","https://fasterxml.github.io/jackson-databind/javadoc/2.10/","https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.10/","https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/","https://junit.org/junit4/javadoc/4.12/","https://junit.org/junit5/docs/5.6.2/api/"] as String[]
}configure(moduleProjects) { project ->apply from: "${rootDir}/gradle/spring-module.gradle"
}configure(rootProject) {description = "Spring Framework"apply plugin: "groovy"apply plugin: "kotlin"apply plugin: "io.spring.nohttp"apply plugin: 'org.springframework.build.api-diff'apply from: "${rootDir}/gradle/publications.gradle"apply from: "${rootDir}/gradle/docs.gradle"nohttp {source.exclude "**/test-output/**"whitelistFile = project.file("src/nohttp/whitelist.lines")def rootPath = file(rootDir).toPath()def projectDirs = allprojects.collect { it.projectDir } + "${rootDir}/buildSrc"projectDirs.forEach { dir ->[ 'bin', 'build', 'out', '.settings' ].collect { rootPath.relativize(new File(dir, it).toPath()) }.forEach { source.exclude "$it/**" }[ '.classpath', '.project' ].collect { rootPath.relativize(new File(dir, it).toPath()) }.forEach { source.exclude "$it" }}}publishing {publications {mavenJava(MavenPublication) {artifact docsZipartifact schemaZipartifact distZip}}}
}

settiings.gradel

pluginManagement {repositories {maven { url 'https://maven.aliyun.com/repository/public/' }gradlePluginPortal()maven { url 'https://repo.spring.io/plugins-release' }}
}
apply from: "$rootDir/gradle/build-cache-settings.gradle"include "spring-aop"
include "spring-aspects"
include "spring-beans"
include "spring-context"
include "spring-context-support"
include "spring-context-indexer"
include "spring-core"
include "kotlin-coroutines"
project(':kotlin-coroutines').projectDir = file('spring-core/kotlin-coroutines')
include "spring-expression"
include "spring-instrument"
include "spring-jcl"
include "spring-jdbc"
include "spring-jms"
include "spring-messaging"
include "spring-orm"
include "spring-oxm"
include "spring-test"
include "spring-tx"
include "spring-web"
include "spring-webmvc"
include "spring-webflux"
include "spring-websocket"
include "framework-bom"
include "integration-tests"rootProject.name = "spring"
rootProject.children.each {project ->project.buildFileName = "${project.name}.gradle"
}

嫌弃麻烦,可以直接我的配置应该就可以了。完成这些配置调整后,就可以将Spring源码导入IDEA,等待下载就完事。

BUILD SUCCESSFUL 

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

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

相关文章

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务6:安装并配置Hadoop

任务描述 项目的运行环境为基于Hadoop的全分布式模式集群。 任务的主要内容为安装Hadoop分布式集群环境。 任务指导 Hadoop集群需要整个集群所有节点安装的Hadoop版本保持一致,并且拥有相同的配置 具体配置步骤如下: 1. 解压缩Hadoop的压缩包 2. …

AI产品经理需要哪些必备技能?如何成为AI产品经理?

1.AI产品经理是什么 回答这个问题前我们首先得理清楚什么是AI产品经理,它和传统的互联网产品经理有什么区别。 1.1 AI产品经理职责 主要职责一方面是规划如何将成熟的AI技术应用在各个领域不同场景中,提升原有场景的效率或效果等;另一方面…

在线医疗诊断平台开发教程大纲 (Java 后端,Vue 前端)—实践篇-02

第三步:创建实体类和 Mapper 文件 现在我们已经设计好了数据库表结构,接下来要使用 MyBatis 将这些表映射到 Java 对象,以便在代码中进行操作。 1. 创建实体类 在 src/main/java/<your_package>/entity 目录下 (如果没有该目录,请手动创建),创建与数据库表对应的实…

基于蜉蝣优化的聚类算法(MATLAB)

优化问题广泛存在于人们的日常生活和工程领域&#xff0c;其解决如何寻找使目标值达到最优的可行解的问题。伴随着科技发展&#xff0c;优化问题在生产调度、神经网络训练、图像处理、能源系统等领域起到举足轻重的作用&#xff0c;有助于提高系统效率。优化问题依据不同标准可…

探索Spring Boot:简化Java开发的新纪元

1. 引言 在Java开发的世界里,Spring Boot无疑是一颗璀璨的明星。自诞生以来,它以简化配置、快速开发、内嵌服务器等诸多优点迅速赢得了广大开发者的青睐。本篇博客将深入探讨Spring Boot的核心概念、特点以及其在现代Java开发中的优势,并通过详细的代码示例和实践经验,展示…

Docker安装PostgreSQL详细教程

本章教程,使用Docker安装PostgreSQL具体步骤。 一、拉取镜像 docker pull postgres二、启动容器 docker run -it --name postgres --restart always -e POSTGRES_PASSWORD=123456 -e

mac上修改jupyterlab工作目录

mac上使用anaconda中的jupyterlab。 修改默认的工作目录 upyter lab --generate-config Writing default config to: /Users/xxx/.jupyter/jupyter_lab_config.py vim /Users/xiece/.jupyter/jupyter_lab_config.py # 设置c.ServerApp.notebook_dir c.ServerApp.notebook_dir …

EXCEL返回未使用数组元素(未使用值)

功能简介&#xff1a; 在我们工作中&#xff0c;需要在EXCEL表列出哪些元素&#xff08;物品或订单&#xff09;已经被使用了&#xff08;或使用了多少次&#xff09;&#xff0c;哪些没有被使用。 当数量过于庞大时人工筛选或许不是好办法&#xff0c;我们可以借助公式&…

FlinkCDC 数据同步优化及常见问题排查

【面试系列】Swift 高频面试题及详细解答 欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 欢迎关注微信公众号&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、…

偏微分方程笔记

极小位能原理&#xff1a; C 2 C^2 C2 是一个集合符号&#xff0c;表示所有二阶连续可微函数的集合 弱导数 C 2 C^2 C2 是一个集合符号&#xff0c;表示所有二阶连续可微函数的集合。 C 0 ∞ ( I ) C^{\infty}_0(I) C0∞​(I)表示于 I I I上无穷可微&#xff0c;且在端点a&…

Java学习笔记(个人向)

1. 概述 每一个应用程序都以类名开头&#xff0c;类名必须与文件名匹配&#xff0c;所以保存文件时&#xff0c;要使用类名保存&#xff1b;java中运行的每一行代码都必须在一个class中&#xff1b;在类名的开头&#xff0c;可以用权限修饰符来解释&#xff0c;如private或者p…

【JavaScript脚本宇宙】高效Web开发利器:全面解析六大HTML解析器与DOM库

精益求精&#xff1a;揭秘六个改变Web开发的HTML解析与DOM操作工具 前言 在现代Web开发中&#xff0c;HTML解析器和DOM操作库是不可或缺的工具。无论是爬取数据、处理复杂的HTML文档&#xff0c;还是模拟浏览器环境&#xff0c;这些工具都扮演着关键角色。本文将深入探讨六个…

2024 年人工智能和数据科学的五个主要趋势

引言 2023年&#xff0c;人工智能和数据科学登上了新闻头条。生成性人工智能的兴起无疑是这一显著提升曝光度的驱动力。那么&#xff0c;在2024年&#xff0c;该领域将如何继续占据头条&#xff0c;并且这些趋势又将如何影响企业的发展呢&#xff1f; 在过去几个月&#xff0c;…

Vue3实现点击按钮实现文字变色

1.动态样式实现 1.1核心代码解释&#xff1a; class"power-station-perspective-item-text"&#xff1a; 为这个 span 元素添加了一个 CSS 类&#xff0c;以便对其样式进行定义。 click"clickItem(item.id)"&#xff1a; 这是一个 Vue 事件绑定。当用户点…

ojdbc8-full Oracle JDBC 驱动程序的一个完整发行版各文件的功能

文章目录 1. ojdbc8.jar2. ons.jar -3. oraclepki.jar -4. orai18n.jar -5. osdt_cert.jar -6. osdt_core.jar -7. ojdbc.policy -8. README.txt -9. simplefan.jar -10. ucp.jar -11. xdb.jar - ojdbc8-full 是 Oracle JDBC 驱动程序的一个完整发行版&#xff0c;包含了连接和…

笔记——书签

书签 推荐系统 推荐系统之召回&#xff1a;https://cloud.baidu.com/article/3023263ES分页与排序&#xff1a;https://blog.csdn.net/weixin_44799217/article/details/127601687 测试 回归测试&#xff1a;https://www.cnblogs.com/codiary/p/17819289.html 机器学习 欠…

python-docx 拆分docx文档:按分节符拆分文档

本文目录 前言一、处理过程简述二、实现方式三、通过xml进行拆分1、完整代码【方式一】2、代码逻辑讲解3、实现效果图前言 本文主要处理的需求是,将一个docx文档,按节(section)分割成多个docx文档,分割后的文档保留原来文档的字体格式、页眉、页脚、水印等。 一、处理过…

SpringBoot 整合 SpringSecurity

1. 项目目录 2. pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.3</version> </dependency> <dependency><groupId>org.sprin…

【CSS】深入浅出弹性布局

CSS的弹性布局&#xff08;Flexbox&#xff09;是一种用于在容器中沿着一维方向&#xff08;水平或垂直&#xff09;来布局、对齐和分配容器内项目空间的有效方式。它旨在提供一个更加有效的方式来布局、对齐和分配容器中项目的空间&#xff0c;即使它们的大小未知或是动态变化…

【手撕面试题】React(高频知识点一)

每天10道题&#xff0c;100天后&#xff0c;搞定所有前端面试的高频知识点&#xff0c;加油&#xff01;&#xff01;&#xff01;在看文章的同时&#xff0c;希望不要直接看答案&#xff0c;先思考一下自己会不会&#xff0c;如果会&#xff0c;自己的答案是什么&#xff1f;想…