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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 卷来卷去&#xff0c;把简单题都卷成中等题了 文章目录 1. 排序后从小到大…

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…

论文笔记:液体管道泄漏综合检测与定位模型

0 简介 An integrated detection and location model for leakages in liquid pipelines 1 摘要 许多液体&#xff0c;如水和油&#xff0c;都是通过管道运输的&#xff0c;在管道中可能发生泄漏&#xff0c;造成能源浪费、环境污染和对人类健康的威胁。本文描述了一种集成的…

使用Composer安装Laravel框架

使用Composer安装Laravel框架&#xff0c;不指定版本则安装当下最新版本 composer create-project laravel/laravel laravel-demo 至此&#xff0c;安装框架完成&#xff0c;这里安装的是Laravel11.0.7版本的 进入项目根目录&#xff0c;运行项目 cd laravel.11.0.7 // 进…

JavaScript之继承

继承 父类与子类 子类是父类的一个子集 比如&#xff1a;人类和医生类&#xff0c;医生类是人类的子集&#xff1b;人类是父类&#xff0c;医生类是子集 父类与子类在特性&#xff08;属性和方法&#xff09;上有什么关系 方法&#xff1a;子类对象可以调用父类原型上的方…

Django 反向解析路由

app2.urls.py from django.urls import path, re_path from . import viewsurlpatterns [path(index, views.index, nameindex),path(url_reverse, views.url_reverse, nameapp2_url_reverse), # 使用reverse()方法反向解析 ,name对于视图的reverse("app2_url_reverse&…

LeetCode每日一题【54.螺旋矩阵】

思路&#xff1a;模拟&#xff0c;初始化上下左右4个方向的边界&#xff0c;逐步收缩&#xff0c;注意要及时判断元素是否已经放满&#xff0c;否则会放入多余元素 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int…

Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)

1.基础环境 我只准备了一台gitlab服务器&#xff0c;访问就用真机进行访问&#xff0c;接下来介绍一下详细配置 centos7 内网ip:192.168.6.7 外网ip:172.20.10.4 运行内存&#xff1a;4G CPU:4核 先去配置基础环境 关闭防火墙以及selinux 再去下载基础的运行…

【Unity动画】Unity如何导入序列帧动画(GIF)

Unity 不支持GIF动画的直接播放&#xff0c;我们需要使用序列帧的方式 01准备好序列帧 02全部拖到Unity 仓库文件夹中 03全选修改成精灵模式Sprite 2D ,根据需要修改尺寸&#xff0c;点击Apply 04 创建一个空物体 拖动序列上去 然后全选所有序列帧&#xff0c;拖到这个空物体…

Kafka:分布式消息队列

1. 简介 介绍 Kafka 的概述、优势和劣势&#xff0c;以及应用场景。 2. 基本概念 2.1 架构 一个典型的 Kafka 体系架构包括若干 Producer、若干Broker、若干 Consumer&#xff0c;以及一个ZooKeeper集群。 ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的…

java的成员变量和局部变量

1、什么是成员变量和局部变量&#xff1f; 2、成员变量和局部变量区别 区别 成员变量 局部变量 类中位置不同 类中方法外 方法内或者方法声明上 内存中位置不同 堆内存 栈内存 生命周期不同 随着对象的存在而存在&#xff0c;随着对象的消失而消失 随着方法的调用而…

Kali Linux 更换优质国内源

文章目录 环境说明1 Kali Linux 源简介2 Kali Linux 更换国内源 环境说明 操作系统&#xff1a;kali-linux-2024.1-installer-amd64 1 Kali Linux 源简介 所谓的 Kali Linux 源&#xff0c;你可以将它理解为软件仓库&#xff0c;系统通过它安装和更新软件&#xff1b;源的服务…

人事管理系统|基于JSP+ Mysql+Java+ B/S结构的人事管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

vue3 reactive丢失响应式

问题 使用 reactive 构造响应式对象时&#xff0c;当对其进行重新赋值后&#xff0c;会导致原有变量失去响应式&#xff0c;页面不会发生联动更新 例如&#xff1a; 1、使用 reactive 定义一个响应式的对象变量 let data1 reactive({name: 小李,date: 2024-03-18,address: xx…

使用JAXB生成XML的Java对象

文章目录 标题使用JAXB生成XML的Java对象根据xml生成xsd文件&#xff1a;下载trang.jar&#xff1a;使用trang.jar生成xml的xsd文件&#xff1a; 使用JAXB的xjc生成java对象&#xff1a; 标题使用JAXB生成XML的Java对象 根据xml生成xsd文件&#xff1a; 下载trang.jar&#x…

Unity UGUI之Toggle基本了解

在Unity中&#xff0c;Toggle一般用于两种状态之间的切换&#xff0c;通常用于开关或复选框等功能。 它的基本属性如图&#xff1a; 其中&#xff0c; Interactable&#xff08;可交互&#xff09;&#xff1a;指示Toggle是否可以与用户交互。设置为false时&#xff0c;禁用To…

【Selenium(一)】

简介 Selenium是一个开源的自动化测试工具&#xff0c;主要用于Web应用程序的自动化测试。它支持多种浏览器&#xff0c;包括Chrome、Firefox、Internet Explorer等&#xff0c;以及多种编程语言&#xff0c;如Java、Python、C#、Ruby等&#xff0c;使得它成为Web自动化测试中…

学习笔记Day11:初探Linux

Linux系统初探 Linux系统简介 发行版本Ubuntu/centOS&#xff0c;逻辑一样&#xff0c;都可以用。 服务器 本质是一台远程电脑&#xff0c;大多数服务器是Linux系统&#xff0c;通常使用命令行远程访问而不是桌面操作。LInux服务器允许多用户同时访问。NGS组学测序数据上游…

Redis 7.0.X 在Windows下编译支持TLS连接,遇坑埋坑

微信公众号&#xff1a;数据库杂记 个人微信: iiihero 我是iihero. 也可以叫我Sean. iiheroCSDN(https://blog.csdn.net/iihero) Sean墨天轮 (https://www.modb.pro/u/16258) 数据库领域的资深爱好者一枚。 水木早期数据库论坛发起人 db2smth&#xff0c;早期多年水木论坛数…

VSCode创建用户代码片段-案例demo

示例 - 在线生成代码片段 Vue3代码片段 {"vue3": {scope": "javascript,typescript,html,vue","prefix": "vue3","body": ["<template>","$1","</template>",""…