2015-11-30 68 views
0

我有一个多积累,我需要一些依赖发布到磁盘上的一个自定义的本地仓库,然后将此文件夹添加到压缩包。摇篮任务相关的动态创建的任务

我定义了使用Maven的插件发布各子项目发布任务。

subprojects { 
    apply plugin: 'maven-publish' 

    configurations { 
     offlineDependencies 
    } 

    publishing { 
     publications { 
      configurations.each { config -> 
       if (config.name == "offlineDependencies") { 
        def files = config.files 
        config.dependencies.each { dep -> 
         files.each { file -> 
          if (file.name == "${dep.name}-${dep.version}.jar") { 
           "${dep.name}"(MavenPublication) { 
            artifact (file) { 
             groupId = "${dep.group}" 
             artifactId = "${dep.name}" 
             version = "${dep.version}" 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
     repositories { 
      maven { 
       name 'dependencies' 
       url '../build/repository' 
      } 
     } 
    } 
} 

使用分配插件创建一个zip文件

distributions { 
    release { 
     baseName 'release' 
     contents { 
      from('src/main/resources/') 
      into("repository"){ 
       from("$buildDir/repository") 
      } 
     } 
    } 
} 

我怎么能确保所有的动态创建的发布任务创建ZIP文件之前运行?

我试图做一个新的任务依赖于动态创建任务的所有子项目,但似乎他们不是在那个时候还没有建立。

subprojects { 
    task offlineDep << { 
     println 'Creating offline dependencies' 
    } 
    offlineDep.dependsOn { 
     tasks.findAll { task -> task.name.endsWith('PublicationToDependenciesRepository') } 
    } 
} 

回答

0

我找到了解决这个问题的办法。通过收集工件名称并生成我知道的任务名称将在以后创建并将它们添加为依赖项。

subprojects { 
    apply plugin: 'maven-publish' 
    def offlineDependencyNames = [] 

    publishing { 
     publications { 
      configurations.each { config -> 
       if (config.name == "offlineDependencies") { 
        def files = config.files 
        config.dependencies.each { dep -> 
         files.each { file -> 
          if (file.name == "${dep.name}-${dep.version}.jar") { 
           offlineDependencyNames << dep.name 
           "${dep.name}"(MavenPublication) { 
            artifact (file) { 
             groupId = "${dep.group}" 
             artifactId = "${dep.name}" 
             version = "${dep.version}" 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
     repositories { 
      maven { 
       name 'dependencies' 
       url "${rootProject.buildDir}/repository" 
      } 
     } 
    } 

    task publishOfflineDependencies 
    publishOfflineDependencies.dependsOn { 
     offlineDependencyNames.collect { name -> 
"publish${name[0].toUpperCase()}${name.substring(1)}PublicationToDependenciesRepository" 
     } 
    } 
} 


releaseDistZip.dependsOn { 
    subprojects.collect { 
     p -> p.path + ':publishOfflineDependencies' 
    } 
}