gpt4 book ai didi

gradle - 如何从文件列表中在 gradle 中创建 zip?

转载 作者:行者123 更新时间:2023-12-02 02:22:36 24 4
gpt4 key购买 nike

这肯定是一个 gradle 新手问题,但它真的让我很沮丧。我的源代码树如下所示:

|-- master
buildSrc
build.gradle
|-- comp1
!-- filea
!-- fileb
|-- comp2
!-- file1
!-- file2
!-- etc

我正在 master 目录中运行 build.gradle,它使用自定义任务(在 prepBundle 中调用(未显示))来生成文件列表,这些文件需要位于 zip 文件中。列表中有一些不同的外部处理,因此没有办法使用任何基本的包含或闭包来生成列表。

这就是我所拥有的:

task showFilelist(dependsOn:prepBundle){ 
prepBundle.outputs.files.each{
println "including file: ${it}"
}
}

task createBundle(type:Zip,dependsOn:prepBundle){
inputs.files(prepBundle.outputs.files)
outputs.file(archiveName)
baseName = "somebundle"
from ".."
include prepBundle.outputs.files
}

如果我只是运行 showFilelist,我确实会得到我想要压缩的文件的正确解析路径:

<snip>
:showFilelist
including file: C:\fullpath\master\build.gradle
including file: C:\fullpath\comp1\filea
including file: C:\fullpath\comp2\file1

但是当我运行捆绑任务时,它崩溃了:

:createBundle

FAILURE: Build aborted because of an internal error.

* What went wrong:
Build aborted because of an unexpected internal error. Please file an issue at: http://forums.gradle.org.

* Try:
Run with --debug option to get additional debug info.

* Exception is:
org.gradle.api.UncheckedIOException: java.io.IOException: The process cannot access the file because another process has locked a portion of the file
at org.gradle.util.hash.HashUtil.createHash(HashUtil.java:56)
at org.gradle.util.hash.HashUtil.createHash(HashUtil.java:34)
at org.gradle.api.internal.changedetection.state.DefaultHasher.hash(DefaultHasher.java:24)
at org.gradle.api.internal.changedetection.state.CachingHasher.hash(CachingHasher.java:45)
at org.gradle.api.internal.changedetection.state.DefaultFileSnapshotter$1.run(DefaultFileSnapshotter.j
ava:48)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:143)
at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:131)
at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.

在 prepBundle 中,我迭代文件列表,并且没有任何文件被其他进程使用。我不相信这是一个 gradle 问题,我认为这是我在 zip 任务的配置上做错的事情。如果我稍微更改 createBundle 以删除输入和输出,它看起来像这样:

task createBundle(type:Zip,dependsOn:prepBundle){ 
baseName = "somebundle"
include prepBundle.outputs.files
}

但是然后什么也没做:

:createBundle UP-TO-DATE

BUILD SUCCESSFUL

当我只有一个文件列表并且这些文件的父根目录不在我当前的项目下时,我应该如何将此 zip 放在一起?

感谢您的帮助!

  • 安迪

最佳答案

您可以轻松创建包含任务的 zip 文件,请查看下面的示例:

task createDist(type: Zip){
archiveName="dist.zip"
destinationDir = file('build/')
from (files('./test-module/build/libs'))
}

您可以使用多种方法在此处包含文件,例如:

 from fileTree('./libs')
from project('config').jar.outputs.files
from project('core').jar.outputs.files
from project('batch-jobs').jar.outputs.files
from project('gateway1').jar.outputs.files
from project('gateway2').jar.outputs.files

关于gradle - 如何从文件列表中在 gradle 中创建 zip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com