Eclipse基础安装与简单使用

2022-09-28 13:48:56 浏览数 (1)

[toc]

0x00 前言简述

描述: Eclipse IDE编辑器 它是是由IBM公司开发的一款JAVA程序开发的软件(支持Windows、Mac、Linux),提供了开发的便利性,并且可以免费使用它, 当前版本 Eclipse IDE 2020-12 R;

官网下载: https://www.eclipse.org/downloads/ Eclipse IDE 2020-12 R(可选择Mirror下载):https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2020-12/R/eclipse-jee-2020-12-R-linux-gtk-x86_64.tar.gz

PS : 程序的编译和运行的环境配置(一般不改) 由于修改编译环境会导致不可置信

  • 低版本JDK编译,高版本JDK运行。可以。
  • 高编译,低运行。不可以。
  • 建议,编译和运行的版本一致。

0x01 基础安装

环境依赖:JDK(Java) 操作系统:Windows|linux

Ubuntu 安装

描述: 在 Ubuntu-20.04-01-Server 下安装并使用 Eclipse, Windows 安装此处不多说; 安装环境:

代码语言:javascript复制
root@weiyigeek-pc:~/Downloads# ls
eclipse-jee-2020-12-R-linux-gtk-x86_64.tar.gz  jdk-8u211-linux-x64.tar.gz

root@weiyigeek-pc:~/Downloads# lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal

root@weiyigeek-pc:~/Downloads# uname -r
5.4.0-59-generic

安装部署流程:

Step 1.分别上传 jdk 和 eclipse-jee 到服务器之中;

代码语言:javascript复制
root@weiyigeek-pc:~/Downloads# ls
eclipse-jee-2020-12-R-linux-gtk-x86_64.tar.gz  jdk-8u211-linux-x64.tar.gz

Step 2.Java 环境配置

代码语言:javascript复制
# @java 环境设置 
java::Env () {
  # 基础变量
  JAVA_FILE="/root/Downloads/jdk-8u211-linux-x64.tar.gz"
  JAVA_SRC="/usr/local/"
  JAVA_DIR="/usr/local/jdk"
  # 环境配置
  sudo tar -zxvf ${JAVA_FILE} -C ${JAVA_SRC}
  sudo rm -rf /usr/local/jdk 
  JAVA_SRC=$(ls /usr/local/ | grep "jdk")
  sudo ln -s ${JAVA_SRC} ${JAVA_DIR}
  export PATH=${JAVA_DIR}/bin:${PATH}
  sudo cp /etc/profile /etc/profile.$(date  %Y%m%d-%H%M%S).bak
  sudo tee -a /etc/profile <<'EOF'
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
EOF
  java -version
}

Step 3.Eclipse 解压与软连接创建

代码语言:javascript复制
# 解压软连接
tar -zxf eclipse-jee-2020-12-R-linux-gtk-x86_64.tar.gz  -C /usr/local/
ln -s /usr/local/eclipse/eclipse /usr/bin/eclipse

# 桌面图标
nano eclipse.desktop
[Desktop Entry]
Name=Eclipse
Comment=Eclipse-JEE
Exec=/usr/local/eclipse/eclipse
Icon=/usr/local/eclipse/icon.xpm
Type=Application
Terminal=false
StartupNotify=true
Encoding=UTF-8

sudo chmod 777 eclipse.desktop

# 启动测试
./eclipse

WeiyiGeek.Eclipse运行


0x02 简单使用

(1) Eclipse的视窗和视图介绍

代码语言:javascript复制
视图是由某些视窗的组合而成的
  * Java 视图
    * Java EE 视图
  * Debug 视图

视窗每一个基本的窗体被称为视窗
    * PackageExplorer  显示项目结构,包,类,及资源
    * Outline   显示类的结构,方便查找,识别,修改
    * Console  程序运行的结果在该窗口显示
    * Hierarchy 显示Java继承层次结构,选中类后F4

WeiyiGeek.Ubuntu中运行Eclipse界面

(2) Eclipse中快捷键的使用

描述:使用快捷键可以帮助我们提高开发效率最重要的是提高比格;

代码语言:javascript复制
* 0:内容辅助键起提示作用 Alt / 
* 1:显示类说明和隐藏类说 F2
* 2:显示类的类型层次结构 F4
* 3:自动生成构造方法与生成提供外部使用的公共方法
* A:新建(可以输入关键字选择)   ctrl   n 
* B:格式化            ctrl shift f
* C:导入包            ctrl shift o 
* D:注释(单行/多行)   ctrl /,ctrl shift /,ctrl shift 
* E:代码上下移动 选中代码alt 上/下箭头
* F:查看源码  选中类名(F3或者Ctrl 鼠标点击)
* G:查找具体的类 ctrl   shift   t
* H:查找具体类的具体方法(列表显示) ctrl   o
* I:给建议根据右边生成左边的数据类型(生成方法)  ctrl 1 (实用 将鼠标放在创建的方法名上)
* J:删除代码 ctrl   d
* K:抽取方法 alt   shift   m 
* L:改名 alt   shift   r 
* M:隐藏除代码区的所有窗口 ctrl   m
* O:向上或者向下复制一行 `ctrl   alt   [上键|下键]`

Eclipse快捷键大全(转载)

代码语言:javascript复制
Ctrl 1 快速修复(最经典的快捷键,就不用多说了)
Ctrl D: 删除当前行 
Ctrl Alt ↓ 复制当前行到下一行(复制增加)
Ctrl Alt ↑ 复制当前行到上一行(复制增加)
Alt ↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt ↑ 当前行和上面一行交互位置(同上)
Alt ← 前一个编辑的页面
Alt → 下一个编辑的页面(当然是针对上面那条来说了)
Alt Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift Ctrl Enter 在当前行插入空行(原理同上条)
Ctrl Q 定位到最后编辑的地方
Ctrl L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl M 最大化当前的Edit或View (再按则反之)
Ctrl / 注释当前行,再按则取消注释
Ctrl O 快速显示 OutLine
Ctrl T 快速显示当前类的继承结构
Ctrl W 关闭当前Editer
Ctrl K 参照选中的Word快速定位到下一个
Ctrl E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl /(小键盘) 折叠当前类中的所有代码
Ctrl ×(小键盘) 展开当前类中的所有代码
Ctrl Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt /来代替)
Ctrl Shift E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl J 正向增量查找(按下Ctrl J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl Shift J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl Shift F4 关闭所有打开的Editer
Ctrl Shift X 把当前选中的文本全部变为大写
Ctrl Shift Y 把当前选中的文本全部变为小写
Ctrl Shift F 格式化当前代码
Ctrl Shift P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

# 下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt Shift开头的了)
Alt Shift R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt Shift M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt Shift C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt Shift L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候) - 实用
Alt Shift F 把Class中的local变量变为field变量 (比较实用的功能)
Alt Shift I 合并变量(可能这样说有点不妥Inline)
Alt Shift V 移动函数和变量(不怎么常用)
Alt Shift Z 重构的后悔药(Undo)|Try Catch快捷键 - 实用

# 编辑
作用域 功能 快捷键 
全局 查找并替换 Ctrl F 
文本编辑器 查找上一个 Ctrl Shift K 
文本编辑器 查找下一个 Ctrl K 
全局 撤销 Ctrl Z 
全局 复制 Ctrl C 
全局 恢复上一个选择 Alt Shift ↓ 
全局 剪切 Ctrl X 
全局 快速修正 Ctrl1 1 
全局 内容辅助 Alt / 
全局 全部选中 Ctrl A 
全局 删除 Delete 
全局 上下文信息 Alt ?
Alt Shift ?
Ctrl Shift Space 
Java编辑器 显示工具提示描述 F2 
Java编辑器 选择封装元素 Alt Shift ↑ 
Java编辑器 选择上一个元素 Alt Shift ← 
Java编辑器 选择下一个元素 Alt Shift → 
文本编辑器 增量查找 Ctrl J 
文本编辑器 增量逆向查找 Ctrl Shift J 
全局 粘贴 Ctrl V 
全局 重做 Ctrl Y 

 
# 查看
# 作用域 功能 快捷键 
全局 放大 Ctrl = 
全局 缩小 Ctrl - 

 
# 窗口
# 作用域 功能 快捷键 
全局 激活编辑器 F12 
全局 切换编辑器 Ctrl Shift W 
全局 上一个编辑器 Ctrl Shift F6 
全局 上一个视图 Ctrl Shift F7 
全局 上一个透视图 Ctrl Shift F8 
全局 下一个编辑器 Ctrl F6 
全局 下一个视图 Ctrl F7 
全局 下一个透视图 Ctrl F8 
文本编辑器 显示标尺上下文菜单 Ctrl W 
全局 显示视图菜单 Ctrl F10 
全局 显示系统菜单 Alt - 

 
# 导航
# 作用域 功能 快捷键 
Java编辑器 打开结构 Ctrl F3 
全局 打开类型 Ctrl Shift T 
全局 打开类型层次结构 F4 
全局 打开声明 F3 
全局 打开外部javadoc Shift F2 
全局 打开资源 Ctrl Shift R 
全局 后退历史记录 Alt ← 
全局 前进历史记录 Alt → 
全局 上一个 Ctrl , 
全局 下一个 Ctrl . 
Java编辑器 显示大纲 Ctrl O 
全局 在层次结构中打开类型 Ctrl Shift H 
全局 转至匹配的括号 Ctrl Shift P 
全局 转至上一个编辑位置 Ctrl Q 
Java编辑器 转至上一个成员 Ctrl Shift ↑ 
Java编辑器 转至下一个成员 Ctrl Shift ↓ 
文本编辑器 转至行 Ctrl L 

 
# 搜索
# 作用域 功能 快捷键 
全局 出现在文件中 Ctrl Shift U 
全局 打开搜索对话框 Ctrl H 
全局 工作区中的声明 Ctrl G 
全局 工作区中的引用 Ctrl Shift G 

 
# 文本编辑
# 作用域 功能 快捷键 
文本编辑器 改写切换 Insert 
文本编辑器 上滚行 Ctrl ↑ 
文本编辑器 下滚行 Ctrl ↓ 

 
# 文件
# 作用域 功能 快捷键 
全局 保存 Ctrl S 
全局 打印 Ctrl P 
全局 关闭 Ctrl F4 
全局 全部保存 Ctrl Shift S 
全局 全部关闭 Ctrl Shift F4 
全局 属性 Alt Enter 
全局 新建 Ctrl N 

 
# 项目
# 作用域 功能 快捷键 
全局 全部构建 Ctrl B 

 
# 源代码
# 作用域 功能 快捷键 
Java编辑器 格式化 Ctrl Shift F 
Java编辑器 取消注释 Ctrl  
Java编辑器 注释 Ctrl / 
Java编辑器 添加导入 Ctrl Shift M 
Java编辑器 组织导入 Ctrl Shift O 
Java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。
也可以使用Ctrl 1自动修正。 

 
# 运行
# 作用域 功能 快捷键 
全局 单步返回 F7 
全局 单步跳过 F6 
全局 单步跳入 F5 
全局 单步跳入选择 Ctrl F5 
全局 调试上次启动 F11 
全局 继续 F8 
全局 使用过滤器单步执行 Shift F5 
全局 添加/去除断点 Ctrl Shift B 
全局 显示 Ctrl D 
全局 运行上次启动 Ctrl F11 
全局 运行至行 Ctrl R 
全局 执行 Ctrl U 

 
# 重构
# 作用域 功能 快捷键 
全局 撤销重构 Alt Shift Z 
全局 抽取方法 Alt Shift M 
全局 抽取局部变量 Alt Shift L 
全局 内联 Alt Shift I 
全局 移动 Alt Shift V 
全局 重命名 Alt Shift R 
全局 重做 Alt Shift Y

0x03 基本配置

1) IDE 编译和运行的环境配置

选择菜单栏:window -- Preferences -- Java

  • 编译环境:Compile 默认选中的就是最高版本。
  • 运行环境:Installed JREs默认会找你安装的那个JDK建议配置了Java的环境变量(也可以指定为您安装其他的JDK安装路径)。

WeiyiGeek.

2) IDE 设置注释

描述:我们可以设置注释也可以进行删除注释,选择你不想要的内容通过右边Edit编辑(请只删除注释部分,不是注释部分的不要删除)。 选择菜单栏:window -- Preferences -- Java -- Code Style -- Code Templates

WeiyiGeek.

3) IDE 样式窗格设置

A:行号的显示和隐藏

  • 显示:在代码区域的最左边的空白区域,右键 – Show Line Numbers即可。
  • 隐藏:把上面的动作再做一次。

B:字体大小及颜色

  • a:Java代码区域的字体大小和颜色:
    • window – Preferences – General – Appearance – Colors And Fonts –Java修改 – Java Edit Text Font
  • b:控制台
    • window – Preferences – General – Appearance – Colors And Fonts – Debug – Console font
  • c:其他文件
    • window – Preferences – General – Appearance – Colors And Fonts – Basic – Text Font

C:窗体给弄乱了,怎么办?

  • window – Reset Perspective

D:控制台找不到了,怎么办?

  • Window–Show View—Console

E:取消悬浮提示

  • window – Preferences – Java–Editor–Hovers。右边将Combined Hover勾去掉。
  • 这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上按F2即可。

WeiyiGeek.

4) 辅助键设置

描述:在Eclipse的IDE中常常会使用一些快捷大大的提高了我们的开发效率,

  • 比如按键 alt / 功能是代码和内容补齐功能,非常的强大还可以自动导包;

定义自己的alt /快捷输入补齐:windows--perference-Java-Editor-Templates--New

代码语言:javascript复制
#补充输出语句,选中需要输出的部分,alt /选择最后一项即可
Alt / #代码提示以及自动导包作用

#示例
main alt /   #public static void main(String[] args) 
syso alt /   #System.out.println("")

还比如alt shit s [cor]强大到可以建立空参构造以及有参构造

代码语言:javascript复制
#使用方法:
在菜单栏source里面进行选择或者在代码区鼠标右键选择source里面进行选择;
Generate Constructors from Superclass
Generate Constructor using field
Generate gettter and setters

alt   shit   s   [cor] #会根据您在类中声明的成员变量来
- c 生成空参构造
- o 生成有参构造
- r 生成get和set方法

基础示例:

代码语言:javascript复制
class Person {
  private String name;
  private int age;
  
  //source ->Generate Constructors from Superclass  && 快捷键:alt   shift   s   c
  public Person() {
    super();
  }
  
  //source ->Generate Constructor using field && 快捷键:alt   shift   s   o
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }

  //source ->Generate gettter and setters&& 快捷键:alt   shift   s   r
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

5) 编码格式设置

描述:在Window –> Preferences–> General–> Workspace下,面板Text file encoding 选择UTF-8格式

6) 注释快捷键

代码语言:javascript复制
1.单行注释
添加注释:Ctrl / 或 Ctrl   Shift  c 在单行代码前添加//注释
取消注释:Ctrl / 或 Ctrl   Shift  c 在单行代码前取消//注释

2.多行注释
添加注释:Ctrl   Shift   / 为选中代码块添加注释
取消注释:Ctrl   Shift   为选中代码块取消注释

0x04常用插件

(1) Lombok 插件

描述: Lombok 的插件可以帮助我们简化代码(比如set/get方法可以省略不写),取而代之的是在 JavaBean 上标注的注解;

Lombok官方介绍:通过增加一些“处理程序”,可以让 Java 变得简洁、快速。

为啥要使用此插件? 答:在 Java 中要保证封装性,需要将成员变量私有化,对外提供 set/get 方法来访问,虽然现在的 IDE,像 eclipse,IDEA都提供了快捷键,来生成 set/get 方法,但是在做项目的时候,一个 JavaBean 往往会有很多的成员变量,一个变量对应两个方法,如果有10几个成员变量,那么会对应20多个方法,也许还要去写构造器、equals 等方法,而且需要维护。这样一来会使代码变得非常冗余,这些显得很冗长也没有太多技术含量,一旦修改属性就容易出现忘记修改对应方法的失误。

Lombok安装方法 描述:官方下载lombok.jar,双击下载好的lombak.jar安装操作进行依赖安装;

  • 1.点击 Speclify Location 选择 eclipse 的安装目录,然后点击Install / Update ,点击Quit Installer完成安装
  • 2.安装完成之后请确认eclipse安装路径下是否多了一个lombok.jar包,并且其配置文件eclipse.ini中是否添加了如下内容-javaagent:D:Programseclipselombok.jar,然后重启Eclipse后将lombok.jar导入项目即可;
  • 3.如过安装成功但是@Data等注解无效,可能是由于你的eclipse版本是新版本,你的lombok.jar版本太旧。那么请下载最新的lombok.jar再进行安装。

WeiyiGeek.Lombok

Lombok注解使用方法 PS:使用得时候需要进行导包,否则不能使用我得版本是Eclipse 2019/6

@Data 注解:为类的所有属性自动生成 setter/getter、equals、canEqual、hashCode、toString 方法,如为 final 属性则不会为该属性生成 setter 方法。

包含了 @ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性

代码语言:javascript复制
import lombok.Data;  

@Data
public class Student {
    private String name;
    private Integer age;
    public static void main(String[] args) {
      Student d = new Student();
      d.setName("WeiyiGeek");
      d.setAge(15);
      System.out.println(d.toString());
    }
}

//#执行结果
Student(name=WeiyiGeek, age=15)

@Getter/@Setter 注解:指定属性自动生成 set/get 方法它不想@Date那么的粗暴

代码语言:javascript复制
//#示例1.
import lombok.Setter;
public class Student {
   @Setter private String name;
    private Integer age;
    private Integer id;
    private String major;

    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("Mr.ml");
    }
}

//#示例2.
package top.weiyigeek.Lombok;
import lombok.Getter;
import lombok.Setter;

public class Demo2 {
    @Setter @Getter private String Name;
    @Setter  private String Address;
    public static void main(String[] args) {
        Demo2 d2 = new Demo2();
        d2.setName("Weiyigeek");
        d2.setAddress("Beijing");
        System.out.println(d2.getName()); //由于Address属性没加@Getter注释所以这里无法调用getAddress方法
        System.out.println(d2.toString()); //由于没有重新toString方法
    }
}
//执行结果:
Weiyigeek
top.weiyigeek.Lombok.Demo2@15db9742

-@NonNull 注解:用在属性或构造器上,Lombok 会生成一个非空的声明,可用于校验参数能帮助避免空指针。

代码语言:javascript复制

public class Student {
  @Setter private String name;
    public Student(@NonNull String name) {
        this.name = name;
    }
}

@Cleanup 注解: 能帮助我们自动调用 close() 方法很大的简化了代码。

代码语言:javascript复制
//#示例1
public class CleanupExample {
  public static void main(String[] args) throws IOException {
  @Cleanup InputStream in = new FileInputStream(args[0]);
  @Cleanup OutputStream out = new FileOutputStream(args[1]);
  byte[] b = new byte[10000];
  while (true) {
   int r = in.read(b);
      if (r == -1) break;
      out.write(b, 0, r);
    }
  }
}


//#示例2
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import lombok.Cleanup;
public class Demo3 {
    public static void main(String[] args) {
        try {
            @Cleanup InputStream in = new FileInputStream(args[0]);
            @Cleanup OutputStream out = new FileOutputStream(args[1]);
            byte[] b = new byte[1024];
            while(true) {
             int r = in.read(b);
             if (r == -1) {
                 System.out.println("内容复制完成!");
                 break;
             }
             out.write(b, 0, r);
            }
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
}

@EqualsAndHashCode 注解:默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成 equals 和 hashCode,也能通过 exclude注解来排除一些属性

代码语言:javascript复制
@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {
    private transient int transientVar = 10;
    private String name;
    private double score;
    private Shape shape = new Square(5, 10);
    private String[] tags;
    private int id;
    public String getName() {
        return this.name;
    }

    @EqualsAndHashCode(callSuper=true)
    public static class Square extends Shape {
        private final int width, height;
        public Square(int width, int height) {
            this.width = width;
            this.height = height;
        }
    }
}

@ToString 注解: 使用@ToString 注解,Lombok 会生成一个 toString() 方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序)用逗号来分割。通过将 includeFieldNames 参数设为 true 就能明确的输出 toString() 属性。这一点是不是有点绕口通过代码来看会更清晰些。

代码语言:javascript复制
@ToString(exclude="id")
public class ToStringExample {
    private static final int STATIC_VAR = 10;
    private String name;
    private Shape shape = new Square(5, 10);
    private String[] tags;
    private int id;
    public String getName() {
        return this.getName();
    }

  @ToString(callSuper=true, includeFieldNames=true)
  public static class Square extends Shape {
      private final int width, height;
      public Square(int width, int height) {
          this.width = width;
          this.height = height;
      }
  }
}

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor : 无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。

代码语言:javascript复制
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
    private int x, y;
    @NonNull private T description;
    @NoArgsConstructor
    public static class NoArgsExample {
      @NonNull private String field;
    }
}

(2) git 插件

push项目到远程仓库并为项目打标签的操作流程:

  • (1) 修改eclipse已配置git仓库的某一个文件,推送工作区、暂存区的代码到远程仓库;

WeiyiGeek.push 项目

PS : 如果选择Commit and push 就立即 上传到远程仓库中,而commit仅仅提交到本地仓库中;如果是一个稳定的版本又要为它打Tag的情况下可以选择Commit,只是减少一步重复提交的操作而已;

  • (2) 创建Tags 点击右键项目-> Team -> Advanced -> create Tag,输入Tag 名称与Tag的信息备注, 然后Push tag 于此同时也将本地仓库的commit修改提交到了远程仓库, 之后点击完成即可;

WeiyiGeek.push tag

  • (3) 在gitlab仓库中查看推送的Tag信息;

WeiyiGeek.show tags

0 人点赞