Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Artifactory使用资源发布Android库 问题:_Android_Maven_Gradle_Android Library_Artifactory - Fatal编程技术网

Artifactory使用资源发布Android库 问题:

Artifactory使用资源发布Android库 问题:,android,maven,gradle,android-library,artifactory,Android,Maven,Gradle,Android Library,Artifactory,我正在尝试创建一个Android库,它可以包含在应用程序中,使用: // Application's build.gradle compile 'com.mycompany:mylibrary:1.0.0' 在我的例子中,我使用的是人工制品,我已经将上述方法很好地应用到工作中。问题是,当我尝试运行应用程序时,我发现缺少资源。问题似乎是我的库中的代码依赖于发布到Artifactory的jar中没有包含的资源 // Code in library, throws exception because

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

// Application's build.gradle
compile 'com.mycompany:mylibrary:1.0.0'
在我的例子中,我使用的是人工制品,我已经将上述方法很好地应用到工作中。问题是,当我尝试运行应用程序时,我发现缺少资源。问题似乎是我的库中的代码依赖于发布到Artifactory的jar中没有包含的资源

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

我能够解决我的问题。我找到了我的解决方案,并且

我原来的
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
        }
    }
}

你能不能也发布一下你的项目的文件系统布局?特别是哪些文件夹在“src”下,以及丢失的资源文件在哪里。@Jolta,谢谢您的评论。事实证明,在创建Android依赖项库时,我需要生成一个.aar。.aar文件包含所需的所有内容。我已经在下面发布了更新的build.gradle文件。
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
        }
    }
}