如何在Gradle中打包zip依赖项中的文件

时间:2016-01-15 15:32:00

标签: gradle dependencies nexus

我有一个Gradle项目,其中包含从Nexus存储库下载的依赖项。 我希望获得jar和zip文件的依赖之一。

jar(" name-version.jar")可通过以下方式轻松获得:

dependency {
    compile 'group:name:version'
}

但是我想要的其他工件的名称如下: " name-version-config.zip"

如何从存储库中获取此工件? 我需要这个工件来获取其中的一些文件以在我的包/分发任务中使用。

我已经尝试创建一个新配置并进行如下配置:

configurations {
    zipConfig
}

dependencies {
    ...
    compile group: <group>, name: <name>, version: <version>
    zipConfig group: <group>, name: <name>, version: <version> + '-config', ext: 'zip'
}

但是这会失败,因为gradle将尝试使用错误的路径找到正确的文件名:&#34; group / name / version-config / name-version-config.zip&#34;我需要它来搜索&#34; group / name / version / name-version-config.zip&#34;

中的文件

2 个答案:

答案 0 :(得分:1)

在Maven中,我们可以使用分类器生成工件。为了让Gradle下载一个带分类器的特定文件,我定义了一个名为zipConfig的新配置,并按如下方式声明了依赖项:

configurations {
  zipConfig
}

dependencies {
  ...
  zipConfig group:'<group>', name:<name>, version:<version>, ext:'zip', classifier:'config'
}


要提取zip工件的文件并将它们复制到我的包中,我定义了一个解压缩文件并将其中的文件复制到build / resources文件夹中的任务。

task unzipConfig(type: Copy) {
  def sdkServerPattern = ".*" + sdkServer + ".*config.*"
  def pattern = ~/$sdkServerPattern/
  def configZipTree = zipTree(configurations.zipConfig.filter{it.name.matches(pattern)}.singleFile)

  from configZipTree
  include '**/*filename1'
  include '**/*filename2'
  into(project.buildDir.path + '/resources')
}


在项目的“打包”任务中(所有内容都打包到.tar.gz文件中),资源文件夹中的文件被引用以打包在一起。

task pack(type: Tar, dependsOn: unzipConfig) {
  dependsOn build

  compression = Compression.GZIP
  extension = 'tar.gz'

  from(configurations.runtime.allArtifacts.files) {
    into('/lib')
  }

  from(configurations.runtime) {
    into('/lib')
  }

  def sdkConfigFolderName = 'build/resources/' + sdkServer + '-' + sdkServerVersion + '/config/'

  from sdkConfigFolderName + 'filename1'
  from sdkConfigFolderName + 'filename2'

  baseName = project.name + '-distribution'
}

答案 1 :(得分:0)

您可以编写一个gradle任务,将zip文件下载到本地目录,然后按名称将下载的文件用作依赖项。

或者您可以使用自定义常春藤模式并将URL视为自定义布局常春藤存储库以获取zip文件。见here