Gradle:如何从非Java项目发布zip并在Java项目中使用它?

8

我有一个多项目设置。我创建了一个非Java项目,其工件是一个zip文件,我将在另一个项目中解压缩它。所以以下是这个想法:

my-non-java-project
  build.gradle
  ------------
    apply plugin: 'base'

    task doZip(type:Zip) { ... }

    task build(dependsOn: doZip) << {
    }

    artifacts {
      archives doZip
    }


some-java-project
  build.gradle
  ------------
    apply plugin: 'war'
    configurations {
      includeContent // This is a custom configuration
    }
    dependency {
      includeContent project(':my-non-java-project')
    }

    task expandContent(type:Copy) {
      // Here is where I would like get hold of the all the files
      // belonging to the 'includeContent' configuration
      // But this is always turning out to be empty. Not sure how do I publish
      // non-java content to the local repository (as understood by groovy)
    }

所以,我的问题是,如何将非Java项目的构件发布到Groovy的内部存储库中,以便我可以在另一个基于Java的项目中使用它?


2
你是想要访问:my-non-java-project:doZip任务的outputs,还是需要将zip发布到仓库(无论是本地文件系统还是远程)? - superEb
1个回答

7

不太确定您需要什么,但这是一种快速且简单的方法,可以访问:my-non-java-project:doZip任务输出的FileCollection

project(":my-non-java-project").tasks.getByName("doZip").outputs.files

请注意,archives配置是由Java插件添加的,而不是Base插件。但是您仍然可以在my-non-java-project中定义自定义配置,并使用OP中的代码将其添加到其中。
//in my-non-java-project/build.gradle
configurations {
    archives
}
artifacts {
    archives doZip
}

然后您可以通过配置访问任务输出,像这样(再次快速且简单):
//in some-java-project/build.gradle
project(":my-non-java-project").configurations.archives.artifacts.files

请注意,您可以使用zipTree扩展zip文件的内容。
如果您需要实际发布my-non-java-project生成的zip文件,您可以在这里阅读相关信息

感谢您提供的解决方案。这解决了手头的问题。我有相当多的ant+ivy经验,并且也了解一些内部操作。就Gradle而言,我一直在尝试弄清楚如何将构件(任何文件类型)发布到本地Gradle仓库(当依赖项为项目时,Java/War插件使用该仓库)。请注意,我询问的是Gradle的内部仓库,而不是ivy/maven。 - Harsha R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接