前言

最近的一个项目里面需要使用gradle打一个可执行的jar包,在网上看了一堆帖子照着做最后都不是很成功,最后终于参考StackOverflow上的帖子搞定了可执行jar包的打包脚本,因此做一个笔记对这个进行一下记录。

这里是本文的正片

我的代码因为包含了groovy的代码,因此在脚本中包含了groovy的部分配置,如果不适用groovy请去掉相关内容。

buildscript {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    }

    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:5.1.0"
    }
}

plugins {
    id 'java'
    id 'groovy'
    id 'application'
    id 'com.github.johnrengelman.shadow' version '5.1.0'
}

apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'application'

group 'groupId of your project'             //项目的groupid
version '0.0.1'

mainClassName = "your mainClassName"        //项目main方法所在的类名,需要包含完整的包路径

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

//设置编译字符集
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

sourceSets {
    main {
        groovy {
            srcDir 'src/main/groovy'        // 指定groovy源码目录
        }
        java {
            srcDir 'src/main/java'          // 指定java源码目录
        }
        resources {
            srcDir 'src/main/resources'     //资源目录
        }
    }
}

//这里添加你的依赖
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('your class files path')
    testCompile group: 'junit', name: 'junit', version: '4.12'
    //集成groovy
    compile 'org.codehaus.groovy:groovy-all:2.5.8'
    //集成fastjson
    compile group: 'com.alibaba', name: 'fastjson', version: '1.2.59'
}

//使用shadow进行打包
shadowJar {
    baseName = 'baseName'
    classifier = null
    version = "0.0.1"
    manifest {
        attributes "Main-Class": mainClassName
    }
    configurations = [project.configurations.runtime]       //配置包中包含的依赖的jar包
}

然后使用shadowjar打包即可。