最近使用Kettle做定时数据抽取,因为Job更新或需求变更,修改Bug等种种原因,需要对重跑Job一般是针对每天的数据重跑一次。刚开始的做法是直接在自己的开发机器上重跑,这样速度比较慢,因为这时候你的开发机相当于数据的中专站,这样外网数据来回传输速度很慢重新集计一个月的数据可能要花半小时以上。因此就萌生了把集计程序打成jar直接放到服务器上去执行,这样内网传输速度就快了很多。
之前使用IDEA自带的打包试了好几次都不成功,后面搜了一下Maven发现更简单。对应的POM文件如下:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>RunJob</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中<mainClass>RunJob</mainClass>填写含有Main的class名,然后执行以下命令:
mvn assembly:assembly
//跳过测试
mvn -Dmaven.test.skip=true assembly:assembly
打包成功后会把所有依赖Jar的class打在一个jar包中。
使用以下命令运行jar,参数依次跟在后面,如果有的话:
java -jar BuildKettleJob-1.0.jar