在千山万水人海相遇,然后虎口脱险
最近一个项目,获取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命令
网友评论