Gradle maven-publish插件生成没有依赖关系的pom

Adi*_*ain 4 android gradle android-gradle-plugin maven-publish

我有一个项目,它有一个SharedCode(Java)模块,其次是一个Android(Android库)模块,它取决于SharedCode模块.我以前一直maven在我的build.gradle文件中使用插件,我一直在使用该uploadArchives插件的任务来发布我的两个模块中的工件.这已经工作并生成了pom文件,这些文件反映了我build.gradle文件中的依赖项.

我以为我会用maven新的maven-publish插件替换旧的插件,但奇怪的是我看到maven-publish插件生成的pom文件不包含依赖项?!这是设计还是这个插件中的错误,或者我可能错误地使用插件?

build.gradleSharedCode模块中的文件如下:

apply plugin: 'java'
apply plugin: 'maven-publish'

group = "${projectGroupId}"
version = "${projectVersionName}"

dependencies {
    compile 'com.google.guava:guava:18.0'
}

publishing {
    publications {
        SharedCode(MavenPublication) {
            groupId "${projectGroupId}"
            artifactId 'SharedCode'
            version "${projectVersionName}"
            artifact("$buildDir/libs/SharedCode-${projectVersionName}.jar")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

build.gradleAndroid模块中的文件如下:

apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

group = "${projectGroupId}"
version = "${projectVersionName}"

android {
    // android stuff here...
}

dependencies {
    compile project(':SharedCode')
}

publishing {
    publications {
        Android(MavenPublication) {
            groupId "${projectGroupId}"
            artifactId 'Android'
            version "${projectVersionName}"
            artifact "$buildDir/outputs/aar/Android-release.aar"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SharedCode模块创建的pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.sdk</groupId>
    <artifactId>SharedCode</artifactId>
    <version>0.0.2</version>

</project>
Run Code Online (Sandbox Code Playgroud)

Android模块创建的pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.sdk</groupId>
    <artifactId>Android</artifactId>
    <version>0.0.2</version>
    <packaging>aar</packaging>

</project>
Run Code Online (Sandbox Code Playgroud)

请注意pom文件中缺少依赖项.

RaG*_*aGe 7

使用from components.java而不是artifact...您的publications部分中的行为Java项目.这应该自动生成pom中的依赖项.

android项目不被认为是标准的java项目,这使得它有点棘手.您可以使用pom.withXml {}然后遍历依赖关系列表来创建自己的依赖关系部分.或者,有这个gradle插件可以为你做这件事.

  • 或者尝试这个[插件](https://github.com/wupdigital/android-maven-publish)并使用components.android (2认同)