【问题标题】:Include additional files in an already created zip file using gradle使用 gradle 在已创建的 zip 文件中包含其他文件
【发布时间】:2016-02-26 05:23:20
【问题描述】:

我正在创建一个包含 jar 的分发 zip,作为我的 gradle 任务的输出,如下所示:

class MakeDistZipTask extends Zip {
@TaskAction
def DistZip(){
    Properties properties = new Properties()
    properties.load(project.rootProject.file('gradle.properties').newDataInputStream())
    def versionName = properties.getProperty('versionName')
    println("creating a distribution zip")
    baseName = versionName
    from ('/dist'){ include '*.jar' }
    from('src/main/libs/armeabi-v7a/') {
        include('*')
        into('armeabi-v7a')
    }

    destinationDir = file('dist/')
}

} 我执行了这个任务,我得到了一个包含 jar 和 armeabi-v7a 文件夹的 zip。

现在,我想在不更改此任务(必需)的情况下自定义此 zip 文件,以便在 build.gradle 项目中,用户可以根据要求将文件添加到此 zip。我已经尝试了一些可用的解决方案,但似乎没有一个效果这么好。我试过了

jar{
baseName = 'distZip'
from('src/main/jni/'){
    include('VC*.h')
    into('includes')
}
manifest {
    attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
}

另一种解决方案:

sourceSets.main.resources{
from('src/main/jni/'){
    include('VC*.h')
    into('includes')
}

另外,我使用了分发插件:

/*apply plugin: 'java-library-distribution'
 version 1.0
 distributions{
jar{
    baseName='distZip'
    contents{
        from('src/main/jni/') {
            include('VC*.h')
            into('includes')
             }
        }
    }
  }

没有解决方案将文件添加到 zip 文件中。任何指针

【问题讨论】:

  • 您能否提供一个完整的最小构建文件,说明您正在执行什么任务,您希望它做什么以及它会做什么?
  • 解压、修改、重新打包?
  • 我正在通过分发插件,这不是很有用吗?

标签: gradle


【解决方案1】:

我使用分发插件得到了这个工作。我在自定义插件项目中添加了插件,并在我的项目中添加了一组我想添加到我的 zip 文件夹中的文件,如下所示:

distributions{
          myZip{
                 from('path'){
                        include 'file'
                 }
          }
}

【讨论】:

  • myZip 是我使用自定义插件创建的区域创建 zip
【解决方案2】:

未经测试,但我会尝试这种形式的东西:

task newZip(type: Zip)<<{
    basename newZip
    from ziptree(oldZip.zip)
    from filetree(dir/of/new/files)
}

您也可以使用DistZip.finalizedBy(newZip) 来确保每次运行 distZip 时都会调用 newZip。

【讨论】:

  • 我执行了这个,我执行了 makeDist 任务,它说 newZip is UP_TO_DATE
  • 这可能意味着它最新的?你可以运行gradle clean makeDist
  • 我做了 gradlew clean makeDist -i,它说跳过任务,因为它不包含任何源文件。
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
相关资源
最近更新 更多