美文网首页
用Gradle打一个可执行的Jar包

用Gradle打一个可执行的Jar包

作者: 科学Jia | 来源:发表于2017-11-14 16:49 被阅读795次

    在千山万水人海相遇,然后虎口脱险

    最近一个项目,获取token的方式非常奇葩,需要通过HtmlUnit模拟用户登录才行,于是,自己写了一个定时器,每隔4个小时去模拟登录获取token。于是,问题来了,怎么把这个定时器跑起来,思来想去,决定打一个可执行的Jar包,以下步骤都是亲测有效,如果有跟我一样困惑的小白,可以放心借鉴。

    步骤1:创建一个Main函数

    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    public class GettingToken {
        public static void main(String[] args) {
            Runnable runnable = () ->ConvertTimeFormat.getTokenCT();
            ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
            System.out.println("====================================================================");
            // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
            service.scheduleAtFixedRate(runnable, 0, 14400, TimeUnit.SECONDS);
        }
    }
    

    其中ConvertTimeFormat.getTokenCT()是实现HtmlUnit爬虫的功能,有意思的是,在new Runnable一个实例时候,IDEA提示用lambda函数,于是出现了这样简洁的代码风格,lambda是来源于函数式编程的一个概念, JDK8以后才有这个特性。

    Runnable runnable = () ->ConvertTimeFormat.getTokenCT();
    

    重点来了,下面就是打可执行Jar包的gradle配置

    步骤2:配置build.gradle.

    group 'ConvertTime'
    version '1.0-SNAPSHOT'
    
    apply plugin: 'application'
    
    sourceCompatibility = 1.8
    mainClassName = 'GettingToken'
    repositories {
        mavenCentral()
    }
    
    jar {
        manifest {
            attributes 'Main-Class': 'GettingToken'
        }
        from {
            configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
        compile group: 'com.alibaba', name: 'fastjson', version: '1.2.38'
        // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
        compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'
        compile('net.sourceforge.htmlunit:htmlunit:2.27')
    
    }
    
    

    划下重点

    apply plugin: 'application'
    

    打包所有依赖包到这个Jar包,并指定manifest文件里的Main-Class,在我的项目里Main-Class是GettingToken(见步骤1的Main代码)

    jar {
        manifest {
            attributes 'Main-Class': 'GettingToken'
        }
        from {
            configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    

    步骤3:Alt+F12,进入IDEA的命令终端,然后输入命令: gradle build。

    在build/libs文件下,找到build成功的可执行的Jar包。


    运行Gradle build命令

    步骤4: 运行该可执行文件:Java -jar ***.jar

    运行可执行jar

    大功告成,Get!!!

    相关文章

      网友评论

          本文标题:用Gradle打一个可执行的Jar包

          本文链接:https://www.haomeiwen.com/subject/midfvxtx.html