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

news2024/9/21 18:44:51

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.com

Powershell:
Resolve-DnsName yourdomain.com -Type TXT
Linux⚓︎

$ host -t txt yourdomain.com
yourdomain.com descriptive text "OSSRH-XXYYZZ"
or

dig -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,敬请期待,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

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

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

相关文章

科技云报道:第五次工业革命,中国AI企业如何打造新质生产力?

科技云报道原创。 人类历史的叙述与技术进步的影响深深交织在一起。 迄今为止&#xff0c;每一次工业革命都彻底改变了我们社会的轮廓&#xff0c;引入了机械化、大规模生产和数字化&#xff0c;并重新定义了人类生存的规范。 自2022年11月30日OpenAI发布ChatGPT以来&#x…

webpack5零基础入门-11处理html资源

1.目的 主要是为了自动引入打包后的js与css资源&#xff0c;避免手动引入 2.安装相关包 npm install --save-dev html-webpack-plugin 3.引入插件 const HtmlWebpackPlugin require(html-webpack-plugin); 4.添加插件&#xff08;通过new方法调用&#xff09; /**插件 *…

c语言,联合体

一.什么是联合体&#xff1a; 像结构体一样&#xff0c;联合体也是由一个或多个成员变量组成的这些成员变量可以是不同的类型&#xff0c;但编译器只给最大成员分配足够的内存&#xff0c;联合体体内的成员都是公用一块空间的&#xff0c;因此联合体也叫做共同体 二.联合体类…

聚类分析 | Matlab实现基于PCA+DBO+K-means的数据聚类可视化

聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化 目录 聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PCA&#xff08;主成分分析&#xff09;、DBO&#xff08;蜣螂优化算法&#xff09;和K-means聚类…

【观察】紫光云:紫鸾5.0云平台“再升级”,为政企客户提供新质生产力

毫无疑问&#xff0c;数字化既是这个时代前进所趋&#xff0c;也是国家战略所指&#xff0c;更是所有企业在未来发展中已达成的高度共识。 在此过程中&#xff0c;千姿百态、复杂多样的应用场景&#xff0c;可以看做是遍布数字中国的“点”&#xff1b;百行百业、各种类型的行业…

阿里云发布 AI 编程助手 “通义灵码”——VSCode更强了 !!

文章目录 什么是 通义灵码&#xff08;TONGYI Lingma&#xff09; 快速体验“通义灵码” 什么是“通义灵码”&#xff08;TONGYI Lingma&#xff09; 通义灵码&#xff08;TONGYI Lingma&#xff09;&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff…

idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 班…

【linux】Debian访问Debian上的共享目录

要在Debian系统上访问共享目录&#xff0c;通常意味着要访问通过网络共享的文件夹&#xff0c;比如通过SMB/CIFS&#xff08;Server Message Block/Common Internet File System&#xff09;协议共享的Windows共享文件夹。以下是访问共享目录的步骤&#xff1a; 1. 安装必要的…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 边缘设备图像识别及部署(二)

专栏目录 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 整体介绍&#xff08;一&#xff09; 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 -- 边缘图像识别及部署&#xff08;二&#xff09; 前言边缘图像识别与推流整体思路原始…

蓝桥杯刷题总结(Python组)

1、蛇形矩阵 解题思路&#xff1a;每次赋值后都对方向进行改变&#xff0c;一般上下左右就是&#xff08;-1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&#xff0c;1&#xff09;&#xff0c;&#xff08;1&#xff0c;0&#xff09;&#xff0c;&#xff08;0&…

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步&#xff0c;非实时&#xff0c;实现最终的一致性。 四、分布式事务的解决方案

【MLLM+轻量多模态模型】24.02.Bunny-v1.0-2B-zh: 轻量级多模态语言模型 (效果一般)

24.02 北京人工智能研究院&#xff08;BAAI&#xff09;提出以数据为中心的轻量级多模态模型 arxiv论文&#xff1a;2402.Efficient Multimodal Learning from Data-centric Perspective 代码&#xff1a;https://github.com/BAAI-DCAI/Bunny 在线运行&#xff1a;https://wis…

CSS元素定位(学习笔记)

一、 z-index 1.1 作用 规定元素的堆叠顺序,取值越大&#xff0c;层级越往上 1.2 属性值 属性值为数字&#xff0c;可以取负值&#xff0c;不推荐 默认值&#xff1a;auto(跟父元素同一层级) 1.3 注意 必须配合定位(static除外)使用&#xff0c;默认情况下&#xff0c;后面的元…

openssl3.2 - exp - openssl speed test

文章目录 openssl3.2 - exp - openssl speed test概述笔记表面上能列出的算法集合没列出的算法, 有的也支持不支持的算法的例子直接提示算法不支持算法的属性找不到到底哪些算法才是可以测试的算法?那看看哪些算法是支持的?包含支持的算法的名称数组在算法失败的提示处, 将支…

【Redis】缓存穿透

问题发生背景&#xff1a;客户端请求的数据再缓存中和数据库中都不存在。 导致的问题&#xff1a;缓存永远不会生效&#xff0c;这些请求都会去请求数据库—导致数据库压力增大。 解决方案&#xff1a; 1.缓存空对象 在Redis中缓存空对象&#xff0c;告诉客户端数据库中没有该值…

Python快速导入id至json文件(2024.3.19)

Python实现id导入至json文件 2024.3.19 需求分析1、输入数据介绍1.1 三个.txt文件1.1.1 computers.txt&#xff08;计算机&#xff09;1.1.2 cameras.txt&#xff08;摄像头&#xff09;1.1.3 monitors.txt&#xff08;显示器&#xff09; 1.2 单个.xlsx文件 2、实现思路3、Pyt…

Day21:实现退出功能、开发账号设置、检查登录状态

实现退出功能 将登录凭证修改为失效状态。跳转至网站首页。 数据访问层 不用写了&#xff0c;已经有了updateStatus方法&#xff1b; 业务层 UserService public void logout(String ticket) {loginTicketMapper.updateStatus(ticket, 1);}Controller层 RequestMapping(p…

opc客户端

支持opc&#xff0c;da&#xff0c;ua通信&#xff08;匿名登陆及用户登陆&#xff09; 支持批量节点数据监听&#xff0c;当数据有变化时更新 支持单个节点读取和写入 KeepServer做为modbus server keepserver通信配置 https://blog.csdn.net/xiaochenXIHUA/article/detail…

【Qt问题】使用QSlider创建滑块小部件无法显示

问题描述&#xff1a; 使用QSlider创建滑块小部件用于音量按钮的时候&#xff0c;无法显示&#xff0c;很奇怪&#xff0c;怎么都不显示 一直是这个效果&#xff0c;运行都没问题&#xff0c;但是就是不出现。 一直解决不了&#xff0c;最后我在无意中&#xff0c;在主程序中…

【开发】Redis 的理解与数据存储格式

目录 相关传送门 1. NOSQL和关系型数据库比较 2. 主流的NOSQL产品 3. Redis的理解 4. redis数据存储格式 4.1 String 4.2 Hash 4.3 List 4.4 Set 4.5. sorted_set 注&#xff1a;手机端浏览本文章可能会出现 “目录”无法有效展示的情况&#xff0c;请谅解&#xf…