2015-03-03 61 views
4

我正在使用Gradle构建Android库项目并将其作为aar部署到Maven存储库。POM与Gradle缺少Android库依赖关系

图书馆具有一定的相关性,这应包括在POM

随着apply plugin: 'maven'没有POM文件不存在,只是产生一个POM文件中的神器

随着apply plugin: 'maven-publish',但不包括任何依赖关系

任何想法?这只是不支持?

摇篮2.2和Android摇篮插件1.1.0

第一种方法:

configurations { 
    archives { 
     extendsFrom configurations.default 
    } 
} 

afterEvaluate { project -> 
    uploadArchives { 

     configuration = configurations.archives 

     repositories { 
      mavenDeployer { 
       repository(url: "http://nexus-url") { 
        authentication(userName: nexusUsername, password: nexusPassword) 

       pom.groupId = 'com.example' 
       pom.version = '123-SNAPSHOT' 
       pom.artifactId = 'foo' 
       pom.packaging = 'aar' 

       pom.project { 
        artifactId = 'bar' 
        packaging 'aar' 
        description 'baz' 
      } 
     } 
    } 
} 

也试过它没有afterEvaluate

第二条本办法包裹它:

更新

问题的根本原因是该项目使用了口味。如果不使用香精apply plugin: 'maven'

回答

10

这是最终为我工作的解决方案:

publishing { 
    publications { 
     sdk(MavenPublication) { 
      artifactId libName 
      artifact "${project.buildDir}/outputs/aar/${libName}-${project.version}.aar" 

      //The publication doesn't know about our dependencies, so we have to manually add them to the pom 
      pom.withXml { 
       // for dependencies and exclusions 
       def dependenciesNode = asNode().appendNode('dependencies') 
       configurations.compile.allDependencies.withType(ModuleDepend‌​ency) { ModuleDependency dp -> 
        def dependencyNode = dependenciesNode.appendNode('dependency') 
        dependencyNode.appendNode('groupId', dp.group) 
        dependencyNode.appendNode('artifactId', dp.name) 
        dependencyNode.appendNode('version', dp.version) 

        // for exclusions 
        if (dp.excludeRules.size() > 0) { 
         def exclusions = dependencyNode.appendNode('exclusions') 
         dp.excludeRules.each { ExcludeRule ex -> 
          def exclusion = exclusions.appendNode('exclusion') 
          exclusion.appendNode('groupId', ex.group) 
          exclusion.appendNode('artifactId', ex.module) 
         } 
        } 
       } 
      } 
     } 
    } 

    repositories { 
     maven { 
      name 'myrepo' 
      url 'https://maven.foo.com' 

      credentials { 
       username mavenUsername 
       password mavenPassword 
      }  
     } 
    } 
} 
+1

为了避免出现异常,最好将'configurations.compile.allDependencies.each'替换为'configurations.compile.allDependencies.withType(ModuleDependency)'。你使用'compile fileTree(dir:'libs',include:['* .jar'])'' – 2017-10-26 14:25:21

0

尝试mavenDeployer当POM是正确生成:http://gradle.org/docs/current/userguide/maven_plugin.html

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: "file://localhost/tmp/myRepo/") 
      pom.version = '1.0Maven' 
      pom.artifactId = 'myMavenName' 
     } 
    } 
} 

在这里你可以设置POM细节。你会得到一个新的目标叫做uploadArchives。执行时,它将部署到给定的回购。

+0

谨防快照的相关性,摇篮不遵循此理念行家,这意味着如果部署快照的依赖,gradle这个不会对其进行更新如果它已经得到了相同的版本(AFAIK) – sschrass 2015-03-03 10:07:05

+0

谢谢,但多数民众赞成我的意思是当我提到'申请插件:'maven'' 我会发布一些代码的两个变种 – 2015-03-03 13:18:09

+0

需要再次阅读 - >你不要在这个pom中有依赖关系。没有理由,因为你的依赖被烘焙到工件中。这就是编译的过程。这pom只是你的神器的描述。 – sschrass 2015-03-03 13:31:52