最近使用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