简单的maven仓库

背景

1、为什么要创建一个自己的maven仓库?
加快组件下载速度。因网络原因,启动gradle项目从jcenter、maven或google仓库下载组件时,速度会特别慢,整个项目同步过程会特别耗时。将相关的组件上传到自己的maven仓库,再从自己的仓库中拉取,速度会快很多。所以,创建一个自己的maven仓库很有必要。
2、如何创建自己的maven仓库?
一般建一个maven仓库直接使用nexus即可。nexus是maven仓库服务,在自己的服务器上启动nexus即将自己的服务器变成maven仓库。

简单的maven仓库

简单的maven仓库不使用nexus,直接使用nginx做maven服务。为什么nginx可以做maven服务器呢?我们可以看是组件依赖到组件获取的过程即可知晓。

在项目中引用了okhttp3的3.8.0版本组件,maven仓库为https://repo1.maven.org/maven2/,如下

allprojects {
    repositories {
        mavenCentral()
	}
}

dependencies {
	implementation 'com.squreup.okhttp3:okhttp:3.8.0'
}

gradle同时即会从https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/3.8.0/okhttp-3.8.0.jar下载组件,可以看出gradle下载依赖时,根据组件信息组装成对应的下载地址,从maven服务器下载对应的组件。
所以,将组件以这种规则存放到nginx服务器对应的目录,即可将nginx当作maven仓库服务器。

本地gradle缓存生成maven仓库目录

#!/bin/bash

# 对指定目录下的文件排序,只选择最大的一个数据
# srcpath="/home/client/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/"
# files=$(ls $srcpath | sort -n | head -1)
# echo "$files"

# 获取最新版本
function getNewestVersion(){
	path=$1
	# echo "path:$path"
	file=$(ls $path | sort -n | head -1)
	echo "$file"
	# return file
}

# 获取指定版本目录下的-sources.jar文件
function getSourceJar(){
	path=$1
	module=$2
	version=$3

	# echo "hello,world"
	# echo "path:$path"
	# echo "module:$module"
	# echo "version:$version"

	for file in $path/*
	do
		sourceFile="$file/$module-$version-sources.jar"
		# echo "$sourceFile"
		if [ -f "$sourceFile" ]
		then
			echo "$sourceFile"
		fi
	done
}

# 将~/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.8.0目录下的文件复制到
# 目标目录下的com/squareup/okhttp3/3.8.0/目录下
function copyArtifacts(){
	# echo "copy artifacts: $1"
	path=$1
	dest=$2

	version=${path##*/}
	parent=${path%/*}
	artifact=${parent##*/}
	parent=${parent%/*}
	group=${parent##*/}

	echo "$artifact:$version"

	# echo "version:$version"
	# echo "parent:$parent"
	# echo "artifact:$artifact"
	# echo "gropu:$group"

	dir=(${group//.//})
	# echo "dir:$dir"
	dir="$dest/$dir/$artifact/$version"
	# echo "full dir:$dir"
	mkdir -p $dir

	for file in $path/*
	do
		cp $file/* $dir
	done
}

# version=$(getNewestVersion /home/client/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/)
# echo "version:$version"
# version="3.8.0"
# getSourceJar /home/client/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.8.0 okhttp $version

function enumGroups(){
	dest=$1
	for file in ~/.gradle/caches/modules-2/files-2.1/*
	do
		if test -f $file
		then
			echo "file:$file"
		else 
			# echo "dir:$file"
			group=${file##*/}
			echo "------------------$group------------------"
			enumModules $file $dest
		fi
	done	
}

function enumModules(){

	path=$1
	dest=$2
	for file in $path/*
	do		
		# echo $file
		module=${file##*/}
		version=$(getNewestVersion $file)
		# echo "$module"
		# echo "version:$version"
		# version="3.8.0"
		# getSourceJar $file okhttp $version
		copyArtifacts $file/$version $dest
	done
}

enumGroups ~/Desktop/repo

# enumModules ~/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3 ~/Desktop/repo
# copyArtifacts ~/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.8.0 ~/Desktop/repo

组件上传

参考:
1、shell路径分割:https://blog.csdn.net/whatday/article/details/106076384
2、shell字符串替换:https://blog.csdn.net/u010003835/article/details/80750003

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值