支持上传多种maven仓库,配置相关全部自动生成,无需在项目中增加上传配置,支持使用maven、artifactory插件swing界面上传
安装指南
通过jar包在项目根目录直接运行使用
java -jar deploytools.jar
安装插件使用,也可以通过搜索MavenDeploy进行安装
Settings>Plugins>install plugin from disk
使用指南
- 配置发布的账号信息
- 选择模块填写版本号进行发布,或者选择文件进行单独发布
实现方式
通过java文件流操作进行备份修改build.gradle,还原备份,Java Runtime.exec()执行相应的命令
1.主要实现java虚拟机执行命令行,需要区分不同系统命令行的拼接
public ExecuteResult execute(String command) {
try {
log(command);
Process process = null;
String cd = getCD();
if (DeviceTools.isMac()) {
String cmds[] = new String[]{DeviceTools.getCommand(), DeviceTools.getC(), cd + DeviceTools.getPlatformWithGradle() + command};
process = Runtime.getRuntime().exec(cmds);
} else {
String cmd = DeviceTools.getCommand() + " " + DeviceTools.getC() + cd + DeviceTools.getPlatformWithGradle() + command;
process = Runtime.getRuntime().exec(cmd);
}
String msg = readStream(process.getInputStream());
String error = readStream(process.getErrorStream());
int result = process.waitFor();//0 成功
return new ExecuteResult(result, msg, error);
} catch (Exception e) {
e.printStackTrace();
return new ExecuteResult(1, "", e.getMessage());
}
}
2.创建账号信息配置文件,用于下一步的字符替换
//自动生成上传配置
def URL = "%s"
def USER = "%s"
def PASSWORD = "%s"
def GROUPID = "%s"
def ARTIFACTID = "%s"
def VERSION = "%s"
def PACKAGING = "%s"
def REPOKEY = "%s"
3.nexus插件
只需要在发布模块的Library build.gradle追加通用配置文件和发布配置即可
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: URL + REPOKEY) {
authentication(userName: USER, password: PASSWORD)
}
pom.project {
groupId = GROUPID
artifactId = ARTIFACTID
version = VERSION
packaging PACKAGING
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
}
}
}
}
4.artifactory插件
根目录需要增加classpath
buildscript {
repositories {
maven { url 'http://repo.jfrog.org/artifactory/gradle-plugins' }
}
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.1.1"
}
}
发布模块的Library build.gradle追加
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
publishing {
publications {
aar(MavenPublication) {
groupId GROUPID
version = VERSION
artifactId ARTIFACTID
// Tell maven to prepare the generated "*.aar" file for publishing
artifact("${buildDir}/outputs/aar/${project.getName()}-release.aar")
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp ->
if (dp.version != "unspecified") { // 过滤项目内library引用
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version)
// for exclusions
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
}
}
}
}
}
}
}
}
artifactory {//artifactory配置
contextUrl = URL
publish {
repository {
repoKey = REPOKEY
username = USER
password = PASSWORD
maven = true
}
defaults {
publications(PACKAGING)
publishArtifacts = true
properties = ['qa.level': 'basic', 'dev.team': 'core']
publishPom = true
publishIvy = false
}
}
}
5.jcenter插件
根目录需要增加classpath
buildscript {
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.3.1'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
发布模块的Library build.gradle追加
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
group = GROUPID // 一般写唯一的包名
version =VERSION // 版本号
install {
repositories.mavenInstaller {
pom {
project {
packaging PACKAGING
name '' //项目描述
url URL+REPOKEY//siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
}
}
}
}
bintray {
user = USER
key = PASSWORD
configurations = ['archives']
pkg {
version {
name = VERSION
desc = ''//此处是描述
}
repo = 'maven' // bintray上创建的仓库名,我这用的maven
name = ARTIFACTID //发布到JCenter上的项目名字
licenses = ['Apache-2.0']
vcsUrl = ''
publish = true
}
}