2016-03-07 387 views
3

我有一個項目,其中有一個SharedCode(Java)模塊,其次是Android(Android庫)模塊,該模塊依賴於SharedCode模塊。我以前一直在使用我的build.gradle文件中的maven插件,並且我一直在使用該插件的uploadArchives任務來發布我的兩個模塊中的工件。這已經工作並生成了反映我的build.gradle文件中的依賴關係的pom文件。Gradle maven-publish插件生成沒有依賴項的pom

我想我會用新maven-publish插件替換舊maven插件,但奇怪的是我看到的是由maven-publish插件生成的POM文件不包含任何依賴關係?這是由設計還是這是一個插件中的錯誤,或者我可能使用不正確的插件?

build.gradle文件在我SharedCode模塊如下:

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

build.gradle文件在我Android模塊如下:

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文件的依賴關係。

回答

3

使用from components.java而不是您的publications部分中的artifact...行。這應該會自動產生pom中的依賴關係。

Android項目不被識別爲標準的Java項目,這使得它有點棘手。您可以使用pom.withXml {}創建您自己的依賴項部分,然後迭代您的依賴項列表。或者,有this gradle plugin這是爲你做的。

+0

太棒了!在'SharedCode'模塊中將'from component.java'的'artifact ...'行替換爲'SharedCode'模塊的問題。只需要爲Android模塊找到解決方案。將跟隨你的線索,看看是否導致解決方案。會回到你身邊。 –

+1

我有完全相同的問題,並在此博客文章中描述解決方案:http://jeroenmols.com/blog/2015/08/13/artifactory2/(請參閱依賴項部分) –

+0

通過添加'pom管理解決Android依賴性問題.withXml {}'到我的'build.gradle'。這個答案是一個很大的幫助:http://stackoverflow.com/a/24764713/1071320 –