引言
本文是藏文系列,或许以后能用到,毕竟各种jar包。
实践
本文在Ubuntu16.10搭建Artifactory OSS 5.9.1仓库,并进行上传aar,引用aar的操作。
- Artifactory下载安装
访问https://jfrog.com/open-source/#solutions点击Download ZIP下载zip文件。进行解压,并在~/.bashrc配置Artifactory环境变量即可。
export ARTIFACTORY_HOME=/Artifactory路径
- Artifactory运行
运行 %ARTIFACTORY_HOME%\bin目录下的artifactory.sh即可。
./artifactory.sh
- aar上传到Artifactory仓库
上传到Artifactory仓库需要编写gradle上传脚本,首先在aar库所在的module的build.gradle文件添加 apply plugin: 'maven'
、apply plugin: 'com.jfrog.artifactory'
以使用maven上传脚本方法,具体上传脚本如下,代码段中进行了必要注释。
publishing {
publications {
// 表示要生成的文件为aar
aar(MavenPublication) {
// groupid
groupId GROUP_ID
// 版本号
version = VERSION
// artifactid
artifactId ARTIFACT_ID
// 上传包的路径
artifact(AAR_DIR)
pom.withXml {
def dependencies = asNode().appendNode('dependencies')
// 如使用compile添加依赖,则把implementation改为compile
configurations.implementation.allDependencies.each {
// 如果有compile fileTree(),group会为空,需要去除
if (it.group != null) {
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', it.group)
dependency.appendNode('artifactId', it.name)
dependency.appendNode('version', it.version)
}
}
}
}
}
}
artifactory {
// 表示要发布到的地址
contextUrl = ARTIFACTORY_LOCAL_PATH
publish {
repository {
// The Artifactory repository key to publish to
// repoKey表示要发布到哪个仓库下
repoKey = 'example-repo-local'
//账户 这两个是用于访问artfactory的权限认证默认的账号密码为
username = "admin"
password = "admin"
}
defaults {
// Tell the Artifactory Plugin which artifacts should be published to Artifactory.
// 表示要发布的文件类型
publications('aar')
publishArtifacts = true
// Properties to be attached to the published artifacts.
properties = ['qa.level': 'basic', 'dev.team': 'core']
// Publish generated POM files to Artifactory (true by default)
// 表示是否将自动生成的pom.xml文件发布到Artifactory中
publishPom = true
}
}
}
在此过程中,需要注意的有两点:
- repoKey必须设置且要和目标仓库的仓库名一致,不一致则会导致引用aar包时发生下载不到包的情况,并且contextUrl不能包含repoKey。
- 需要上传的aar包需要修改时,要将aar包的版本号进行更新,尽量不要覆盖。在引用aar包时,由于版本号一致,本地仓库的缓存不会更新(只能找到本地仓库的缓存文件并删除才能解决),导致修改不生效的问题。
- 引用Artifactory内部仓库的aar
引用aar包时,需要在project的build.gradle配置artifactory仓库的地址,如下。
allprojects {
repositories {
google()
jcenter()
// artifactory
maven { url 'http://localhost:8081/artifactory/example-repo-local/' }
}
}
随后在相应module的build.gradle文件,添加aar包的引用,如下。
// 格式为groupId:artifactId:version形式
implementation 'ganji:hello_library:1.0.2'
最后,实现引用aar包中的类相应功能。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HelloUtils.greet(getApplicationContext());
}
}