【问题标题】:Gradle maven-publish plugin produces pom with no dependenciesGradle maven-publish 插件生成没有依赖关系的 pom
【发布时间】:2016-06-20 22:54:39
【问题描述】:

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

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

我的SharedCode模块中的build.gradle文件如下:

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")
        }
    }
}

我的Android模块中的build.gradle文件如下:

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"
        }
    }
}

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>

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>

注意 pom 文件中没有依赖项。

【问题讨论】:

    标签: android gradle android-gradle-plugin maven-publish


    【解决方案1】:

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

    android 项目不被识别为标准的 java 项目,这使得它有点棘手。您可以使用pom.withXml {} 创建自己的依赖项部分,然后遍历您的依赖项列表。或者,this gradle plugin 可以为您服务。

    【讨论】:

    • 太棒了!在SharedCode 模块中将artifact... 行替换为from components.java 可以解决SharedCode 模块的问题。现在只需要为Android 模块找到解决方案。将跟随您的线索,看看是否会导致解决方案。会尽快回复您。
    • 我遇到了完全相同的问题,并在这篇博文中描述了一个解决方案:jeroenmols.com/blog/2015/08/13/artifactory2(请参阅依赖项部分)
    • 通过将pom.withXml {} 添加到我的build.gradle 来解决Android 依赖问题。这个答案很有帮助:stackoverflow.com/a/24764713/1071320
    • 或者试试这个plugin并使用components.android
    • 感谢链接 bvarga。该插件是否负责在生成的 pom 文件中添加依赖排除项?
    猜你喜欢
    • 2013-06-21
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2021-09-28
    • 2023-04-07
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多