当前位置: 首页 > news >正文

[笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server

随着软件开发节奏的加快,持续集成(CI)和持续部署(CD)已经成为确保软件质量和加速产品发布的不可或缺的部分。Jenkins作为一款广泛使用的开源自动化服务器,为开发者提供了一个强大的平台来实施这些实践。然而,在实际操作中,尤其是在需要跨越不同操作系统边界时——例如将基于Linux的构建服务器上的Java应用程序部署到Windows Server环境中——可能会遇到一系列挑战。本文聚焦于这一特定场景,详细介绍如何使用Jenkins来创建和管理Jobs,以便从GitLab仓库中拉取最新的Java项目源码,经过自动化的构建过程,最终将其部署到Windows Server上运行。

jenkins 部署 : [笔记] Jenkins 安装与配置全攻略:Ubuntu 从零开始搭建持续集成环境


一. 安装 jenkins 插件

1. GitLab 相关插件

用于与 GitLab 仓库集成,支持拉取代码、触发构建等。

  • GitLab
    提供 GitLab 与 Jenkins 的集成,支持 GitLab Webhook、MR 触发构建等功能。

  • Git Plugin
    用于从 Git 仓库(包括 GitLab)拉取代码。

  • GitLab API
    提供与 GitLab API 的交互支持(可选,根据需求安装)。

2. 构建工具插件

用于构建 Java 项目。

  • Maven Integration Plugin
    如果使用 Maven 构建 Java 项目,需要安装此插件。

  • Gradle Plugin
    如果使用 Gradle 构建 Java 项目,需要安装此插件。

3. SSH 相关插件

用于通过 SSH 连接到 Windows Server 2019 并部署应用。

  • SSH Build Agents Plugin
    允许 Jenkins 使用 SSH 密钥进行身份验证。

  • Publish Over SSH
    支持通过 SSH 将构建产物传输到远程服务器(Windows Server 2019)。

在这里插入图片描述


二. 全局工具配置

在这里插入图片描述

1. Maven 配置

在这里插入图片描述

2. Maven 安装

在这里插入图片描述


三. 配置代码仓库

我的代码仓库是使用的 极狐 gitlab

1. 获取 gitlab 的访问令牌(Access tokens)

在这里插入图片描述

期间 read_repository 必须勾选

  • 仅需拉取代码:
    如果 Jenkins 只需要从 GitLab 拉取代码(例如通过 Git-over-HTTP 或 Repository Files API),那么只需授予 read_repository 权限即可。
  • 需要与 GitLab API 交互:
    如果 Jenkins 需要调用 GitLab API 来进行其他操作(比如获取项目详细信息、触发构建、管理合并请求等),你将需要授予 read_api 权限。这包括对所有群组和项目的读访问权、容器镜像库和软件包库的访问权等。
  • 高级集成:
    在某些情况下,你可能还需要更多的权限,例如推送代码、创建标签或分支等。这些情况通常需要更高的权限级别,如 write_repository 或自定义权限设置。

在这里插入图片描述

2. 配置 jenkins 凭证

  • 进入凭证管理
    在这里插入图片描述
  • 配置全局凭证

在这里插入图片描述

  • 添加凭证
    在这里插入图片描述
  • 选择类型 Username with password
    在这里插入图片描述

三. (win服务器使用) Windows Server 2019 启动 OpenSSH Server

1. 安装 OpenSSH Server

# 以管理员身份运行 PowerShell# 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0# 设置自动启动
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic# 启动 SSH 服务
Start-Service sshd
Start-Service ssh-agent# 确认服务状态
Get-Service sshd

2. 配置 SSH 服务

编辑 C:\ProgramData\ssh\sshd_config 文件,添加或修改以下内容:

# 编辑 C:\ProgramData\ssh\sshd_config 文件,添加或修改以下内容:
PasswordAuthentication yes
PermitRootLogin yes
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe
KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256
HostKeyAlgorithms ssh-rsa,rsa-sha2-512,rsa-sha2-256

3. 重启 SSH 服务

Restart-Service sshd

4. 配置防火墙

# 添加防火墙规则
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

四. 配置 SSH Servers

在这里插入图片描述

1. 使用账号密码

注意 : windows 服务器的配置 Remote Directory 只能使用基础目录 , 不可修改

在这里插入图片描述

2. 使用秘钥

a. 生成SSH密钥对

  • 打开终端或命令提示符。
  • 运行以下命令生成SSH密钥对:
# 生成 RSA 密钥对
ssh-keygen -t rsa -b 4096 -C "jenkins@example.com"# 密钥默认保存在:
# - 私钥:C:\Users\jenkins\.ssh\id_rsa
# - 公钥:C:\Users\jenkins\.ssh\id_rsa.pub
  • ssh-keygen : 用于生成、管理和转换认证密钥对的命令行工具,主要用于SSH协议。通常位于 /usr/bin/ssh-keygen/usr/local/bin/ssh-keygen
  • -t rsa-t 指定要生成的密钥类型。rsa 表示生成RSA类型的密钥。RSA是一种非对称加密算法,广泛用于SSH连接。其他常见的密钥类型包括 dsa(较少使用)、ecdsaed25519
  • -b 4096-b 指定密钥的位数。4096 表示生成的RSA密钥长度为4096位。默认情况下,ssh-keygen 生成的RSA密钥长度为2048位。增加密钥长度可以提高安全性,但也会稍微增加计算开销。4096位是一个常用的、安全的选择。
  • -C "your_email@example.com" : -C 添加一个注释(comment)到生成的公钥中。"your_email@example.com" 是你提供的注释内容,通常是你的电子邮件地址。
  • 按照提示操作,可以接受默认路径和文件名(通常是 ~/.ssh/id_rsa~/.ssh/id_rsa.pub)。
    在这里插入图片描述

  • Enter passphrase (empty for no passphrase):系统会提示你输入一个密码短语(passphrase)。如果你设置了密码短语,每次使用私钥时都需要输入它。这增加了安全性,但也增加了使用的复杂性。(如果你不希望设置密码短语,直接按回车键即可。)
    在这里插入图片描述
    在这里插入图片描述

b. 将公钥复制到 Windows Server

  • 将生成的公钥文件(通常是 ~/.ssh/id_rsa.pub)的内容复制到剪贴板。
  • 将公钥内容添加到 authorized_keys 文件
# 创建 authorized_keys 文件并添加公钥内容
# 将 Jenkins 服务器上 id_rsa.pub 的内容复制到这个文件
Add-Content -Path C:\Users\Administrator\.ssh\authorized_keys -Value "ssh-rsa AAAA..."

-Value 是你的 ~/.ssh/id_rsa.pub 的内容

在这里插入图片描述

c. 编辑 C:\ProgramData\ssh\sshd_config

# 启用公钥认证
PubkeyAuthentication yes# 指定授权密钥文件位置
AuthorizedKeysFile .ssh/authorized_keys# 可选:禁用密码认证(更安全)
PasswordAuthentication no

在这里插入图片描述

d. 设置文件权限

# 设置 .ssh 目录的权限
icacls "C:\Users\Administrator\.ssh" /inheritance:r
icacls "C:\Users\Administrator\.ssh" /grant "SYSTEM:(F)"
icacls "C:\Users\Administrator\.ssh" /grant "ADMINISTRATORS:(F)"
icacls "C:\Users\Administrator\.ssh" /grant "Administrator:(F)"# 设置 authorized_keys 文件的权限
icacls "C:\Users\Administrator\.ssh\authorized_keys" /inheritance:r
icacls "C:\Users\Administrator\.ssh\authorized_keys" /grant "SYSTEM:(F)"
icacls "C:\Users\Administrator\.ssh\authorized_keys" /grant "ADMINISTRATORS:(F)"
icacls "C:\Users\Administrator\.ssh\authorized_keys" /grant "Administrator:(F)"

e. 重启 SSH 服务

# 重启 SSH 服务
Restart-Service sshd

f. 在 Jenkins 中配置 SSH Publisher:

path to key 与 key 只需要配置一个就可以

在这里插入图片描述

3. 测试连接

在这里插入图片描述


四. 编写 jobs

在这里插入图片描述
在这里插入图片描述

1. 配置源码管理

在这里插入图片描述

2. 配置 构建完成后 上传产物与运行脚本

注意:

  1. 可以选择 构建环境中的 Send files or execute commands over SSH after the build runs 也可以选择 构建后操作中的Send build artifacts over SSH
  2. Remote directory : 我使用的是环境参数,在 Jenkins 中使用环境参数使用 必须是 ${FOLDER_NAME} 的格式。
  3. windows 服务器 运行脚本的话,只能运行服务器上的脚本。
> Exec command : 
> ${DEPLOY_BAT_PATH} "${FOLDER_NAME}" "${DEPLOY_LOG_PATH}" "${BASE_SOURCE_PATH}" "${BASE_TARGET_PATH}" "${JAR_NAME}"

在这里插入图片描述

3. 配置环境变量

在 Jenkins 中使用环境参数使用 必须是 ${FOLDER_NAME} 的格式。

  1. name : FOLDER_NAME , defaultValue : test , description : 部署文件夹名称
  2. name : DEPLOY_LOG_PATH , defaultValue : E:\deploy.log , description : 日志文件路径
  3. name : BASE_SOURCE_PATH , defaultValue : C:\Users\Administrator , description : 源代码基础路径
  4. name : BASE_TARGET_PATH , defaultValue : E:\project , description : 目标基础路径
  5. name : JAR_NAME , defaultValue : central-server.jar , description : JAR文件名称
  6. name : DEPLOY_BAT_PATH , defaultValue : E:\deploy.bat , description : 部署脚本路径

在这里插入图片描述

4. 编写脚本

部分内容声明 :

# 因为一些要求 , 要生成启动的脚本 , java -jar 换成 javaw -jar 也是一样的
echo Creating start script... >> %DEPLOY_LOG%
(echo @echo offecho cd /d "%TARGET_PATH%"echo java -jar "%JAR_NAME%" ^> "%TARGET_PATH%\app.log" 2^>^&1
) > "%TARGET_PATH%\start.bat"# 这里因为...用的盗版系统,环境变量被魔改过,start不会起作用.所以用 call 了,如果可以用start用start,call会等待。导致Jenkins超时
if exist "%TARGET_PATH%\%JAR_NAME%" (:: 启动应用cd /d "%TARGET_PATH%"call start.batecho Application started successfully >> %DEPLOY_LOG%
) else (echo WARNING: JAR file not found after deployment >> %DEPLOY_LOG%
)

完整脚本:

@echo off
setlocal EnableDelayedExpansion:: 检查参数
if "%~1"=="" (echo Error: folder_name parameter is missinggoto :usage
)
if "%~2"=="" (echo Error: deploy_log_path parameter is missinggoto :usage
)
if "%~3"=="" (echo Error: base_source_path parameter is missinggoto :usage
)
if "%~4"=="" (echo Error: base_target_path parameter is missinggoto :usage
)
if "%~5"=="" (echo Error: jar_name parameter is missinggoto :usage
):: 检查并创建日志文件目录
for %%I in ("%~2") do set "LOG_DIR=%%~dpI"
if not exist "!LOG_DIR!" (echo Creating log directory: !LOG_DIR!md "!LOG_DIR!" 2>nulif errorlevel 1 (echo Error: Failed to create log directorygoto :usage)
):: 设置日志文件和基础变量
set "FOLDER_NAME=%~1"
set "DEPLOY_LOG=%~2"
set "SOURCE_PATH=%~3\%FOLDER_NAME%"
set "TARGET_PATH=%~4\%FOLDER_NAME%"
set "JAR_NAME=%~5":: 记录部署开始
echo %date% %time% - Starting Jenkins deployment > %DEPLOY_LOG%
echo Configuration: >> %DEPLOY_LOG%
echo SOURCE_PATH=%SOURCE_PATH% >> %DEPLOY_LOG%
echo TARGET_PATH=%TARGET_PATH% >> %DEPLOY_LOG%
echo JAR_NAME=%JAR_NAME% >> %DEPLOY_LOG%:: 停止现有进程
echo %date% %time% - Attempting to stop existing process... >> %DEPLOY_LOG%
taskkill /F /IM java.exe /T >> %DEPLOY_LOG% 2>&1 || echo No Java processes found >> %DEPLOY_LOG%
echo %date% %time% - Process stop attempt completed >> %DEPLOY_LOG%:: 等待进程完全停止
echo %date% %time% - Waiting for processes to stop... >> %DEPLOY_LOG%
ping -n 11 127.0.0.1 > nul
echo %date% %time% - Wait completed >> %DEPLOY_LOG%:: 清理目标目录 - 即使失败也继续
echo Cleaning target directory... >> %DEPLOY_LOG%
if exist "%TARGET_PATH%" (rd /s /q "%TARGET_PATH%" >> %DEPLOY_LOG% 2>&1
):: 创建必要目录
md "%~4" 2>nul
md "%TARGET_PATH%" 2>nul:: 复制文件
echo Moving files... >> %DEPLOY_LOG%
robocopy "%SOURCE_PATH%" "%TARGET_PATH%" /E /MOVE /R:1 /W:1 >> %DEPLOY_LOG% 2>&1:: 创建启动脚本
echo Creating start script... >> %DEPLOY_LOG%
(echo @echo offecho cd /d "%TARGET_PATH%"echo java -jar "%JAR_NAME%" ^> "%TARGET_PATH%\app.log" 2^>^&1
) > "%TARGET_PATH%\start.bat":: 验证部署
if exist "%TARGET_PATH%\%JAR_NAME%" (:: 启动应用cd /d "%TARGET_PATH%"call start.batecho Application started successfully >> %DEPLOY_LOG%
) else (echo WARNING: JAR file not found after deployment >> %DEPLOY_LOG%
)echo Deployment completed at %date% %time% >> %DEPLOY_LOG%endlocal
exit /b 0:usage
echo Usage: deploy.bat [folder_name] [deploy_log_path] [base_source_path] [base_target_path] [jar_name]
echo Example: %%FOLDER_NAME%% %%DEPLOY_LOG_PATH%% %%BASE_SOURCE_PATH%% %%BASE_TARGET_PATH%% %%JAR_NAME%%
exit /b 1

五. 运行 jobs

在这里插入图片描述


相关文章:

[笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server

随着软件开发节奏的加快,持续集成(CI)和持续部署(CD)已经成为确保软件质量和加速产品发布的不可或缺的部分。Jenkins作为一款广泛使用的开源自动化服务器,为开发者提供了一个强大的平台来实施这些实践。然而…...

腾讯云AI代码助手编程挑战赛-如意

作品简介 《如意》是一款结合腾讯云AI代码助手生成的、集智能问答、知识学习和生活助手功能于一体的应用,在通过先进的AI技术提升用户的工作效率、学习效果和生活质量。无论是解答疑难问题、提供专业建议,还是帮助规划日程、提升技能,它都能…...

TAS测评倍智题库 | 益丰大药房2025年中高层测评BA商业推理测评真题考什么?

您好!您已被邀请参加360评估。您的评估与反馈将有助于被评估人更深入地了解个人情况,发现个人优势和潜在风险。请您秉持公正、开放的心态进行评估。请尽快完成评估,在此衷心感谢您的配合与支持! ​ 相关事宜: 请您在…...

2025 First LOOK! CnosDB 新版本 2.4.3.1 发布

🔹 版本号:2.4.3.1 🔹 发布日期:2024年11月05日 功能优化 简化编解码器错误定义 #2368 删除不必要的const DEFAULT_* #2378 添加 wal 压缩检查 #2377 移除 page reader #2380 创建配额 #2367 减少内存复制和计算 #2384 构…...

PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获

目录 一、数据库操作应用场景 二、安装PyMysql 三、事务的概念 四、数据库的准备 五、PyMysql连接数据库 1、建立连接方法 2、入门案例 六、PyMysql操作数据库 1、数据库查询 1️⃣查询操作流程 2️⃣cursor游标 ​3️⃣查询常用方法 4️⃣案例 5️⃣异常捕获 …...

Android14上使用libgpiod[gpioinfo gpioget gpioset ...]

环境 $ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.5 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.5 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="…...

网络安全 信息收集入门

1.信息收集定义 信息收集是指收集有关目标应用程序和系统的相关信息。这些信息可以帮助攻击者了解目标系统的架构、技术实现细节、运行环境、网络拓扑结构、安全措施等方面的信息,以便我们在后续的渗透过程更好的进行。 2.收集方式-主动和被动收集 ①收集方式不同…...

修改sshd默认配置,提升安全

对于Linux服务器,特别是暴露在公网的服务器,会经常被人扫描、探测和攻击。包括通过ssh访问登录攻击。对此,对默认的sshd配置进行调整,提升安全。 下面以CentOS 7.9为例说明: 一、常见安全措施 以root用户编辑vim /e…...

Clojure语言的面向对象编程

Clojure语言的面向对象编程 引言 Clojure是一种现代的Lisp方言,它特别强调函数式编程,Immutable数据结构和强大的并发能力。然而,很多人可能会问:Clojure支持面向对象编程吗?虽然Clojure没有像Java或C那样的传统类和…...

spring boot启动源码分析(三)之Environment准备

上一篇《spring-boot启动源码分析(二)之SpringApplicationRunListener》 环境介绍: spring boot版本:2.7.18 主要starter:spring-boot-starter-web 本篇开始讲启动过程中Environment环境准备,Environment是管理所有…...

MySQL复习

基础篇 InnoDB、MyISAM 和 MEMORY 存储引擎的区别? 主要区别: 为什么MySQL选择 InnoDB 作为默认存储引擎? 1.innodb支持事务,myisam、memory不支持。 2.innodb支持行级锁,可以使多个事务同时访问不同的行&#xf…...

ASP.NET Core 实现微服务 -- Polly 服务降级熔断

在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理&#xff1…...

服务器漏洞修复解决方案

漏洞1、远程桌面授权服务启用检测【原理扫描】 Windows Remote Desktop Licensing Service is running: Get Server version: 0x60000604 1、解决方案:建议禁用相关服务避免目标被利用 方法一:使用服务管理器 打开“运行”对话框(WinR&am…...

“AI智慧组卷系统:让考试变得更简单、更公平!

大家好,我是一名资深的产品经理,今天咱们就来聊聊教育领域的一款黑科技产品——AI智慧组卷系统。在这个信息技术飞速发展的时代,AI技术已经渗透到了我们生活的方方面面,教育行业也不例外。下面我就用大白话给大家介绍一下这个AI智…...

MT6706BL 同步整流 规格书

MT6706BL 是用于反激式变换器的高性能 65V 同步整流器。MT6706BL兼容各种反激转换器类型。MT6706BL 支持 DCM、CCM 和准谐振模式。MT6706BL 集 成 了 一 个 65V 功 率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。V SW <V TH-ON 时&#xff0c;MT6706BL 内…...

vue el-table 数据变化后,高度渲染问题

场景&#xff1a;el-table设置了height属性&#xff0c;但是切换查询条件后再次点击查询重新获取data时&#xff0c;el-table渲染的高度会有问题&#xff0c;滚动区域变矮了。 解决办法&#xff1a;使用doLayout方法‌&#xff0c;在表格数据渲染后调用doLayout方法可以重新布局…...

前端多语言

前端多语言目前常用i18n实现 一、react 1.安装依赖 npm install react-i18next i18next --save2.创建配置文件 src/i18n config.ts&#xff1a;对 i18n 进行初始化操作及插件配置 en.json&#xff1a;英文语言配置文件 zh.json&#xff1a;中文语言配置文件 config.ts im…...

人工智能-机器学习之多元线性回归(项目实践一)

目标&#xff1a;运用scikit-learn进行多元线性回归方程的构建&#xff0c;通过实际案例的训练集和测试集进行预测&#xff0c;最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn&#xff1a;pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…...

后台定时查杀进程策略

2019年做的一个500元价位内手机后台定时查杀的功能策略&#xff0c;现在2025年了回过头看&#xff0c;确实已经不适用了。现在进程管控大部分是不杀进程的方式了&#xff0c;类似冻结(类似苹果的墓碑机制)&#xff0c;而杀进程策略主要是场景式异常查杀了&#xff0c;例如明显性…...

Objective-C语言的学习路线

Objective-C语言的学习路线 在程序开发的历史长河中&#xff0c;Objective-C作为一种继承自C语言与Smalltalk的编程语言&#xff0c;扮演着重要的角色。虽然随着Swift语言的出现&#xff0c;Objective-C的使用有所减少&#xff0c;但它依然是iOS和macOS应用开发的重要基础&…...

Blender USDZ插件架构重构:实现99.9%AR模型兼容性与300%导出性能提升

Blender USDZ插件架构重构&#xff1a;实现99.9%AR模型兼容性与300%导出性能提升 【免费下载链接】BlenderUSDZ Simple USDZ file exporter plugin for Blender3D 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderUSDZ 在AR内容创作领域&#xff0c;技术团队常面临…...

24小时运行不中断:OpenClaw+Qwen3-32B监控网站变更并邮件报警

24小时运行不中断&#xff1a;OpenClawQwen3-32B监控网站变更并邮件报警 1. 为什么需要自动化网站监控&#xff1f; 去年我负责一个竞品分析项目时&#xff0c;每天要手动检查十几个竞争对手官网的更新情况。某天凌晨两点&#xff0c;竞品突然上线了关键功能更新&#xff0c;…...

Lisk SDK安全最佳实践:保护区块链应用免受攻击的10个技巧

Lisk SDK安全最佳实践&#xff1a;保护区块链应用免受攻击的10个技巧 【免费下载链接】lisk-sdk &#x1f529; Lisk software development kit 项目地址: https://gitcode.com/gh_mirrors/li/lisk-sdk Lisk SDK是一款强大的区块链应用开发工具包&#xff0c;专为构建安…...

提示词工程精要:从角色设定到边界约束的完整设计框架

设计提示词&#xff08;Prompt&#xff09;是决定大语言模型回答质量的关键环节。好的提示词能让模型准确理解意图、输出符合预期的内容&#xff1b;糟糕的提示词则可能导致答非所问、格式混乱甚至“幻觉”。结合本研究的实践经验以及当前提示工程的主流方法&#xff0c;设计提…...

MiniCPM-V-2_6效果展示:多图推理、视频理解、强大OCR,免费本地运行真香

MiniCPM-V-2_6效果展示&#xff1a;多图推理、视频理解、强大OCR&#xff0c;免费本地运行真香 1. 惊艳开场&#xff1a;8B小身材&#xff0c;多模态大能量 当我第一次在自己的笔记本上运行MiniCPM-V-2_6时&#xff0c;完全被这个仅有8B参数的"小模型"震撼到了。它…...

从需求到代码:基于快马平台快速构建javaweb在线考试系统实战

今天想和大家分享一个实战项目——基于SpringBootVue的在线考试系统。这个系统从需求分析到代码实现&#xff0c;我全程使用了InsCode(快马)平台来加速开发流程&#xff0c;效果出乎意料的好。 系统架构设计 采用前后端分离架构&#xff0c;后端使用SpringBootSpringSecurity&a…...

SNIPER深度解析:为什么它能在COCO数据集上实现47.8mAP的惊人效果

SNIPER深度解析&#xff1a;为什么它能在COCO数据集上实现47.8mAP的惊人效果 【免费下载链接】SNIPER SNIPER / AutoFocus is an efficient multi-scale object detection training / inference algorithm 项目地址: https://gitcode.com/gh_mirrors/sn/SNIPER SNIPER&a…...

如何快速集成JCameraView:5分钟实现微信级拍照功能

如何快速集成JCameraView&#xff1a;5分钟实现微信级拍照功能 【免费下载链接】CameraView 仿微信拍照Android控件&#xff08;轻触拍照&#xff0c;长按摄像&#xff09; 项目地址: https://gitcode.com/gh_mirrors/cam/CameraView JCameraView是一款仿微信拍照的Andr…...

【海洋空间信息工程概论 实验报告4】空间数据投影变换

上一篇&#xff1a;【海洋空间信息工程概论 实验报告3】海洋数据矢量化 目录 一、实验目的 二、实验环境 三、实验内容 实验步骤 ​编辑 实验心得 一、实验目的 由于数据源的多样性&#xff0c;当数据与我们研究、分析问题的空间参考系统&#xff08;坐标系统、投影方式…...

Asian Beauty Z-Image Turbo 硬件需求详解:从消费级到专业级GPU配置

Asian Beauty Z-Image Turbo 硬件需求详解&#xff1a;从消费级到专业级GPU配置 1. 引言 最近有不少朋友在尝试跑一些新的图像生成模型时&#xff0c;遇到了一个挺实际的问题&#xff1a;我的显卡到底行不行&#xff1f;特别是像 Asian Beauty Z-Image Turbo 这类对画质和速度…...