使用Gradle和Android Studio将所有模块工件安装到自定义maven存储库

Tac*_*0sS 5 android gradle maven android-studio android-gradle-plugin

我有一个我在Android项目中使用的纯Java库,我正在尝试配置它,所以当我运行'gradle install'时,它将构建整个项目并将所有工件安装到自定义本地存储库,这显然是一个git库.

这是模块gradle文件,项目构建正常:

group 'com.packagenaem'
def artifact = 'artifactname'
version '1.0.0'
apply plugin: 'java'

def MAVEN_LOCAL_PATH = 'file:///some/path/to/my/repo'

uploadArchives {
    repositories {
        apply plugin: 'maven'
        mavenInstaller {
            repository(url: MAVEN_LOCAL_PATH)
            pom.groupId = group
            pom.artifactId = artifact
            pom.version = version
            pom.packaging = 'jar'
        }
    }
}

task sourcesJar(type: Jar, dependsOn:classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn:javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}
Run Code Online (Sandbox Code Playgroud)

从命令行运行时出现的错误是:

Could not find method repository() for arguments [{url=file:///some/path/to/my/repo}] on repository container
Run Code Online (Sandbox Code Playgroud)

如果我省略这一行,repository(url: MAVEN_LOCAL_PATH)那么它会很好地将所有工件安装到/users/$USER/.m2/repository

===更新===

在执行以下操作后稍微玩了一下gradle uploadArchive,我得到了一个点,我得到以下错误:

Failed to deploy artifacts/metadata: No connector available to access repository remote (/some/path/to/my/custom/repo) of type default using the available factories WagonRepositoryConnectorFactory
Run Code Online (Sandbox Code Playgroud)

====扩展这个问题一个比特====

因为我已经为这个问题设置了一个赏金,让我们扩展它并询问我该如何制作它以便我将在我的项目gradle文件中编写上述代码一次,并在"gradle uploadArchives"上它将部署工件所有项目?目前我已经复制了所有构建gradle文件的所有代码,我讨厌这种解决方案......

Tac*_*0sS 5

好吧,所以我浪费了很多时间和脑细胞......

而不是声明:

repository(url: file("/some/path/to/my/custom/repo"))
Run Code Online (Sandbox Code Playgroud)

将其更改为:

repository url: 'file://' + new File("/some/path/to/my/custom/repo").absolutePath
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但现在我尝试的每个配置都有效......

  • 看看[org.gradle.api.internal.file.FileOrUriNotationConverter#convert](https://github.com/gradle/gradle/blob/478a891a864c8749c194d42c52973cb1c8dfa8a7/subprojects/core/src/main/groovy/org/gradle/ api/internal/file/FileOrUriNotationConverter.java#L57) 了解 gradle 实际如何解析字符串。如果你查看[maven插件文档](https://docs.gradle.org/current/userguide/maven_plugin.html#sec:deploying_to_a_maven_repository),如果你刚刚完成`repository(url: 'file://some /path/to/my/custom/repo')` (2认同)