2017-09-24 18 views
1

我有一個發佈配置塊,看起來像這樣在我的build.gradle文件搖籃的Maven插件發佈配置有參考動態創建任務的gradle

publishing { 
publications { 
    maven(MavenPublication) { 
     groupId "groupId" 
     artifactId 'artifactId' 
     version "4.0" 
     artifact "$buildDir/outputs/aar/artifact-release.aar" 
     artifact releaseJavadocsJar 

     // Generate pom file so that the artifact dependencies can be fetched automatically. 
     pom.withXml { 
      def dependenciesNode = asNode().appendNode('dependencies') 
      configurations.compile.allDependencies.each { dependency -> 
       def dependencyNode = dependenciesNode.appendNode('dependency') 
       dependencyNode.appendNode('groupId', dependency.group) 
       dependencyNode.appendNode('artifactId', dependency.name) 
       dependencyNode.appendNode('version', dependency.version) 
      } 
     } 
    } 
} 

}

注意releaseJavadocsJar,這是一個gradle這個任務定義是這樣的:

android.libraryVariants.all { variant -> 
    if (variant.name == 'release') { 
     def taskJavadoc = task("releaseJavadocs", type: Javadoc) { 
      source = variant.javaCompile.source 
      classpath = files(((Object) android.bootClasspath.join(File.pathSeparator))) 
      classpath += files(variant.javaCompile.classpath.files) 
     } 
     task("releaseJavadocsJar", type: Jar) { 
      classifier = 'javadoc' 
      from taskJavadoc.destinationDir 
     } 
    } 
} 

當我的gradle同步此行

artifact releaseJavadocsJar 

從出版物抱怨

Error:(62, 0) Could not get unknown property 'releaseJavadocsJar' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication. 

這意味着當gradle這個同步發生時我的動態創建的任務還沒有。

有沒有辦法解決這個問題?

+0

請嘗試移動有'releaseJavadocsJar'的定義'publishing'塊之前的代碼塊。 – Opal

+0

該定義位於發佈區塊之前,但發佈區塊似乎首先被調用 –

+0

有一段時間,我認爲您可以更改插件順序,但這無濟於事。您可以嘗試將'publish'塊移至'project.afterEvaluate'閉包。在這個塊中,整個項目被評估,所有任務都應該被添加。你能試試嗎? – Opal

回答

1

結束語在project.afterEvalute塊沒有工作,但這並:

project.tasks.whenTaskAdded { addedTask -> 
if (addedTask.name == 'releaseJavadocsJar') { 
    // Publishing to local maven repo via 'gradlew publishToMavenLocal'. 
    publishing.publications { 
     maven(MavenPublication) { 
    groupId "groupId" 
    artifactId 'artifactId' 
    version "4.0" 
    artifact "$buildDir/outputs/aar/artifact-release.aar" 
    artifact releaseJavadocsJar 

    // Generate pom file so that the artifact dependencies can be fetched automatically. 
    pom.withXml { 
     def dependenciesNode = asNode().appendNode('dependencies') 
     configurations.compile.allDependencies.each { dependency -> 
      def dependencyNode = dependenciesNode.appendNode('dependency') 
      dependencyNode.appendNode('groupId', dependency.group) 
      dependencyNode.appendNode('artifactId', dependency.name) 
      dependencyNode.appendNode('version', dependency.version) 
     } 
    } 
}