Gradle не включает зависимости в опубликованном pom.xml

У меня есть проект Gradle. Я использую плагин maven-publisher для установки моей андроидной библиотеки в maven local и maven repo.

Это работает, но сгенерированный файл pom.xml не содержит никакой информации о зависимостях. Есть ли способ обхода этой информации, или я вынужден вернуться к плагину maven и выполнить всю ручную конфигурацию, которая требуется?


Исследование я понял, что я не говорю о публикации, где существуют зависимости, я только указываю вывод / артефакт, поэтому мне нужен способ связать эту MavenPublication с зависимостями, но я еще не нашел, как это сделать в Документации.

 -------------------------------------------------- ----------
 Грейдл 1.10
 -------------------------------------------------- ----------

 Время сборки: 2013-12-17 09:28:15 UTC
 Номер сборки: нет
 Просмотр профиля: 36ced393628875ff15575fa03d16c1349ffe8bb6

 Groovy: 1.8.6
 Ant: версия Apache Ant (TM) 1.9.2, составленная 8 июля 2013 года
 Плющ: 2.2.0
 JVM: 1.7.0_60 (Oracle Corporation 24.60-b09)
 ОС: Mac OS X 10.9.2 x86_64

Соответствующие разделы build.gradle

 //... apply plugin: 'android-library' apply plugin: 'robolectric' apply plugin: 'maven-publish' //... repositories { mavenLocal() maven { name "myNexus" url myNexusUrl } mavenCentral() } //... android.libraryVariants publishing { publications { sdk(MavenPublication) { artifactId 'my-android-sdk' artifact "${project.buildDir}/outputs/aar/${project.name}-${project.version}.aar" } } repositories { maven { name "myNexus" url myNexusUrl credentials { username myNexusUsername password myNexusPassword } } } } 

Сгенерированный pom.xml:

 <?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>org.example.android</groupId> <artifactId>my-android-sdk</artifactId> <version>gradle-SNAPSHOT</version> <packaging>aar</packaging> </project> 

Solutions Collecting From Web of "Gradle не включает зависимости в опубликованном pom.xml"

Мне удалось обойти это, добавив скрипт в зависимости от pom прямо с помощью pom.withXml .

 //The publication doesn't know about our dependencies, so we have to manually add them to the pom pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') //Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each configurations.compile.allDependencies.each { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) } } 

Это работает для моего проекта, это может иметь непредвиденные последствия в других.

Я обновил решение C.Ross. В этом примере будет создан pom.xml с зависимостями от конфигурации компиляции, а также со специальными зависимостями типа сборки, например, если вы используете разные зависимости для версии выпуска или отладки (debugCompile и releaseCompile). А также добавление исключений

 publishing { publications { // Create different publications for every build types (debug and release) android.buildTypes.all { variant -> // Dynamically creating publications name "${variant.name}Aar"(MavenPublication) { def manifest = new XmlSlurper().parse(project.android.sourceSets.main.manifest.srcFile); def libVersion = manifest['@android:versionName'].text() def artifactName = project.getName() // Artifact properties groupId GROUP_ID version = libVersion artifactId variant.name == 'debug' ? artifactName + '-dev' : artifactName // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") pom.withXml { //Creating additional node for dependencies def dependenciesNode = asNode().appendNode('dependencies') //Defining configuration names from which dependencies will be taken (debugCompile or releaseCompile and compile) def configurationNames = ["${variant.name}Compile", 'compile'] configurationNames.each { configurationName -> configurations[configurationName].allDependencies.each { if (it.group != null && it.name != null) { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) //If there are any exclusions in dependency if (it.excludeRules.size() > 0) { def exclusionsNode = dependencyNode.appendNode('exclusions') it.excludeRules.each { rule -> def exclusionNode = exclusionsNode.appendNode('exclusion') exclusionNode.appendNode('groupId', rule.group) exclusionNode.appendNode('artifactId', rule.module) } } } } } } } } } } 

Я предполагаю, что это имеет какое-то отношение к директиве from components.java , как видно из руководства . У меня была аналогичная настройка, и мне было необходимо добавить строку в блок публикации:

 publications { mavenJar(MavenPublication) { artifactId 'rest-security' artifact jar from components.java } }