0%

在github上新增ssh

1
2
3
4
$ rm -rf ~/.ssh/* 
$ ssh-keygen -t rsa -b 4096 -C "你的邮箱"
# 按回车三次
$ cat ~/.ssh/id_rsa.pub

基础信息配置

$ git config --global user.name 你的英文名
$ git config --global user.email 你的邮箱
$ git config --global push.default matching
$ git config --global core.quotepath false
$ git config --global core.editor "vim"

  • AutoPrefixUrlMapping.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {

    @Value("${api-package}")
    private String apiPackagePath;

    @Override
    protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
    RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);
    if(mappingInfo != null){
    String prefix = this.getPrefix(handlerType);
    return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);
    }
    return mappingInfo;
    }

    private String getPrefix(Class<?> handlerType){
    String packageName = handlerType.getPackage().getName();
    String dotPath = packageName.replaceAll(this.apiPackagePath,"");
    return dotPath.replace(".", "/");
    }
    }
  • AutoPrefixConfiguration.java

    1
    2
    3
    4
    5
    6
    7
    8
    9

    @Configuration
    public class AutoPrefixConfiguration implements WebMvcRegistrations {

    @Override
    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
    return new AutoPrefixUrlMapping();
    }
    }
  • application.yml
1
api-package: com.example.demo
  • DemoController
1
2
3
4
5
6
7
8
9
@RestController
@RequestMapping("/demo")
public class DemoController {

@GetMapping("/a")
public ResponseEntity getUser() {
return ResponseEntity.status(HttpStatus.OK).body("22");
}

  • 目录结构

请求地址:http://localhost:8080/api/demo/a

背景

最近接到一个项目,有这样一个需求,需要对部分文件的下载与预览增加权限控制,只允许会员用户使用,找了一些资料之后最后决定使用Nginx配合Java服务来实现这个功能。

只针对一些业务文件采用此方式,网页中的静态文件尽量不要使用这种方法,以免增加服务器的负担

配置Nginx

在这里插入图片描述

配置中使用Nginx开启了一个端口为8086的文件服务器,配置中增加了internal属性,表示文件只允许内部访问。在接收到请求后代理转发给了端口为8080Java权限认证服务。

这些基本上就是Nginx的全部配置了,不是很复杂,配置完成之后记得重启,确保生效。

Java服务

在这里插入图片描述

后台使用SpringBoot搭建服务,在认证通过之后通过设置ResponseHeader通知Nginx是否返回请求的文件。

  • Content-Type
  • Content-Disposition
  • X-Accel-Redirect

    三个主要的header

    更多的header介绍

如何区分开发环境与生成环境

上一章讲了开发环境`devtool`的使用,但是官方推荐不同的环境使用不同的配置,那么怎么来区分当前运行的是什么环境呢,这次讲一下这个。

安装依赖

1
$ yarn add -D webpack-merge

调整目录结构

增加config文件夹,将webpack.config.js文件移动到里面,保留基础配置,删除modedevtool属性

config文件夹中增加webpack.conf.dev.js,写入以下内容

1
2
3
4
5
6
7
const merge = require('webpack-merge');
const common = require('./webpack.config.js');
let devConfig = {
mode: "development",
devtool: 'source-map',
};
module.exports = merge.merge(common, devConfig);

修改package.json

1
2
3
"scripts": {
"start": "webpack serve --config config/webpack.conf.dev.js"
},

执行 yarn start

最后

不同的环境创建不同的webpack.conf.xxx.js即可

注意修改webconfig.conf.js中的文件引用路径,因为它的位置改变了

静态资源的引入

上一章中已经搭建好开发环境,下面开始逐渐丰富项目的内容,本章是静态资源的引入。

安装依赖

webpack默认是只认识JavaScript的,只知道该怎么处理它,如果项目中出现了其他类型的文件,并且也希望webpack对它进行打包的时候,就要安装对应的loader了。

loader是什么,下面内容源自webpack中文网站

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或”加载”模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!

css-loader

1
$ yarn add css-loader style-loader -D

src文件夹中创建第一个css文件,命名为index.css

1
2
3
 .hello{
color:red;
}

修改index.ts文件

修改webpack.config.js

1
2
3
4
5
6
7
8
module: {
rules: [
+ {
+ test: /\.css$/,
+ use: ['style-loader', 'css-loader']
+ }
],
}

file-loader

file-loader用于引入图片文件

1
$ yarn add file-loader -D

修改index.ts文件,并在src文件夹内增加一张png图片

1
2
3
4
import img from  "./index.png"
let image: HTMLImageElement = document.createElement("img");
image.src = img;
document.body.append(image);

修改webpack.config.js

1
2
3
4
5
6
7
8
module: {
rules: [
+{
+ test: /\.(png|jpe?g|gif)$/i,
+ use:['file-loader'],
+},
],
},

最后

关于cssimage的配置就是这些了,现在运行启动命令就可以看到网页上的字已经是红色了,并且添加了一张图片

更多loader

使用typescript与webpack搭建开发环境

项目初始化

1
$ yarn init -y

本文全部使用yarn命令,没有安装的可以执行下面使用npm安装

1
$ npm i -g yarn

安装依赖

在这里插入图片描述

将上面内容拷贝到项目中的package.json文件中,执行安装命令

1
$ yarn install 

项目配置

初始化tsconfig.json

1
$ tsc --init

如果出现tsc不是正常的命令错误提示 可在命令前面添加npx 然后在执行
执行成功之后修改tsconfig,写入以下内容

在这里插入图片描述

更多配置选项可参考官方文档

webpack.config.js

在项目根目录下增加webpack.config.js,内容如下

在这里插入图片描述

更多配置选项可参考官方文档
到这里项目的配置项基本已经全部完成了,下面开始写代码

增加第一个ts文件

在项目目录增加src文件夹,并创建第一个文件index.ts,内容如下

完成之后运行一下项目,验证一下

项目启动

项目启动有两种方式,一种是直接在终端中输入webpack serve来启动或者使用yarn命令启动,我们使用第二种方式。
首先配置yarn的启动脚本

package.json中增加以下代码

1
2
3
"scripts": {
"start": "webpack serve"
}

下面我们就可以在终端中直接输入yarn start来启动项目了,执行之后会看到以下提示
在这里插入图片描述

项目顺利启动,并在本地启动了一个端口为8080的服务,我们可以直接在浏览器中那个访问

http://localhost:8080/

在这里插入图片描述
获取源码点击这里

在这里插入图片描述

Github

注册应用

如果想要使用Github为应用授权的话,要先去自己的账户上注册一个应用,点击注册。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xl0CN1FD-1629897178733)(https://imgblog.csdnimg.cn/99253549a82d43258425957b20d75b21.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAeHjlsI_lj7Dnga8=,size_54,color_FFFFFF,t_70,g_se,x_16)]

名称随便输入,写上自己网站的主页,最后一个是授权成功之后回调的页面。

创建成功之后会看到这个

在这里插入图片描述

跳转到Github授权页面

点一下Generate a new client secret会生成一个秘钥,只会出现一次,要保存好它,不要泄露出去。后面会用到的。

下面开始写代码了,只是做一个简单的示例,没有特别复杂的。就是文档顶部的四种类型。图片是在iconfont找到,这个不做过多描述了。

1
2
3
4

function github() {
location.href = `https://github.com/login/oauth/authorize?client_id=39b050937104c9618fee&redirect_uri=http://localhost/me.html`;
}

当点击Github图标之后会调用这个方法,跳转到授权页面,上面那个用到两个参数

  • client_id
    就是上面应用的client_id,千万不要把secret放在前端,不能暴露出来的
  • redirect_uri
    授权成功返回的页面,上面也提到过的。

调用方法之后会跳转到这个页面,输入账号密码登录就可以了。
在这里插入图片描述
密码验证成功之后会跳转到http://localhost/me.html?code=ffwgregregregre,记住这个code,后面会用到的。

获取到授权码

在授权页面授权成功之后,会得到一个授权码,就是上面的code,拿到这个去后台服务获取用户信息。

要获取到用户信息首页要使用授权码得到一个令牌,使用这个令牌向Github请求用户信息。

后台实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 @GetMapping("github/{code}")
public ResponseEntity getUserInfo(@PathVariable String code) {

String clientId = "";
String secret = "";
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 1090));
//获取访问令牌
String body = HttpRequest.post(
String.format("https://github.com/login/oauth/access_token?client_id=%s&client_secret=%s&code=%s", clientId, secret, code)
).header("accept", "application/json").
setProxy(proxy).
execute().
body();

GithubTokenResponse githubTokenResponse = JSON.parseObject(body, GithubTokenResponse.class);

//使用令牌获取用户信息
String userInfo = HttpRequest.get("https://api.github.com/user").
setProxy(proxy).
header("accept", "application/json").
header("Authorization", "token " + githubTokenResponse.getAccess_token())
.execute().body();


return ResponseEntity.ok(userInfo);

}


GithubTokenResponse

1
2
3
4
5
6
7
8
public class GithubTokenResponse {

private String access_token;

private String scope;

private String token_type;
}

前端页面

1
2
3
4
<body>
<img id="avatar" style="display: none" />
<h1 id="name"></h1>
</body>
1
2
3
4
5
6
7
8

let code = getQueryVariable("code");
ajaxGet("github/" + code, function (data) {
let user = data;
avatar.style.display = "block";
avatar.src = user.avatar_url;
document.getElementById("name").innerHTML = user.name;
});

Gitee

GiteeGithub基本是一样的,也是要先注册一个应用,地址在这里,不过多描述了,直接上代码。

后端实现

1
2
3
4
5
6
7
8
9
10
11
12
13

@GetMapping("gitee/{code}")
public ResponseEntity getGiteeUser(@PathVariable String code) {
String clientId = "";
String secret = "";
String redirect_uri = "http://localhost/gitee.html";
String url = String.format(" https://gitee.com/oauth/token?grant_type=authorization_code&code=%s&client_id=%s&redirect_uri=%s&client_secret=%s", code, clientId, redirect_uri, secret);
String body = HttpRequest.post(url).execute().body();
GithubTokenResponse githubTokenResponse = JSON.parseObject(body, GithubTokenResponse.class);
String userInfo = HttpRequest.get("https://gitee.com/api/v5/user?access_token=" + githubTokenResponse.getAccess_token()).execute().body();
return ResponseEntity.ok(userInfo);
}

前端实现

Github一致

Email

Email实现的思路大致就是,输入邮箱之后,后台会向邮箱发送一个链接,通过这个链接激活账户。

发送邮件

1
2
3
4
5
<body>
<input id="email" type="text" placeholder="邮箱地址" />

<button onclick="register()">注册</button>
</body>
1
2
3
4
5
6
7
8
9
10
<script>
function register() {
let value = email.value;
if (value) {
ajaxPost("email/create", { email: value }, function (data) {
console.log(data);
});
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@PostMapping("/email/create")
public ResponseEntity createEmailUrl(@RequestBody Map<String, String> map) throws UnsupportedEncodingException, MessagingException {
String token = JwtToken.makeToken(map.get("email"), "abc", 60 * 30);
//注意,QQ邮箱或者163邮箱使用的不是登录密码,要去账户里生成授权码
SendEmail sendEmail = new SendEmail("[email protected]", "password", "smtp.qq.com");
sendEmail.setSubject("邮箱注册");
String emailContent = String.format("<a href='%sauthemail.html?code=%s'>点击注册</a>,30分钟内有效", pageUrl, token);
sendEmail.addContent(emailContent);
sendEmail.addReceive(new ReceiveAccount(map.get("email"), "xx996用户", Message.RecipientType.TO));
sendEmail.setPersonal("xx996管理员");
sendEmail.saveChange();
sendEmail.sendEmail();
return ResponseEntity.ok(token);
}

验证邮件

后端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@GetMapping("/email/{code}")
public ResponseEntity emailInfo(@PathVariable String code) {

Map<String, String> map = new HashMap<>();
if (!JwtToken.verifyToken(code, "abc")) {

ResponseEntity.ok().body((map.put("mess", "身份认证失败")));
}

String emial = JwtToken.getClaims(code, "abc").get().get("uid").asString();
map.put("mess", emial);
return ResponseEntity.ok().body(map);

}

前端

1
2
3
4
5
<body>
<h1>
<span id="h1"></span>
</h1>
</body>
1
2
3
4
let code = getQueryVariable("code");
ajaxGet("email/" + code, function (data) {
$("#h1").text(data.mess);
});

微信登录

这里微信登录是使用小程序实现的,个人是无法申请微信登录的。

微信扫一扫登录(使用小程序实现)

最后

项目中使用到的工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.7.9</version>
</dependency>
<dependency>
<groupId>cn.xx996</groupId>
<artifactId>springboot-tool</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>cn.xx996</groupId>
<artifactId>email</artifactId>
<version>1.0.0</version>
</dependency>

配置环境

安装java环境

1
2
链接:https://pan.baidu.com/s/1o-wFA-m33JQs-sQJ-DgRaQ 
提取码:ux7j

下载到服务器之后解压到指定位置

1
2
3
4

$ mkdir /usr/java
$ tar xzf jdk-8u301-linux-x64.tar.gz -C /usr/java
$ vim /etc/profile

写入下面的内容

1
2
3
export JAVA_HOME=/usr/java/jdk1.8.0_301
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

保存退出
执行source /etc/profile使配置文件生效。

验证是否安装成功

1
2
3
4
$ java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

看到这个就表示安装成功了。

安装maven

1
2
3
4
5
$ mkdir /usr/mvn
$ cd /usr/mvn
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
$ tar -zxvf apache-maven-3.8.1-bin.tar.gz
$ vim /etc/profile

写入下面内容

1
2
3
4
export MAVEN_HOME=/usr/mvn/apache-maven-3.8.1

export PATH=$PATH:$MAVEN_HOME/bin

保存退出
执行source /etc/profile使配置文件生效。

验证是否安装成功

1
2
3
4
5
$ mvn -version
Maven home: /usr/mvn/apache-maven-3.8.1
Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_301/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-240.10.1.el8_3.x86_64", arch: "amd64", family: "unix"

其他工具

1
$ yum install git gpg -y

如果已经安装可以跳过这步

注册sonatype账号

点击 注册一个新的账户。

登录之后新建一个issues
在这里插入图片描述

按要求填写就可以了,主要说一个Group Id
如果你的代码时托管在Github上的,那么写Group Id的时候就不能写
com.github.xxx了,我使用io开头,详情在这里

创建完成之后会跳转到这个连接https://issues.sonatype.org/browse/OSSRH-xxxx,当看到这个连接之后,你要在你的Github上创建一个仓库,来证明你是这个Github的主人,仓库的名字就是连接里的OSSRH-xxxx

创建后的仓库连接为https://github.com/yourgithubname/OSSRH-xxxx,然后在帖子下面留言告诉管理员这个仓库你已经创建好了名字为OSSRH-xxxx的仓库,这样可以省去他让你证明你是这个账户的拥有者,提高效率。等到管理员回复之后就可以上传jar包了。

下面是管理员的回复,看到这个就表示完成了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
io.github.xxx has been prepared, now user(s) youname can:
Publish snapshot and release artifacts to s01.oss.sonatype.org
Have a look at this section of our official guide for deployment instructions:
https://central.sonatype.org/publish/publish-guide/#deployment

Depending on your build configuration, your first component(s) might be released automatically after a successful deployment.
If that happens, you will see a comment on this ticket confirming that your artifact has synced to Maven Central.
If you do not see this comment within an hour or two, you can follow the steps in this section of our guide:
https://central.sonatype.org/publish/release/

######

As part of our efforts to improve the security and quality posture of the open source supply chain,
we plan to enable additional scanning of dependencies for security alerts soon. Since you're already
hosting your source code in Github, you can get these insights today by enabling Sonatype Lift.
Sonatype Lift is free forever on public repositories! Lift tells you about open source vulnerabilities
during code review, and goes beyond open source to scan your code for both code quality and security issues,
providing feedback right in your pull requests.
More information can be found at https://links.sonatype.com/products/lift/github-integration

######

发布前的准备

修改pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98

<groupId>io.github.xxxx</groupId>
<artifactId>xxxx</artifactId>
<version>1.0.0</version>
<name>xxx</name>
<url>xxxx</url>
<description>xxxxx</description>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</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>
<!-- GPG mvn clean deploy -P release -Dgpg.passphrase=YourPassphase -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<licenses>
<license>
<name>MIT License</name>
<url>https://github.com/xxx/xxx/xxxxxx/master/LICENSE</url>
<distribution>repo,manual</distribution>
</license>
</licenses>
<developers>
<developer>
<name>xxx</name>
<email>xxxx</email>
<url>xxxx</url>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/xxx/xxxx.git</connection>
<developerConnection>scm:git:https://github.com/xxxx/xxxx.git</developerConnection>
<url>https://github.com/xxxx/xxxxx</url>
<tag>0.0.1</tag>
</scm>

只需修改和自己相关的内容即可,文中用xxxx表示,其他的不需要修改

Group Id一定要和申请的保持一致

上传gpg key

1
2
$  gpg generate-key
# 按照提示输入用户名和邮箱,最后会输入一个密码,记住这个密码下面会用

将公钥发送到PGP密钥服务器

1
$   gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 6107DF0A8EE6A62EABFDD12914F722543E7D2C1E

返回结果

1
gpg: 将密钥‘14F722543E7D2C1E’上传到 hkp://keyserver.ubuntu.com:11371

验证是否上传成功

1
$   gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 6107DF0A8EE6A62EABFDD12914F722543E7D2C1E

返回结果

1
2
3
gpg: 密钥 14F722543E7D2C1E:“houbb <[email protected]>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1

setting.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<servers>
<server>
<id>ossrh</id>
<username>sonatype账号</username>
<password>sonatype密码</password>
</server>
</servers>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>gpg公钥的密码</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>

注意判断mvn使用的setting.xml是哪里的,一般在mvn主目录下的conf文件夹和用户目录下的.m2文件夹

上传程序

在项目根目录下执行

1
$ mvn clean deploy

稍等片刻会出现一个窗口,输入gpg的密码

看到这个表示发布成功

看到这个表示已经上传成功了。

上传成功之后登录到https://s01.oss.sonatype.org/,账号就是一开始注册的sonatype账号。

登录之后会点击Staging Repositories会看到这个页面,选中记录点击close,成功之后点击Release

到这步就已经大功告成了,稍等片刻就可以在这里看到上传的包了

比如 Group Idio.github.xxx

artifactIdtool

version1.0.0,

查看地址就是https://repo.maven.apache.org/maven2/io/github/xxx/tool/1.0.0

如果上面这个连接可以查到,就已经可以在项目中使用了。同步到中央仓库的时间不太确定。

发布成功之后去帖子上回复一下,告诉管理员发布成功了。

在这里插入图片描述

遇到的问题

  • 执行mvn deploy的时候总是返回401 错误,找了各种办法都不能解决,重新注册了个账户就可以了,不知道是为什么。

  • repository地址已经改变了,现在网上大部分的文章都是旧的,新的是这样的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <distributionManagement>
    <snapshotRepository>
    <id>ossrh</id>
    <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
    <id>ossrh</id>
    <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
    </distributionManagement>

    官方文档有最新的配置信息,遇到问题之后还是要先查官方文档

  • centos发布时报错
    Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign

    解决方法

登录Github Education

点击Get benefits

点击Get student benefits

下一步以后上传自己的学生证件和个人信息等待审核完成。

时间多久不太确定,我大概等了一个月,审核通过之后会收到一封邮件

收到成功之后的邮件之后 到这里

关联上申请时候的github就可以了,关联之后登陆JetBrains账户就可得到授权了

如果没有学生身份的话,还是建议大家购买正版,拒绝盗版软件,购买正版请点击这里

下载安装包

点击 从官网选择自己适合自己操作系统的安装包,下载完成之后放到一个合适的位置,无需要安装。

启动

进入nexus-3.30.0-01\bin目录下,输入cmd

image.png

在命令行中输入nexus /run,稍等片刻

image.png

提示8081端口已经被占用,原来nexus默认使用的端口是8081,关闭正在使用的8081端口之后,在此运行命令稍等片刻启动成功。

登陆系统

启动成功之在浏览器打开http://localhost:8081/

image.png

初始化完成之后点击Sign in登陆,默认账户是admin,初始密码在nexus-3.30.0-01-win64\sonatype-work\nexus3目录下的admin.password文件中,复制到登陆表单中完成登陆,成功之后会提示重新设置密码,设置一个自己常用的密码即可。

增加阿里代理仓库

image.png

image.png

输入两个必选项

aliyun

http://maven.aliyun.com/nexus/content/groups/public/

保存完成

image.png

选择Configuration > Repository, 然后双击 maven-public

image.png

aliyun移动到右侧 保存。

配置Maven

找到maven中的setting.xml,在servers标签中

写入下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
<server>
<id>releases</id>
<username>admin</username>
<password>123456</password>
</server>

<server>
<id>snapshots</id>
<username>admin</username>
<password>123456</password>
</server>

password是自己设置的登陆密码

image.png

在pom文件中加入下面的配置

1
2
3
4
5
6
7
<distributionManagement>
<repository>
<id>releases</id>
<name>User Project Release</name>
<url>http://127.0.0.1:8081/repository/maven-releases</url>
</repository>
</distributionManagement>

发布代码到私有仓库

image.png

双击即可

查看发布的项目

image.png

使用仓库中的项目

pom文件中加入下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

在发布和下载的时候如果遇到权限问题

image.png

image.png