首页 文章 精选 留言 我的

精选列表

搜索[分代式],共10000篇文章
优秀的个人博客,低调大师

三分钟搞定maven插件

老铁昨天下午问我什么时候讲讲Maven插件: 于是老田搞到大半夜终于写了一篇maven的插件,今天分享给大家。 想进一步详聊了请加我微信tj20120622,进群和大家一起聊技术。 Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。那么我们今天就来聊聊Maven插件。 什么是Maven插件? Maven 实际上只是Maven插件集合的核心框架。换句话说,插件是执行大部分实际操作的地方。 插件用于: 创建jar文件, 创建war文件, 编译代码, 单元测试代码, 创建项目文档等。 插件是Maven的核心功能,它允许在多个项目中重用通用的构建逻辑。他们通过在项目描述(项目对象模型(POM))的上下文中执行“操作”(即创建WAR文件或编译单元测试)来实现此目的。可以通过一组唯一的参数来自定义插件的行为,这些参数通过每个插件目标(或Mojo)的描述公开。 一个插件通常提供了一组目标,可使用以下语法来执行: mvn [plugin-name]:[goal-name] 例如:一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译 mvn compiler:compile 插件有哪些类型 Maven 提供以下两种类型插件: 以下是一些常见的插件列表: 例如 我们使用 maven-antrun-plugin 插件在例子中来在控制台打印数据。现在在 C:\MVN\project 文件夹 创建一个 pom.xml 文件,内容如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> 接下来,打开命令终端跳转到 pom.xml 所在的目录,并执行下面的 mvn 命令。 mvn clean Maven 将开始处理并显示 clean 生命周期的 clean 阶段。 [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2020 [INFO] Final Memory: 4M/44M [INFO] -------- 上面的例子展示了以下关键概念: 插件是在 pom.xml 中使用 plugins 元素定义的。 每个插件可以有多个目标。 你可以定义阶段,插件会使用它的 phase 元素开始处理。我们已经使用了 clean 阶段。 你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了 echo 任务到 maven-antrun-plugin 的 run 目标。 就是这样,Maven 将处理剩下的事情。它将下载本地仓库中获取不到的插件,并开始处理。 插件与目标 一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下 : 将插件绑定到生命周期 Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译: 内置绑定 Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中针对default生命周期的jar包打包方式的绑定关系如下: 在第二列中,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式;冒号后面即是绑定的插件目标。 你的仓库中有哪些maven插件? 存放目录=%本地仓库%\org\apache\maven\plugins Maven官网上有更详细的官方插件列表: 自定义插件 在前面我们提到了一个Mojo,Mojo实际上是一个Maven的目标,插件包含任意数量的目标(Mojos)。Mojos可以定义为带注释的java类或Beanshell脚本。Mojo指定有关目标的元数据:目标名称,它适合生命周期的哪个阶段,以及它期望的参数。 Mojo术语是在maven2中引入,它是对如何编写插件的完整重写。Mojo是对Pojo(plain-old-java-object)的一种改进,它将maven替换为plain。 一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。Maven插件项目的打包方式packaging必须为maven-plugin。 实现自定义插件 创建maven项目,添加依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tian.maven</groupId> <artifactId>my-maven-plugin</artifactId> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <name>my-maven-plugin</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!--api依赖--> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.0</version> </dependency> <!--注解支持--> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.4</version> <scope>provided</scope> </dependency> </dependencies> </project> TianMojo继承了 AbstractMojo 这个抽象类,并实现了 execute() 方法,该方法就是用来定义这个 Mojo 具体操作内容,我们只需要根据自己的需要来编写自己的实现即可。 //自定义插件类 //name就是后面使用该插件的时候excuation里面的 @Mojo(name = "tian") public class TianMojo extends AbstractMojo { // 配置的是本maven插件的配置,在pom使用configration标签进行配置 property就是名字, // 在配置里面的标签名字。在调用该插件的时候会看到,还可以设置默认值 @Parameter(property = "userName",defaultValue = "田哥你好") private String userName; @Parameter(property = "pwd",defaultValue = "000000") private String pwd; @Override public void execute() throws MojoExecutionException, MojoFailureException { System.out.println("userm=" + userName + " pwd=" + pwd); System.out.println("my plugin is running"); } } 然后在执行mvn clean install命令。 使用自定义插件 在我们的maven项目添加我们自定义的插件: <build> <plugins> <plugin> <groupId>com.tian.maven</groupId> <artifactId>my-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <executions> <execution> <!-- 表示我们在执行mvn install时候就会执行我们自定义的插件tian--> <phase>install</phase> <goals> <!-- 目标 --> <goal>tian</goal> </goals> </execution> </executions> <!-- 我们自定义的Mojo中定义的属性 --> <configuration> <userName>田维常</userName> <pwd>123456</pwd> </configuration> </plugin> </plugins> </build> 然后就可以在我们的IDEA中看到: 双击my:tian: 还可以使用命令的方式:mvn my:tian my是前缀,是my-maven的缩写。后缀tian就是插件绑定的目标。 到此,我们的自定义Maven插件就搞定了。 总结 Maven插件是Maven的核心功能,插件类型有构建类型和报告类型,插件可以有多个目标也就是可以理解为多个功能。自定义插件主要两步:依赖相关jar包和重写Mojo。自定义的插件的使用和我们用其他插件使用一样,只要在pom中配置相关<plugin>配置即可。 只有真正理解了插件实现原理后,才能慢慢去体会猜测我们平时使用的那些mvn...命令背后是如何实现的。 [学习是一个人对这个神奇世界不断认识的一个过程]

优秀的个人博客,低调大师

MySQL三分钟快速入门

前言 你需要准备什么? 可以连接互联网的一台Macbook Terminal终端 一、安装 执行安装命令。 brew install mysql Tips:brew是MacOS下的包管理工具,若命令不存在,请安装后执行。 执行结果 Updating Homebrew... ==> Auto-updated Homebrew! Updated 1 tap (homebrew/services). No changes to formulae. ==> Downloading https://mirrors.aliyun.com/homebrew/homebrew-bottles/bottles/protobuf-3.13.0.catalina.bottle.tar.gz ==> Downloading https://mirrors.aliyun.com/homebrew/homebrew-bottles/bottles/mysql-8.0.21_1.catalina.bottle.tar.gz ==> Installing dependencies for mysql: protobuf ==> Installing mysql dependency: protobuf ==> Pouring protobuf-3.13.0.catalina.bottle.tar.gz ==> Caveats Emacs Lisp files have been installed to: /usr/local/share/emacs/site-lisp/protobuf ==> Summary 🍺 /usr/local/Cellar/protobuf/3.13.0: 266 files, 19.8MB ==> Installing mysql ==> Pouring mysql-8.0.21_1.catalina.bottle.tar.gz ==> /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld --initialize-insecure --user=yunnasheng --basedir=/usr/local/Cellar/mysql/8.0.21_1 --datadir=/usr/local/var/mysql --tmpdir=/tmp ==> Caveats We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -uroot To have launchd start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: mysql.server start ==> Summary 🍺 /usr/local/Cellar/mysql/8.0.21_1: 290 files, 291.2MB ==> `brew cleanup` has not been run in 30 days, running now... Removing: /usr/local/Cellar/gettext/0.20.1... (1,893 files, 18.4MB) Removing: /Users/yunnasheng/Library/Caches/Homebrew/gettext--0.20.1.catalina.bottle.tar.gz... (8.3MB) Removing: /usr/local/Cellar/openssl@1.1/1.1.1d... (7,983 files, 17.9MB) Removing: /usr/local/Cellar/pcre/8.43... (204 files, 5.5MB) Removing: /Users/yunnasheng/Library/Logs/Homebrew/tree... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/wget... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/libidn2... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/libunistring... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/nginx... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/gettext... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/openssl@1.1... (64B) Removing: /Users/yunnasheng/Library/Logs/Homebrew/pcre... (64B) Pruned 1 symbolic links and 3 directories from /usr/local ==> Caveats ==> protobuf Emacs Lisp files have been installed to: /usr/local/share/emacs/site-lisp/protobuf ==> mysql We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation MySQL is configured to only allow connections from localhost by default To connect run: mysql -uroot To have launchd start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: mysql.server start 1.2 启动 执行启动MySQL命令 mysql.server start 执行结果 Starting MySQL . SUCCESS! 1.3 配置安全策略 执行命令 mysql_secure_installation 执行命令后,根据提示完成密码设置,执行结果 Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file # 选择一个密码级别 Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 Please set the password for root here. # 设置密码 New password: Re-enter new password: Estimated strength of the password: 50 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. # 是否要删除匿名用户?按 y 表示同意,其他任意键表示拒绝 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. # 通常root用户只从本地登录,这样可以确保有人无法猜测来自网络的root密码 Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. # 是否要禁止远程root登录? Disallow root login remotely? (Press y|Y for Yes, any other key for No) : no ... skipping. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. # 是否要删除测试数据库? Remove test database and access to it? (Press y|Y for Yes, any other key for No) : no ... skipping. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. # 现在重新加载授权表? Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done! 二、快速开始 2.1 登录MySQL 输入命令后,根据提示输入刚才设置的root用户的登录密码 mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.21 Homebrew Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 2.2 查看有哪些数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) 2.3 创建数据库 新建一个数据库名为local_test的库,设置字符集为utf8mb4 create database local_test character set utf8mb4; 验证数据库是否创建成功 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | local_test | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) 2.4 创建用户 创建一个登录名为dev_user,密码为@dev6pWd,允许在任意IP登录的用户 mysql>create user 'dev_user'@'%' identified by '@dev6pWd'; Query OK, 0 rows affected (0.01 sec) 如果创建用户时出现错误:Your password does not satisfy the current policy requirements 请先查看密码策略后,修改密码再创建。 查看密码策略 mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec) 扩展语法 修改用户 - bash rename user '用户名'@'IP地址' to '新用户名'@'IP地址'; 修改密码 - set password for '用户名'@'IP地址'=Password('新密码'); 指定ip登录 -( 192.168.1.开头的local_admin用户,密码为admin登录) create user 'local_admin'@'192.168.1.%' identified by 'admin'; 2.5 用户授权 给dev_user用户授予local_test库的所有权限,当然grant这个命令不会给dev_user,只有root用户才有这个命令的权限。 grant all privileges on local_test.* to 'dev_user'@'%'; Query OK, 0 rows affected (0.01 sec) 刷新授权信息 flush privileges; 2.6 创建表 切换dev_user用户 # 退出MySQL mysql> exit Bye # 使用dev_user用户登录 mysql -u dev_user -p # 输入密码 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 8.0.21 Homebrew Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 切换到local_test数据库 # 查看拥有的数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | local_test | +--------------------+ 2 rows in set (0.00 sec) # 使用local_test库 mysql> use local_test; Database changed mysql> # 显示所有表 mysql> show tables; Empty set (0.00 sec) 创建表 CREATE TABLE IF NOT EXISTS `lt_dict`( `id` VARCHAR(64) NOT NULL , `code` VARCHAR(128) NOT NULL, `name` VARCHAR(128) NOT NULL, `status` VARCHAR(12) NOT NULL, PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 插入数据 INSERT INTO lt_dict (id, code, name, status) VALUES ('3c3da1d4b3b94bd9b33fb340dfdb605c', '001', 'cjack-60', '0'); 查询数据 mysql> select * from lt_dict; +----------------------------------+------+----------+--------+ | id | code | name | status | +----------------------------------+------+----------+--------+ | 3c3da1d4b3b94bd9b33fb340dfdb605c | 001 | cjack-60 | 0 | +----------------------------------+------+----------+--------+ 1 row in set (0.00 sec) 恭喜你!完成了MySQL的基本入门!! 探索更多MySQL技能 MySQL进阶

优秀的个人博客,低调大师

5分钟快速安装thinkphp5.1

简介 ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。 安装 为了方便部署和解决环境兼容性等问题,采用docker来部署安装thinkphp。 首先安装Docker容器管理面板URLOS,请参考官方文档:https://www.URLOS.com/center-home-index-detail-10-22-y.html。 登录URLOS:http://ip:9968(其中的IP是你的服务器的IP,登录的默认用户名和密码均为urlos) 在应用市场中搜索“thinkphp”并安装,如下图: 安装流程如下: 1. 填写服务名称、服务端口、选择运行节点、选择智能部署 2. 填写域名:www.aaa.com(这里填写自己的域名) 3. 设置数据库 选择自动添加并部署数据库,填写数据库密码;数据库名和数据库用户名跟前面的服务名称一致,这里已经自动设置好; 记下数据库密码、数据库名和数据库用户名,下面要用到; 然后点击“提交”按钮,等待部署完成; 访问网站 访问:http://domain(domain是你的服务器的域名) 这样thinkphp5.1就已经安装完成。 设置SFTP 选择“修改并部署”我们刚刚安装完成的thinkphp 选择“上传与下载”选项卡,开启SFTP上传下载并填写SFTP端口、SFTP密码;先别急着提交,接着看下面。 然后选择“基本信息”选项卡,选中智能部署,再点击“提交”,等待部署完成。 部署完成后,用ssh或者SFTP客户端登录: 网站根目录是:/mounts/thinkphp001/data/www(由于本次教程的服务名称为thinkphp001,实际操作中根据你创建的服务名称自动创建)

优秀的个人博客,低调大师

5分钟了解分页的那些事?

写在前面 最近面试,我问了一个非常通用的问题,题目是什么呢? 题目就是,谈谈你对分页里面逻辑的理解以及如何实现的?面试题目不难,但是90%的人讲不清楚分页逻辑,对分页的一些细节问题更是回答的很模糊。不是很清晰。下面借此机会给大家讲讲分页有哪些逻辑。 分页的那些事 如上图所示: 分页包含很多小细节, 每页展示10条,多余的下一页展示,这里就涉及的知识点有,是否采取逻辑分页还是物理分页,物理分页的实现方式有哪些,各位自行百度,这里主要讲前台页面如何编写分页的逻辑 <#– 是否上一页–> <#if page.hasPreviousPage> <li><a class=”pointer” data-page=”1″>首页</i></a></li> <li><a class=”pointer” data-page=”${page.prePage}”>上一页</i></a></li> </#if> <#–处理开头部分逻辑 开头省略号实现逻辑–> <#if (page.navigateFirstPage = 2)> <li><a class=”pointer” data-page=”1″>1</a></li> <#elseif (page.navigateFirstPage > 2)> <li><a class=”pointer” data-page=”1″>1</a></li> <li>…</li> </#if> <#– 是否下一页–> <#if page.hasNextPage> <li><a class=”pointer active” data-page=”${page.nextPage}”>下一页</i></a></li> <li><a class=”pointer” data-page=”${page.pages}”>尾页</i></a></li> </#if> <#–处理结果部分显示的逻辑 开头省略号实现逻辑–> <#if (page.navigateLastPage = page.pages-1)> <li><a class=”pointer” data-page=”${page.pages}”>${page.pages}</a></li> <#elseif (page.navigateLastPage < page.pages-1)> <li>…</li> <li><a class=”pointer” data-page=”${page.pages}”>${page.pages}</a></li> </#if> <#– 中间显示页数–> <#list page.navigateFirstPage..page.navigateLastPage as item> <li><a ${(page.pageNum == item)?string(‘class=”pointer active”‘,’class=”pointer” data-page=”${item?c}”‘)}>${item?c}</a></li> </#list> <#– 显示总页数–> <li> 共 ${page.pages} 页 </li> 分页的实现 上面分页的逻辑已经讲的比较清晰,逻辑需求理解清楚了,实现起来就简单了,这里要提醒大家的是,一个系统很多地方都有可能用到分页,所以大家最好封装成一个通用的组件,以便项目中实现复用。还有最后啰嗦一句,分页虽然不难,但是做一个通用的且体验感很强的分页组件需要大家去下一翻功夫。 原文发布时间为:2018-11-5 本文作者:HARRIES 本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记”。

优秀的个人博客,低调大师

3分钟了解阿里云容器服务

容器是什么 软件集装箱,把程序和依赖项打包成镜像,在主机上启动运行成为容器。 和虚拟机的差别:镜像小,启动快;可以跨平台运行。 集群管理:在主机集群中部署和管理容器应用。目前主流的管控系统是Kubernetes ( K8S)和Docker Swarm。 K8S介绍 Kubernetes(k8s)是自动化容器操作的开源平台,包括部署,调度和节点集群间扩展。你可以将Docker看成Kubernetes内部使用的低级别组件。 使用Kubernetes可以: 自动化容器的部署和复制 随时扩展或收缩容器规模 将容器组织成组,并且提供容器间的负载均衡 很容易地升级应用程序容器的新版本 提供容器弹性,如果容器失效就替换它,等等... 容器作用:助力企业IT敏捷进化 阿里云容器服务亮点 和阿里云产品集成度高; 混合云支持能力强; 能够支持大规模集群; 自动化运维程度高; K8S和D

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册