2016-03-07 4 views
3

У меня есть проект, который имеет модуль SharedCode (Java), а во-вторых, модуль Android (Android), который зависит от модуля SharedCode. Я ранее использовал плагин maven в своих build.gradle файлах, и я использовал задачу uploadArchives этого плагина для публикации артефактов из моих двух модулей. Это сработало и выпустило файлы pom, которые отражают зависимости в моих build.gradle файлах.Gradle maven-publish plugin производит pom без зависимостей

Я думал, что заменить старый maven плагин с новым maven-publish плагина, но причудливо я вижу, что П-файлы, созданные с помощью maven-publish плагина не содержат зависимостей ?! Это по дизайну или это ошибка в плагине, или я, возможно, неправильно использую плагин?

Файл 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 модуля в следует:

<?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 модуля выглядит следующим образом:

<?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> 

Обратите внимание на отсутствие зависимостей в П файлах.

ответ

3

Используйте from components.java вместо линии artifact... в вашем publications разделе для проекта java. Это должно автоматически создавать зависимости в pom.

Проект Android не признан стандартным проектом java, что делает его несколько сложнее. Вы можете создать свой собственный раздел зависимостей, используя pom.withXml {}, а затем итерацию через список зависимостей. Кроме того, есть this gradle plugin, который делает это для вас.

+0

Удивительный! Замена строки 'artifact ...' для 'from components.java' в модуле' SharedCode' устраняет проблему для модуля 'SharedCode'. Просто нужно найти решение для модуля 'Android'. Будут следить за вашими выводами, чтобы узнать, приведет ли это к решению. Вернусь к вам. –

+1

У меня была такая же проблема и описал решение в этом блоге: http://jeroenmols.com/blog/2015/08/13/artifactory2/ (см. Раздел зависимостей) –

+0

Удалось решить проблему с зависимостями Android, добавив 'pom .withXml {} 'в мой' build.gradle'. Этот ответ был большой помощью: http://stackoverflow.com/a/24764713/1071320 –