【问题标题】:Artifactory Publish Android Library with ResourcesArtifactory 使用资源发布 Android 库
【发布时间】:2015-08-13 13:26:47
【问题描述】:

问题:

我正在尝试创建一个可以包含在应用程序中的 Android 库:

// Application's build.gradle
compile 'com.mycompany:mylibrary:1.0.0'

就我而言,我正在使用 Artifactory 并且我已经使上述工作正常。问题是当我尝试运行我缺少资源的应用程序时。问题似乎是我的库中的代码依赖于未包含在发布到 Artifactory

的 jar 中的资源
// Code in library, throws exception because <resource> is not included in the jar
getString(R.string.<resource>)

问题:

发布到 Artifactory 时如何将资源包含在 jar 中?目前,它只包括类文件。这是我当前用于发布的 gradle.build:

// Android Library - build.gradle
{
    // ... Other build.gradle settings go here

    //==========================================================
    //  ARTIFACTORY SETTINGS
    //==========================================================

    buildscript {
        repositories {
            maven {
                url "${artifactory_contextUrl}/plugins-release"
                credentials {
                    username = "${artifactory_user}"
                    password = "${artifactory_password}"
                }
            }
        }
        dependencies {
            classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.3"
        }
    }

    apply plugin: "com.jfrog.artifactory"
    apply plugin: 'maven-publish'

    artifactory {
        contextUrl = "${artifactory_contextUrl}"
        publish {
            repository {
                repoKey = 'libs-release-local'
                username = "${artifactory_user}"
                password = "${artifactory_password}"
                maven = true
            }
            defaults {
                publications ('mavenJava')
            }
        }
        resolve {
            repository {
                repoKey = 'libs-release'
                username = "${artifactory_user}"
                password = "${artifactory_password}"
                maven = true
            }
        }
    }

    task sourceJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
    }

    publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId 'com.mycompany'
                artifactId 'mylibrary'
                version '1.0.0'
                artifact(sourceJar)
            }
        }
    }
}

【问题讨论】:

  • 能否请您也发布您项目的文件系统布局?尤其是“src”下的哪些文件夹,以及丢失的资源文件所在的位置。
  • @Jolta,感谢您的评论。事实证明,在创建 Android 依赖库时,我需要生成一个 .aar。 .aar 文件包含所需的一切。我已经在下面发布了我更新的 build.gradle 文件。

标签: android maven gradle android-library artifactory


【解决方案1】:

我能够解决我的问题。我找到了我的解决方案 herehere

我原来的gradle.build 脚本很适合发布jar 文件;但是,在构建用于其他项目的 android 库时,您通常需要 .aar 文件,而不是 .jar 文件。


为了让 Artifactory 发布 .aar 文件,我在下面复制了我的 build.gradle。

注意:您必须使用 com.android.library 插件,否则您最终会得到 .apk 而不是 .aar

apply plugin: 'com.android.library'

android {
    //... Android specific parameters
}

dependencies {
    //... Android specific dependencies
}

//==========================================================
//  ARTIFACTORY SETTINGS
//==========================================================

buildscript {
    repositories {
        maven {
            url "${artifactory_contextUrl}/plugins-release"
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }
    }
    dependencies {
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
        classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:2.2.3'
    }
}

apply plugin: 'artifactory'
apply plugin: 'com.github.dcendents.android-maven'

version = "1.0.0"
group = "com.mycompany"

configurations {
    published
}

task sourceJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
}

artifactoryPublish {
    dependsOn sourceJar
}

artifacts {
    published sourceJar
}

artifactory {
    contextUrl = "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = 'libs-release-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true
        }
        defaults {
            publishConfigs('archives', 'published')
            properties = ['build.status': 'integration']
            publishPom = true
            publishIvy = false
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多