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

2024年发布jar到国外maven中央仓库最新教程

2024年发布jar到国外maven中央仓库最新教程

文章目录

  • 1.国外sonatype仓库的版本
    • 1.1老OSSHR账号注册说明
    • 1.2新账号注册说明
  • 2.新账号注册(必选)
  • 3.新账号登录创建Namespace
    • 3.1创建Namespace的名字的格式要求(必选)
    • 3.2发布一个静态网站(可选)
    • 3.3设置dns(可选)
    • 3.3 namespace的校验(必选)
  • 4.下载安装好gpg 创建和私钥
  • 5.idea中maven的setting.xml文件配置
  • 6.项目中配置pom
  • 7.发布项目
    • 7.1 idea中点击deploy发布
    • 7.2新账号登录后点击发布
    • 7.3搜索发布的依赖
  • 8.github使用生成的token拉取项目
  • 9.总结

1.国外sonatype仓库的版本

1.1老OSSHR账号注册说明

https://central.sonatype.org/faq/what-happened-to-issues-sonatype-org/

  这篇官网链接说了在2024年1月9号,他们宣布将很快停用issues.sonatype.org,并用 Zendesk 电子邮件接收方法替换了 Jira 的审核跟进。

image-20240318110515121

  2024.1之前老OSSHR账号注册的老账号使用推送jar到maven仓库还是使用之前的方式即可,网上都有教程的,千篇一律,坑人得很

  老式账号及配置发布参看:

https://blog.csdn.net/SpongeBob_shouse/article/details/128803753

1.2新账号注册说明

https://central.sonatype.org/publish-ea/publish-ea-guide/#why-do-we-have-requirements

image-20240318110711675

  网上很多的文章是2024年之前的教程,使用的是OSSRH来注册账号,然后去给官方提issue,去看之前那些坑文教程,就会发现访问OSSRH的官方账号注册链接(上面1.1),点开1.1的这个注册OSSRH的链接找不到提issues的crete的按钮,这个是一个很坑的地方。

2.新账号注册(必选)

https://central.sonatype.com/
https://central.sonatype.org/register/legacy/

  手册点sign in会跳到这个注册页面,填写用户名、邮箱(我使用的是qq邮箱账号)、设置下登录密码,然后点击下一步,就登录到首页了

image-20240318111226833

  如果是已经注册登录过了,访问下面的地址,点击sign in直接是弹出的是登录页面,数据用户名、登录密码直接登录即可

https://central.sonatype.com/

3.新账号登录创建Namespace

  点击pulish到创建Namespace界面,然后点击Add Namespace按钮弹框如下:

image-20240318111803528

3.1创建Namespace的名字的格式要求(必选)

  首先得准备一个能访问的、你自己的域名,一般都是将域名反写,如果你没有一个自己的域名,可以使用开源仓库gitHub/gitee的pages发布一个静态的网页,最好是发布一下这个网页能被访问到

https://central.sonatype.org/register/namespace/#managing-your-credentials

  格式要求如下:拿github和gitee来举例子:

github的格式:io.github.你的github的账号username
gitee的格式:io.gitee.你的gitee的账号username
如果你的github、gitee的username是大写的,这里默认使用的是小写,也就是它不区分大小写(如果你的账号是大写注册,这里你填写小写即可)

image-20240318112410664

  这种通过公共代码托管仓库的方式,必须按照它官方要求的这个namespace的格式来定义和去校验。

3.2发布一个静态网站(可选)

image-20240318112726047

  index.html的内容如下:

<html>
<head>我的page-test</head>
<body>this is my project<body>
</html>

  然后点击setting找到pages

image-20240318113354955

  发布pages

image-20240318113556078

  访问https://bigbigfeifei.github.io/

image-20240318113637914

  为什么这种搞呢?因为使用gitHub的pages来发布一个页面,然后我们就可以使用io.github.github的username来作为一个groupId如下的项目:

 <groupId>io.github.bigbigfeifei</groupId>

  这个是github的是这种搞的,gitee的page估计也是跟github差不多的操作,gitee的pages需要实名认证才可以使用,需要上传身份证正反面和手持身份证正反面的照片,这个也比较严格,经过验证这一步是不需要的,因为我亲测了github这种搞了一个静态页面域名可以访问到,然后发布一个项目可以发布到中央仓库上,然后我的gitee的pages提交的实名认证还没有审核过,gitee就没有发布一个bigbigfeifei.gitee.io的域名能访问到的静态页面,访问的时候是404,然后我也去发布了一个groupId如下的项目,然后去账号后台申请配置下setting的token-username和token后,也是可以正常发到中央仓库,所以这一步可以不做,略过即可

<groupId>io.gitee.bigbigfeifei</groupId>

3.3设置dns(可选)

  如果你不是用的上面的一些公共仓库代理的域名 + username反写来作为groupid的话你还得设置下dns,这个我没有试过的,只不过官方有这个dns的一个设置说明,因为我的这个是windows电脑,所以在本机设置下dns如下:

https://central.sonatype.org/faq/how-to-set-txt-record/#by-dns
这个里面还有比如阿里云的dns设置啊,就是一些云厂商的dns的设置

本机执行如下:

Windows:
CMD:
nslookup -type=TXT yourdomain.comPowershell:
Resolve-DnsName yourdomain.com -Type TXT
Linux⚓︎$ host -t txt yourdomain.com
yourdomain.com descriptive text "OSSRH-XXYYZZ"
ordig -t txt yourdomain.com
macOS⚓︎dig -t txt yourdomain.com

3.3 namespace的校验(必选)

https://central.sonatype.org/register/namespace/

  根据上面的namespace的格式创建了一个namespace后,是未提交审核的状态,可以提前在根据verification-key在对应的githue或gitee上创建一个公共的仓库,用于namespace提交审核的时候可以证明这个仓库是你自己所有,如果你是先创建namespace之后,没有创建对应verification-key的公共仓库,然后你点击提交审核,你的邮箱里面会收到一条短信如下:

image-20240318132631485

  该短信说的是让你在你对应的仓库根据你提交审核的verification-key新建一个公共的代码仓库,来证明这个仓库是你自己的仓库,我采用的是先提交审核后邮箱收到短信,然后我就去我对应的gitee、github上创建了对应verification-key的公开仓库,io.gethub.你的账号的verification-key的要去你的github上根据io.gethub.你的账号的namespace对应的verification-key去创建公开代码仓库,gitee的也是同理,不要搞了叉着了,我这里是创建了两个namespace,一个是github的namespace,一个是gitee的namespace,然后我就给那个老外的邮箱回复了一条短信如下:

根据namespace对应的verification-key去github或gitee代码仓库上创建各自的公开代码仓库如下:
https://github.com/BigBigFeiFei/verification-keyxxxxx
https://gitee.com/BigBigFeiFei/verification-keyxxxxx

  回复邮箱消息如下:

image-20240318133707759

  意思是:我的两个Namespace的Verification Key以及在github、gitee上创建了公开仓库了,请审核一下,我等您的消息,谢谢。

然后过了差不过了一天,我登录账号去查看着两个namespace已经审核过了,状态截图如下:

image-20240318131320717

  到此创建namespace到审核就已经完成了,等审核完成后,之前根据各自的Verification Key创建的公开仓库就可以删除了的。

4.下载安装好gpg 创建和私钥

gpg的下载地址如下:windows下载的是Gpg4win,这个根据你的电脑型号去下面第二个链接查看下载什么对应机子操作系统匹配的gpg即可

https://www.gpg4win.org/download.html
https://central.sonatype.org/publish/requirements/gpg/#answer

  gpg的安装位置截图:

  我选择的自定义安装,选择的是安装在D盘,所以profile的gpg.executable要这种配置,否则deploy的时候找不到gpg的命令,这里也是需要注意的一个地方

D:\GnuPG\bin\gpg

image-20240318123540206

  新建秘钥对:设置名称(默认是windows的账户名称,如果有账号了可以输入之间的即可)和邮箱、密码即可

image-20240318123307181

  填写用户名和邮箱,第一次deploy的时候会弹框提示需要输入gpg的账号和密码,然后输入即可,然后会弹框返回一个指纹的key,复制下来,下面配置会用到,如果第二次跟第一次设置的是同一个用户名和邮箱的话,在deploy的时候只要配置setting.xml的profile的pgp的账号密码相同即可,然后deploy的时候就不会弹框提示需要输入gpg的账号和密码。

  查看指纹的key,如果你第一次新建密钥对没有复制弹框返回的指纹的key,只需要点击添加的第一条数据回弹框如下会显示指纹的key,复制继续下面的配置

image-20240318145148483

  将公钥或key发布到 PGP 密钥服务器:我用的是第二个命令带有这个的hkp://keyserver.ubuntu.com:11371命令,两条命令应该是一样的效果:cmd执行下面的命令即可,然后记住你设置的密码,下面的setting.xml中配置gpg需要用到。

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥ID或上面提到的key
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 你自己的密钥(去重空格)

image-20240318143938825

  查询公钥是否发布成功:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥ID或上面提到的key
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 你自己的密钥(去除空格)

image-20240318144005826

  这种就是设置成功的,有输出且没有报错信息,我这个是设置第二次(换了一台电脑,又搞了一遍)都是同一个账号和邮箱,它提示信息没有改变,说明它沿用的还是第一次那个的信息

5.idea中maven的setting.xml文件配置

  idea中的setting.xml指定的文件路径中不要包含中文,否则会deplay失败,报错说是setting文件路径中包含中文字符而报错,这里需要注意下,每次修改server的token信息都要记得保存(ctrl + s)

<servers><server><!--id固定是central 每次deploy前就要去后台申请一个新的token,注意申请了新的token不要去点击比如maven的clean等非deploy的按钮,不然这个token就会被使用了,重复使用就会报错401,所以clean要在配置新的token前就去执行了,配置好新的token后,直接点击项目中maven的deploy发布即可--><id>central</id><username>token-username</username><password>token</password></server></servers><profiles><profile><id>central</id><activation><activeByDefault>true</activeByDefault></activation><properties><!-- gpg的安装位置的 GnuPG\bin\gpg,因为我是安装在D盘在,所以没有设置安装路径,所以子在D盘会有两个文件夹GnuPG和\Gpg4win,如果指定了安装路径的话,一个是在一个文件夹下有GnuPG和\Gpg4win,然后配置应该是这种的 安装位置   x盘:\xxxx+\GnuPG\bin\gpg --><gpg.executable>D:\GnuPG\bin\gpg</gpg.executable><gpg.passphrase>你的gpg的密码</gpg.passphrase></properties></profile></profiles>

  登录新账户创建token-username和token

image-20240318120810565

  点击创建token,将创建的username和password配置到上面setting.xml的server标签中

image-20240318120911149

  官方是建议使用这种方式的,不建议直接配置新账号的用户名和密码,并且使用token-username和token的这种方式,每次上传就要去后台生成一个然后将idea配置的seting.xml中的server的server的username、password重新使用新生成的,也就是说每次deploy都要去后台新生成一个token-username和token,生成的token-username和token只能使用一次,这个也是为了安全考虑,我试过配置setting.xml中server标签中新用户的账号(明文)和密码(明文)然后去发布也还是401的,不支持,老账号那种倒是支持的,并且密码中不能设置特殊字符,官网有说明的,但是现在这种使用token的方式就不用管密码中是否有特殊字符了,申请一次用一次。

https://central.sonatype.org/publish/generate-token/

6.项目中配置pom

  官方maven的pom配置规范:

https://central.sonatype.org/publish/requirements/#provide-files-checksums

  下面的可以直接copy过去使用的:

<properties><java.version>1.8</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><serverId>central</serverId><!-- 服务id 也就是setting.xml中的servers.server.id -->
</properties><build><plugins><!-- 编译插件,设置源码以及编译的jdk版本 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin><!-- Source --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><phase>package</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- Javadoc --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.9.1</version><configuration><additionalparam>-Xdoclint:none</additionalparam></configuration><executions><execution><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin><!-- Javadoc --><!-- Gpg Signature --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-gpg-plugin</artifactId><version>1.6</version><executions><execution><phase>verify</phase><goals><goal>sign</goal></goals></execution></executions></plugin><!-- 老账号的配置:Gpg Signature --><!--将组件部署到OSSRH并将其发布到Central Repository--><!--<plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.8</version><extensions>true</extensions><configuration><serverId>${serverId}</serverId><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration></plugin>--><!--新账号的配置:将组件部署到OSSRH并将其发布到Central Repository--><plugin><groupId>org.sonatype.central</groupId><artifactId>central-publishing-maven-plugin</artifactId><version>0.4.0</version><extensions>true</extensions><configuration><publishingServerId>central</publishingServerId><tokenAuth>true</tokenAuth></configuration></plugin></plugins></build><distributionManagement><snapshotRepository><!-- 与settings.xml的server.id保持一致 --><id>${serverId}</id><url>https://central.sonatype.com/</url></snapshotRepository><!-- 老账号配置<snapshotRepository>&lt;!&ndash;这个id和settings.xml中servers.server.id要相同,因为上传jar需要登录才有权限&ndash;&gt;<id>${serverId}</id><name>OSS Snapshots Repository</name><url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url></snapshotRepository><repository>&lt;!&ndash;这个id和settings.xml中servers.server.id要相同,因为上传jar需要登录才有权限&ndash;&gt;<id>${serverId}</id><name>OSS Staging Repository</name><url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository>--></distributionManagement>

  需要修改的配置:

  坐标id:

<groupId>io.github.账号username</groupId>
或者:
<groupId>io.gitee.账号username</groupId>

  下面是一个demo示例:需要注意的是version必须不带SNAPSHOT的,因为新版不支持发布SNAPSHOT,descriptio描述必须要有,这里也是要注意一下的,如果version设置的有问题或者description没有的话deploy的时候会报错提示的

    <groupId>io.github.bigbigfeifei</groupId><artifactId>es-spring-boot-start</artifactId><!-- 发布到这个上OSSRH:项目中的version,不要带上SNAPSHOT,这样就可以直接发布到中央仓库如果带上了,会发布到私服的snapshots下面,可以搜索进行查看,但是发布到Maven Central的新版本是不支持SNAPSHOT会被校验这个的,如果带来SNAPSHOT则推送失败,所以需要去掉version这个SNAPSHOT。 --><version>1.0</version><!--描述一定要有--><description>es启动器</description>

  下面是需要修改成你自己的项目地址即可:url、scm、developers修改成自己的即可,licenses不用修改直接使用

    <!--项目访问url -->   <url>https://github.com/BigBigFeiFei/es-spring-boot-start</url><scm><!--项目访问url --><url>https://github.com/BigBigFeiFei/es-spring-boot-start</url><!--项目访问url.git结尾 --><connection>scm:git:https://github.com/BigBigFeiFei/es-spring-boot-start.git</connection><!--项目访问url.git结尾 --><developerConnection>scm:git:https://github.com/BigBigFeiFei/es-spring-boot-start.git</developerConnection></scm><developers><developer><id>BigFei</id><name>BigFei</name><email>xxxx@qq.com</email><!--项目访问url --><url>https://github.com/BigBigFeiFei/es-spring-boot-start</url><timezone>+8</timezone></developer></developers><licenses><license><name>The Apache Software License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0.txt</url></license></licenses>

7.发布项目

7.1 idea中点击deploy发布

  做好了以上的配置准备后,我们就可以来发布项目到中央仓库了。

  在idea的项目中点击deploy,运行没有报错,能看到BUILD SUCCESS,说明是上传成功,要注意的是idea配置的maven的setting.xml中server的token-username、token每次点击deploy前都要去后台重新生成一个,然后配置到maven的setting.xml中的sever里面,每deploy前都要去搞一对新的token秘钥对来进行配置,一对只能使用一次,重复使用deploy会报401

image-20240318141515411

  或者是使用命令:

mvn clean deploy -e 
//-e参数可以打印出deploy的相关错误信息,以便排查问题

  mvn命令参考:

https://www.cnblogs.com/tobyhomels/p/15890023.html
https://blog.csdn.net/zdwzzu2006/article/details/130788625

  还有如果你按照老的那个账号的配置pom中的仓库地址是

  老式账号pom中配置了plugin和仓库地址如下,deploy的时候会报401,没有权限,身份认证失败

<plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.6.8</version><extensions>true</extensions><configuration><!--与settings.xml的server.id保持一致 --><serverId>${serverId}</serverId><nexusUrl>https://s01.oss.sonatype.org/</nexusUrl><autoReleaseAfterClose>true</autoReleaseAfterClose></configuration>
</plugin><distributionManagement><snapshotRepository><!--这个id和settings.xml中servers.server.id要相同,因为上传jar需要登录才有权限 --><id>${serverId}</id><name>OSS Snapshots Repository</name><url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url></snapshotRepository><repository><!--这个id和settings.xml中servers.server.id要相同,因为上传jar需要登录才有权限 --><id>${serverId}</id><name>OSS Staging Repository</name><url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url></repository></distributionManagement>

  当你用新账号注册的账号和密码去登录:

https://s01.oss.sonatype.org/

  你会发现登录不上去,因为这个地址是之前的老的那种方式,官方都要不用这种方式了,所以这种搞就是牛头不对马嘴,让人感到蛋疼,这里也是之前那些旧文章坑文章里面这种搞的,这里是一个大坑。

  新账号的方式需要用如下的插件:

https://central.sonatype.org/publish/publish-portal-maven/#namespace-details-and-actions
<plugin><groupId>org.sonatype.central</groupId><artifactId>central-publishing-maven-plugin</artifactId><version>0.4.0</version><extensions>true</extensions><configuration><publishingServerId>central</publishingServerId><tokenAuth>true</tokenAuth></configuration>
</plugin>

7.2新账号登录后点击发布

登录注册地址:
https://central.sonatype.com/

image-20240318150836168

  发布了之后就删除不了了,看看能把namespace删除之后重新,创建namespace审核通过后去提交一个,这个没有必要去删除namespace,发布了之后删除不了就不要管它的,你修改版本号重新推送去发布即可,根据版本号来发布就是最新的包了,如果已经上传过了,再去执行deploy的话会报错,后台管理会有一条上传的消息说,你这个包已经上传过了,然后你可以把那个上传失败记录删除了。

image-20240318171844298

7.3搜索发布的依赖

image-20240318151021612

  搜索你建立的namespace下的组件名称就可以搜到了

8.github使用生成的token拉取项目

在账号的setting中点击

image-20240318153208287

  然后点击Developer settings:

image-20240318153252402

  创建token:两种方式随便选一种,

image-20240318153359703

  token的过期时间设置长一点,设置几千天(相当于永不过期),不然每次都要去搞一个token,然后给权限,权限设置如下:

image-20240318153741163

image-20240318153808095

  然后拉取代码之后需要进入到项目路径下(比如我git clone 下来一个项目叫xxx,那就进入到xxx目录,然后cmd执行如下命令)设置一下这个token(下面的token设置为自己的)

git remote set-url origin https://你的token@github.com/BigBigFeiFei/项目.git

  这种设置之后,在idea修改代码后就不用输入用户名和密码或token,即使是idea提交弹框输入用户名和token也会校验失败,所以的先这种设置一下,然后直接提交代码就可以提交上去了,不会弹框提示需要验证啥的,这个不知道为啥不支持输入用户名、密码/token记住了,这个是我试了不可以,也不知道为啥,估计是没有找到正确的姿势。

  弹框登录使用账号密码登录会跳转到idea的账号页面,然后去登录github的账号(那首先你就得有一个idea的账户,可以去idea申请注册一个,然后你的idea上登录这个账号,就可以把你idea的一些基本的配置同步到远端的账号上,后面你换电脑了之后,安装新的idea只有重新登录同步远端的账号的配置(setting sync 开启同步)即可,方便快捷的),这种方式可以去试下。

  idea的maven点击deploy控制台有中文乱码解决:设置maven的运行时的虚拟机参数文件编码为GBK即可

-Dfile.encoding=GBK

image-20240318161951189

9.总结

  由于我之前不是写了几个好用的start,然后我就想着能不能发布到国外的中央仓库上,给大家提供一个依赖,引入即可,然后我就去网上看了一些教程,结果实践下来发下,全部是过时的教程了,全网都没有一篇可行的教程么?然后我就通过看之前那些旧的教程博客和官方的文档,去做了各种的尝试,上传这个尝试也是花了我点时间,摸索了几天还是搞出来了的,去看官方的英文文档,也是有点蛋疼,英文不咋个好就只能用翻译软件翻译着看,或者边看边猜它的大概意思,最终还是发布上去了,特殊说明在访问github或国外的一些网站需要科学上网一下,不然有的是访问不到的,这个需要你去处理解决下这个网络不通的问题,后面我会把我之前写的那几个好用的start开源出来,然后提供出中央仓库的坐标,方便大家直接引入使用,通过本文你可以把自己的轮子发布到中央仓库给大家使用,so easy,敬请期待,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

相关文章:

2024年发布jar到国外maven中央仓库最新教程

2024年发布jar到国外maven中央仓库最新教程 文章目录 1.国外sonatype仓库的版本1.1老OSSHR账号注册说明1.2新账号注册说明 2.新账号注册(必选)3.新账号登录创建Namespace3.1创建Namespace的名字的格式要求&#xff08;必选&#xff09;3.2发布一个静态网站&#xff08;可选&…...

在ubuntu22.04.4安装freeswitch1.10.10

一、环境 No LSB modules are available. Distributor ID:      Ubuntu Description:         Ubuntu 22.04.4 LTS Release:             22.04.4 Codename:            jammy 二、依赖 1、 工具包 apt install -y openssh-server …...

qt 置顶窗口崩溃无法退出解决,停止运行快捷键设置

有时置顶窗口调试崩溃需要快捷键进行关闭&#xff0c;如下设置即可 这样就可以通过全局快捷键退出了&#xff0c;避免置顶崩溃无法关闭程序的问题。...

HBCalculator 程序:通过 VMD 可计算分子动力学模拟中氢键密度和强度的一维和二维分布

分享一个通过 VMD 可计算分子动力学模拟中氢键密度和强度的一维和二维分布程序 HBCalculator。 感谢论文的原作者&#xff01; 主要内容 “氢键是分子系统中关键的非共价相互作用&#xff0c;对生物、化学和能量相关过程产生重大影响&#xff1b;因此&#xff0c;描述氢键信息…...

鸿蒙-项目创建及了解

目录 项目创建 1.App普通项目创建 2.元服务创建 项目结构 .hvigor .idea AppScope entry EntryAbility.ts pages resources module.json5 ohosTest hvigorfile.ts build-profile.json5 oh_modules build-profile.json5 hvigorfile.ts 项目运行 项目创建 F…...

SQLiteC/C++接口详细介绍sqlite3_stmt类(九)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;六&#xff09; 下一篇&#xff1a; 无 33、sqlite3_column_table_name 函数 sqlite3_column_table_name 用于返回结果集中指定列所属的表的名称。如果查询中列使…...

idea2023 运行多 springboot 实例

概要 1、修改idea运行多实例&#xff08;本地测试负载&#xff09; 你可能用到其他 1、改造项目缓存token 至redis 支持负载均衡部署 SpringSecurity6.0RedisJWTMP基于token认证功能开发&#xff08;源码级剖析可用于实际生产项目&#xff09;_springsecurity redis管理token…...

HarmonyOS系统开发ArkTS常用组件编程技巧

目录 样式复用 Styles方法 Extend方法 组件编程在使用过程中有很多技巧&#xff0c;在这里分享样式复用技巧和UI结构复用技巧。 样式复用 我们观察下面的代码&#xff0c;在代码中很多重复行的代码&#xff0c;如&#xff1a; Image 的 .width(30).height(30) 是重复的But…...

大数据开发(Hive面试真题-卷三)

大数据开发&#xff08;Hive面试真题&#xff09; 1、Hive的文件存储格式都有哪些&#xff1f;2、Hive的count的用法&#xff1f;3、Hive得union和unionall的区别&#xff1f;4、Hive的join操作原理&#xff0c;left join、right join、inner join、outer join的异同&#xff1…...

Oracle数据库SQL开发规范

Oracle数据库SQL开发规范是为了保证SQL代码的质量、可读性和性能而遵循的一系列准则和最佳实践。以下是一些常见的Oracle SQL开发规范要点&#xff1a; 1. 命名规范 使用有意义且一致的命名约定&#xff0c;例如表名采用TBL_MODULE_NAME&#xff0c;视图采用VW_MODULE_VIEW等…...

FreeRTOS 消息队列

1. 队列简介 1.1 队列的概念 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09; 类似全局变量&#xff1f;假设有一个全局变量a 0&#xff0c;现有两个任务都在写这个变量 a&#xff1a; 大家想象一下如果任务 1 运行一次&#…...

如何在Python中实现列表推导式?并给出一个例子

如何在Python中实现列表推导式&#xff1f;并给出一个例子 Python的列表推导式&#xff08;List Comprehension&#xff09;是一种强大且简洁的创建列表的方法。它允许我们在一行代码中完成循环和条件判断&#xff0c;从而生成所需的列表。列表推导式不仅提高了代码的可读性&a…...

Flask中的Blueprints:模块化和组织大型Web应用【第142篇—Web应用】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的Blueprints&#xff1a;模块化和组织大型Web应用 在构建大型Web应用时&#xff0…...

如何通过idea搭建一个SpringBoot的Web项目(最基础版)

通过idea搭建一个SpringBoot的Web项目 文章目录 通过idea搭建一个SpringBoot的Web项目一、打开idea&#xff0c;找到 create new project二、创建方式三、配置项目依赖四、新建项目模块五、总结 一、打开idea&#xff0c;找到 create new project 方式1 方式2 二、创建方式 新…...

Python和FastAPI语义分析和文本图像

要点 使用FastAPI开发RESTful API&#xff0c;创建端点&#xff0c;自定义响应&#xff0c;结构化多路由。Pydantic数据验证库数据建模&#xff0c;创建依赖项注入。开发数据库和对象关系映射&#xff0c;SQLAlchemy&#xff0c;Tortoise ORM&#xff0c;MongoDB。建立权限和安…...

centos系统ssh7.4升级9.6

编译安装 OpenSSL 下载 OpenSSL 源代码&#xff1a; wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz这个命令从 OpenSSL 的官方网站下载指定版本&#xff08;1.1.1w&#xff09;的源代码压缩包。 解压源代码&#xff1a; tar zxvf openssl-1.1.1w.tar.gz使用 tar…...

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…...

显卡基础知识及元器件原理分析

显卡应该算是是目前最为火热的研发方向了&#xff0c;其中的明星公司当属英伟达。 当地时间8月23日&#xff0c;英伟达发布截至7月30日的2024财年第二财季财报&#xff0c;营收和利润成倍增长&#xff0c;均超市场预期。 财报显示&#xff0c;第二财季英伟达营收为135.07 亿美…...

Spark Rebalance hint的倾斜的处理(OptimizeSkewInRebalancePartitions)

背景 本文基于Spark 3.5.0 目前公司在做小文件合并的时候用到了 Spark Rebalance 这个算子&#xff0c;这个算子的主要作用是在AQE阶段的最后写文件的阶段进行小文件的合并&#xff0c;使得最后落盘的文件不会太大也不会太小&#xff0c;从而达到小文件合并的作用&#xff0c;…...

Vue 3中实现基于角色的权限认证实现思路

一、基于角色的权限认证主要步骤 在Vue 3中实现基于角色的权限认证通常涉及以下几个主要步骤&#xff1a; 定义角色和权限&#xff1a;首先需要在后端服务定义不同的角色和它们对应的权限。权限可以是对特定资源的访问权限&#xff0c;比如读取、写入、修改等。用户认证&#…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用

1 论文信息 FBRT-YOLO&#xff08;Faster and Better for Real-Time Aerial Image Detection&#xff09;是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架&#xff0c;发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究&#xff0c;重点解决…...

SE(Secure Element)加密芯片与MCU协同工作的典型流程

以下是SE&#xff08;Secure Element&#xff09;加密芯片与MCU协同工作的典型流程&#xff0c;综合安全认证、数据保护及防篡改机制&#xff1a; 一、基础认证流程&#xff08;参数保护方案&#xff09; 密钥预置‌ SE芯片与MCU分别预置相同的3DES密钥&#xff08;Key1、Key2…...

Vue.js教学第二十一章:vue实战项目二,个人博客搭建

基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…...