Jfrog 搭建本地maven仓库以及上传Android库
Jfrog 下载
安装包下载地址:Download Artifactory OSS | JFrog

如果是想下载之前的版本,可以点击上面的Get code source ,如果是最新版本,直接点下面的下载就好。下面以Linux安装为例。
Jfrog安装
对于Linux而言,其实是不需要安装的,直接解压出来后就可以运行,我这里下载的是:
jfrog-artifactory-oss-7.49.8-linux.tar.gz
通过命令解压:
tar -zxvf jfrog-artifactory-oss-7.49.8-linux.tar.gz
解压出来后进入到:
cd artifactory-oss-7.49.8/app/bin
该目录下运行命令:
./artifactoryctl start
服务起来后,就可以在浏览器中访问了,服务对外访问的端口默认是8082:
http://localhost:8082
打开后需要输入用户名和密码,默认的用户名:admin 默认密码:password
踩过的坑
1、网上看到有说需要需要安装java 1.8以上,其实不用,Jfrog中有java环境

如果想自己配置java,那就可以修改这个javaHome的值。
2、./artifactoryctl start 之后,控制台输出的日志显示启动成功了,输入./artifactoryctl status查看状态,服务也都起来了,但浏览器中 http://localhost:8081 一直显示加载中的动画,这是因为有些服务有一些超时机制,刚开始是启动成功了,但过一段时间通过 ./artifactoryctl status 查看,可能有些服务已经挂了,这时候就需要去看日志了。停止服务指令 ./artifactoryctl stop。
3、查看日志,cd jfrog/artifactory-oss-7.49.8/var/log目录下,这个目录下有比较多的日志文件,但有些是空的,可以通过ls -l 来看下哪些是有日志的,我所遇到的基本都是端口访问不了,为什么会访问不了呢?可能是端口被其他程序占用了。我自己电脑通过VMware安装的linux,没遇到这个问题,但是用已经安装了许多服务的服务器就出现了,这个时候就需要我们去配置端口了。
4、修改端口, cd artifactory-oss-7.49.8/var/etc目录下,有个system.yaml文件(第一次输入了./artifactoryctl start 才会有),这个文件的配置可以参考system.yaml,这里先贴一下我的配置

这里有一个奇怪的问题,一开始报8046端口访问被拒了(8046端口被其他程序占用了),我修改成18046还是报访问被拒,换成其他的也一样,弄了好久,后面修改了18081和18082,启动成功了,这样修改后,浏览器中访问的端口就变成18082了。
创建本地仓库
登陆到web服务台后,就可以创建相关的仓库了。

仓库分为,本地Local型,远程Remote型,以及虚拟型。
- 本地私有仓库:用于内部使用,上传的组件不会向外部进行同步。
- 远程仓库:用于代理及缓存公共仓库,不能向此类型的仓库上传私有组件。
- 虚拟仓库:不是真实在存储上的仓库,它用于组织本地仓库和远程仓库。

这里先创建本地仓库(Local),点击右边的Add Repositories,选择Local Repository,然后在package type中选择maven,之后再只需要填入Repository Key(上传下载库的时候会用到,这里就以libs-snapshot为例)就完成了。
Android上传库
在Android工程的根目录下新建artifactory.gradle文件,配置如下:
project('模块名称') {publishing {publications {aar(MavenPublication) {groupId = "com.squareup.okhttp3"artifactId = "okhttp"version = "3.12.0"artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")pom.withXml {def dependencies = asNode().appendNode("dependencies")configurations.implementation.allDependencies.each {def dependency = dependencies.appendNode("dependency")println("groupId == ${it.group}, artifactId == ${it.name}, version == ${it.version}")dependency.appendNode("groupId", it.group)dependency.appendNode("artifactId", it.name)dependency.appendNode("version", it.version)}}}}}artifactoryPublish {dependsOn("assembleRelease")publications('aar')}
}artifactory {contextUrl = "http://10.10.10.20:18082/artifactory"publish {repository {repoKey = 'libs-snapshot' //这里就是创建本地库时输入的Repository Keyusername = "admin"password = "password"}defaults {publishArtifacts = trueproperties = ['qa.level': 'basic', 'dev.team': 'core']publishPom = true}}
}
然后在根目录的build.gradle中配置:
buildscript {ext.gradle_version = '7.1.1'repositories {google()mavenCentral()}dependencies {classpath "com.android.tools.build:gradle:$gradle_version"classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.31.0"}
}allprojects {apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'repositories {google()mavenCentral()}
}
apply from: "./artifactory.gradle"
这就配置完了,接着就是上传了:

点击这里的artifactoryPublish就会上传,上传后就可以在Jfrog的web上查看了:

这样就上传完成了,
踩坑点 :
最开始是参考Jfrog的Git仓库配置gradle-android-example,按这个配置完成后,上传的时候没有报错,但是Jfrog的web页面就是找不到。唯一的不同点就是gradle插件的版本了,我工程配置的是7.1.1的,难不成要改gradle版本,尝试了下,确实可以,但这也太那个啥了。还有没有其他方法呢,那就只能修改Jfrog的插件版本了,Jfrog的插件org.jfrog.buildinfo,但是对应关系不知道,一开始是用的最新的Jfrog插件,但编译就报错了,后面就改成4.31.0的版本就OK了。
Android引用

这样配置好maven仓库后就可以直接引用了。
接下来在进一步讨论下,如果在Jfrog上配置了多个仓库,比如还有个libs-release,那这里就还需要再配置http://10.10.10.20:18082/artifactory/libs-release/,这样就可能会配置很多个了,那可不可以只配置一个呢?那就需要配置虚拟仓库(Virtual)了,和新建本地库一样,只不过虚拟库需要多配置一步:

如上图所示,那就是将需要加入到虚拟仓库的本地仓库移入右边,在点击Create Virtual Repository就创建完了虚拟仓库 ,之后将虚拟库的url替换上面的就OK了,那可不可以再进一步,将google()和mavenCentral()也配置到本地虚拟仓库呢?那肯定也是肯定的,不要忘了我们还有一个远程仓库(Remote)还没用到,那远程仓库要怎么配置google()和mavenCentral() 呢?这里首先需要获取到google()和mavenCentral()的地址,这里可以查看阿里的仓库服务,然后就是新建远程仓库了,和新建本地仓库一样,就是多了一项配置仓库url地址,创建完远程仓库后,将新建的远程仓库也加入到虚拟仓库,这样直接使用一个虚拟仓库就OK啦。到这,整个配置也就完成了。
相关文章:
Jfrog 搭建本地maven仓库以及上传Android库
Jfrog 下载 安装包下载地址:Download Artifactory OSS | JFrog 如果是想下载之前的版本,可以点击上面的Get code source ,如果是最新版本,直接点下面的下载就好。下面以Linux安装为例。 Jfrog安装 对于Linux而言,其实…...
日报周报月报工作总结生成器【智能文案生成器】
日报周报月报工作总结生成器【智能文案生成器】 天天写日报,我真的快奔溃了! 摸了一天鱼,下班还要写日报; 划了一周的水,周末还要写周报; 啊啊啊啊… 在职场上,尤其是互联网公司里,…...
linux日志管理工具logrotate配置
linux日志管理工具logrotate配置logrotate介绍logrotate配置讲解主配置文件解释(/etc/logrotate.conf)logrotete 命令参数添加配置以添加一个nginx配置为例强制启动配置logrotate介绍 logrotate是centos自带工具,其他操作系统可能需要自行安装。logrotate用来进行日…...
[ C++ ] 设计模式——单例模式
目录 1.设计模式: 2.单例模式 饿汉模式 懒汉模式 饿汉模式和懒汉模式的优缺点 1.设计模式: 设计模式(Design Pattern)是一套被反复使用,多数人只晓得,经过分类的,代码设计经验的总结。为什么会产生设计模式这样的…...
HACKTHEBOX——Help
nmap可以看到对外开放了22,80,3000端口可以看到80端口和3000端口都运行着http服务,先从web着手切入TCP/80访问web提示无法连接help.htb,在/etc/hosts中写入IP与域名的映射打开只是一个apache default页面,没什么好看的使用gobuster扫描网站目…...
Qt广告机客户端(下位机)
目录功能结构adClient.promain.cppadclient.h 客户端adclient.cpp 客户端addate.h 时间处理addate.cpp 时间处理adsocket.h 客户端Socket处理adsocket.cpp 客户端Socket处理weather.h 天气信息处理weather.cpp 天气信息处理rollmassege.h 滚动信息处理rollmassege.cpp 滚动信息…...
JavaScript新手学习手册-基础代码(二)
与上篇博客相接 一:函数: 案例:通过函数实现绝对值的输出 方法一: function absoluate(x){if(x>0){return x;}else{ return -x;}} 在控制台调用函数 方法二: var demo1 function(x){if(x>0){return x;}els…...
wireshark 抓包使用记录
文章目录前言wireshark 抓包使用记录一、wireshark的基础使用二、wireshark的常用功能1、开始混杂模式2、过滤器操作2.1、抓包过滤器2.2、显示过滤器3、时间格式显示4、统计流量图5、标记显示6、导出数据包7、增加、隐藏、删除显示列前言 如果您觉得有用的话,记得给…...
pd dataframe 读取处理 有合并单元格的excel方式
from pathlib import Path import openpyxl 拆分所有的合并单元格,并赋予合并之前的值。 由于openpyxl并没有提供拆分并填充的方法,所以使用该方法进行完成 def unmerge_and_fill_cells(worksheet): all_merged_cell_ranges list( worksheet.merged_…...
七,iperf3源代码分析:状态机及状态转换过程--->运行正向TCP单向测试时的服务端代码
本文目录一、测试用命令二、iperf3状态机中各个状态解析三、iperf3状态机迁移分析K-初始化测试对象(NA--->初始化状态):A-服务器端测试对象开始运行(初始化状态--->IPERF_START状态):B-建立控制连接(初始化状态-…...
【网络篇】----- 传输层协议 之 UDP(协议格式,协议特性和编程影响三方面详细分析)
文章目录 前言1、UDP协议2、协议格式 2.1、协议格式模型2.2、字段分析3.协议特性4.编程影响总结前言 1、UDP协议 UDP协议,又名数据报传输协议,是传输层协议之一!!! 在TCP/IP五层模型中,在传输层中ÿ…...
【基于STM32的多功能台灯控制】
基于STM32的多功能台灯控制 在之前一篇博文中已出过智能台灯相关的介绍,在这里对之前的模块以及功能上进行了优化和功能上的改进,需源码或实物可私【创作不易-拒绝白嫖】 功能说明 1、按键模式多功能台灯在设计上使用了4个按键分别做为 按键1模式的切换…...
Mac 编译x264源码No working C compiler found 错误
在mac上编译x264源码时,报错No working C compiler found 。网上找了一圈方案也无法解决 只能硬着头皮看configure这个脚本,通过一步一步抽丝拨茧终于是在mac上可以编译了。 这里只当记录一下,为后续同学遇到同样问题提供一个辅助解决方案。…...
如何有效地降低软件开发风险?
1、科学分析风险 高风险自动预警 一般对风险进行科学分析,主要从3个维度进行划分:影响的严重性、发生的可能性、产生的影响性。 根据风险对项目的影响程度,从3个维度将其划分5个等级:很低、比较低、中等、比较高、很高。这样我们能…...
【python】剑指offer代码大集合2
本文是【python】剑指offer代码大集合的姊妹篇,用于完善标识todo的代码! 刷题网站:https://leetcode.cn/problem-list/xb9nqhhg/ 剑指 Offer 14- I. 剪绳子 https://leetcode.cn/problems/jian-sheng-zi-lcof/ todo 剑指 Offer 14- II. 剪绳子 II https://leetcode.cn/pr…...
经纬恒润再传佳讯,斩获大奖
阳春二月,经纬恒润屡传佳讯,凭借产品、研发等多方面的出色表现,再次斩获东风柳汽“优秀供应商”和广汽传祺“科技创新奖”,以实力印证良好口碑,不忘初心,载誉而行! 东风柳汽:优秀供…...
说说转义字符 “\”
转义字符-escape character character 表示字符,包含两层含义, 1.字母 2.符号 转义: 改变含义 字符: 字母、符号 转义字符: 把 字母、符号 的含义改变了注意:这里有 2 个常常被忽视、忽略、轻视的转义规则&…...
2023高质量设计竞赛汇总,想证明自己实力的快来
对于设计师来说,参加设计比赛不仅能够提升自己的设计能力,也是一条证明实力最好的捷径。小编也收集整理了不少近期设计大赛,分别标注了截止日期和官网等,宝子们记得码住收藏,赶紧SHOW起来!优酷X站酷 一千零…...
MongoDB与MySQL有区别吗?用一个表格跟你说明
MongoDB MySQL 数据库模型 非关系型 关系型 存储方式 虚拟内存持久化 不同引擎有不同存储方式 查询语句 独特MongoDB查询方式 传统SQL语句 架构特点 可通过副本集和分片实现高可用 常见有单点、M-S、MHA、MMM、Cluster等架构方式 数据处理方式 基于内存…...
ElasticSearch - 分布式文档索引、搜索、更新和删除文档的过程
文章目录1. 分布式文档存储1. 路由一个文档到一个分片中2. 主分片和副本分片如何交互3. 新建、索引和删除文档4. 取回一个文档5. 局部更新文档2. ElasticSearch相关问题1. 路由计算方式?2. 分片控制3. 分布式文档写入(索引)的过程?4. 分布式文档搜索的过…...
7个HTTP API分离关注点设计技巧:从理论到实战指南
7个HTTP API分离关注点设计技巧:从理论到实战指南 【免费下载链接】http-api-design HTTP API design guide extracted from work on the Heroku Platform API 项目地址: https://gitcode.com/gh_mirrors/ht/http-api-design 在API开发中,分离关注…...
晶体功率测试原理与MAX9485音频时钟应用实践
1. 晶体功率测试的背景与意义在音频时钟系统设计中,晶体振荡器的功率控制是个容易被忽视却至关重要的参数。以我们常用的MAX9485音频时钟发生器为例,其核心的VCXO(压控晶体振荡器)模块直接决定了整个系统的时钟精度。记得2013年参…...
Laravel RSS聚合器larafeed:现代化内容聚合后端解决方案
1. 项目概述:一个为Laravel打造的现代化RSS聚合器如果你正在用Laravel构建一个内容聚合平台、新闻阅读器,或者只是想为自己的个人博客添加一个“我最近在读什么”的订阅墙,那么你很可能需要处理RSS或Atom源。手动解析这些XML格式的源、处理缓…...
C++ 时间戳实战:从GetTickCount64到std::chrono的跨平台精度选择
1. 为什么我们需要精确的时间戳? 在开发高性能应用时,时间戳的精度往往决定了程序的可靠性。想象一下,你在开发一个在线游戏服务器,玩家A声称自己先击中了玩家B,但服务器记录的两次命中时间差只有几毫秒。如果使用秒级…...
如何免费获取全球50+图书馆古籍资源:BookGet数字古籍下载完整指南
如何免费获取全球50图书馆古籍资源:BookGet数字古籍下载完整指南 【免费下载链接】bookget bookget 数字古籍图书下载工具。 项目地址: https://gitcode.com/gh_mirrors/bo/bookget 还在为寻找古籍文献而烦恼吗?想要从哈佛、国会图书馆等全球知名…...
从寄存器到库函数:手把手拆解STM32的RCC时钟树(以F103C8T6为例)
从寄存器到库函数:手把手拆解STM32的RCC时钟树(以F103C8T6为例) 在嵌入式开发领域,STM32系列微控制器因其出色的性能和丰富的外设资源而广受欢迎。然而,对于许多开发者来说,STM32的时钟系统(RCC…...
从find到ind2sub:Matlab数据筛选后操作的完整工作流(以R2023b为例)
从find到ind2sub:Matlab数据筛选后操作的完整工作流(以R2023b为例) 在数据分析与科学计算领域,Matlab作为一款强大的工具,其矩阵操作能力尤为突出。面对大型矩阵或高维数组时,如何高效地定位并处理特定条件…...
BlueArchive-Cursors:开源鼠标主题的技术实现与扩展应用指南
BlueArchive-Cursors:开源鼠标主题的技术实现与扩展应用指南 【免费下载链接】BlueArchive-Cursors Custom mouse cursor theme based on the school RPG Blue Archive. 项目地址: https://gitcode.com/gh_mirrors/bl/BlueArchive-Cursors BlueArchive-Curso…...
用C语言手搓一个聊天室服务器:从socket到多线程的保姆级踩坑实录
用C语言手搓一个聊天室服务器:从socket到多线程的保姆级踩坑实录 深夜两点,屏幕的蓝光映在脸上,第17次编译失败后,我盯着gcc报出的"segmentation fault"陷入了沉思。这就是用C语言实现网络服务的魅力所在——没有现成的…...
英雄联盟智能助手League Akari:重新定义你的游戏体验边界
英雄联盟智能助手League Akari:重新定义你的游戏体验边界 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟的竞技世界中&…...
