将java文件和资源编译为zip文件的Gradle任务

将java文件和资源编译为zip文件的Gradle任务,gradle,build,Gradle,Build,我是Gradle的新手,过去没有Gradle构建的经验。我试图实现的是编译Java类,复制一些文件以使用一些资源文件构建目录,并生成整个目录的zip文件 压缩文件内容 bin ----data ----java ----properties ----resources ----run.sh ----classes <---- Java compiles classes here! lib ----sqlite-jdbc-3.23.1.jar properties ----MANIFEST.

我是Gradle的新手,过去没有Gradle构建的经验。我试图实现的是编译Java类,复制一些文件以使用一些资源文件构建目录,并生成整个目录的zip文件

压缩文件内容

bin
----data
----java
----properties
----resources
----run.sh
----classes <---- Java compiles classes here!
lib
----sqlite-jdbc-3.23.1.jar
properties
----MANIFEST.MF
bin
----资料
----爪哇
----性质
----资源
----run.sh

----类我认为您应该同时使用Java和分发插件,这将帮助您创建一个简单的构建脚本。Java插件将为您带来一些在您的案例中可能不需要的任务,但仍然值得使用它,而不是为源代码编译创建您自己的任务

可以用作初学者的脚本示例:

plugins {
    id 'java'
    id 'distribution'
}

// Java plugin configuration
// ---------------------------------------------------

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
}

dependencies {
    compile group: 'org.xerial', name: 'sqlite-jdbc', version: '3.23.1'
}

// Distribution plugin configuration
// ------------------------------------------------------
distributions {
    main {
        baseName = 'myDist'
        contents {
            // 1. by default, content under /src/main/dist will be automatically included in the target dist zip

            // 2. include compiled classes output dir into  /bin/classes 
            from(project.sourceSets.main.output.classesDir) {
                into('bin/classes/')
            }
            // 3. include all dependent jars into /libs
            from(configurations.compile) {
                into('libs/')
            }

            // 4. other resources to include in the target zip
            // ...

        }
    }
}

// Make distZip task depend on compileJava task
distZip {
    dependsOn compileJava
    // EDIT : change target file path 
    eachFile { file ->
        String path = file.relativePath
        String newPath = path.substring(path.indexOf("/")+1,path.length())
        println "Changed path to file from $path to $newPath"
        file.setPath(newPath)
    }
}

此脚本假定您在项目中遵循标准的目录布局,用于源代码和资源(src/main/java/,src/main/dist/,…),否则您必须调整脚本。

知道如何从存档中删除父目录吗?@JarnoLahtinen with Distribution plugin我不知道您是否可以创建没有根目录的zip;也许您可以直接使用Zip任务而不是分发插件:请参阅这里类似于您的问题的答案:我现在如何扩展javaCompile来制作Zip包。如果我将自定义任务设置为Zip,我就没有可用的java类。那么,我需要用doLast或其他什么扩展JavaCompile吗?让我们来看看。正如在chat中与Jarno讨论的那样,生成的Zip存档是正确的,不再包含根目录,使用了前面评论中描述的“技巧”(请参阅我的答案中脚本示例中的编辑部分)@JarnoLahtinen如果能解决您的问题,请随意接受我的回答;)