idea使用maven插件打jar包步驟以及遇到的問題
idea自帶了maven工具,idea右邊點擊maven選項:
一、在pom中添加插件,直接復制就好,如下選項
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>test.TestOperFile</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
注意:關於插件中這個地方需要注意一下:
這里分為兩種情況
a.打包scala程序
如果只是打包scala程序的話,這里代表的是主函數的方法名,一定是全路徑名(包名+類名)
jar包運行方式:java -jar test.jar [參數1 參數2...]
b.打包spark程序
如果是打包spark程序的話,這里可以隨意,不影響,運行的時候需要指定類名即可
jar包運行方式:
spark-submit --class test.testOperator \
--master yarn \
--deploy-mode client \
--driver-memory 3g \
--executor-memory 2g \
--executor-cores 1 \
--num-executors 4 \
--jars /hadoop/datadir/deploy/lib/mysql-connector-java-5.1.7-bin.jar \
--conf spark.sql.shuffle.partitions=100 \
--conf spark.shuffle.sort.bypassMergeThreshold=5 \
--conf spark.kryoserializer.buffer.max=128m \
--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
--conf spark.sql.parquet.compression.codec=snappy \
--conf spark.shuffle.sort.bypassMergeThreshold=5 \
--conf spark.locality.wait.node=6 \
--conf spark.locality.wait.process=6 \
test.jar [參數1,參數2...]
運行參數可以根據自己的需求進行調整
二、開始打包(清空target目錄->編譯->打包),有時候也需要執行install進行發布到倉庫中,根據自己的需求
打包后的結果:
*************************************************************************************************************************************************************
* 或者進行打包的時候后也可以直接打開idea底下的terminal,執行命令記性打包:mvn assembly:assembly
*
*************************************************************************************************************************************************************
如果出現上圖所示,說明打包成功,此時找到右邊的target目錄,下面會有兩個包:
然后執行的時候,我們只需要執行第二個包就可以了,也就是名字長的那個包:
三,jar包的執行:
a.對於scala程序的jar包,因為main函數已經在pom中打包之前指定了,所以執行的時候如果有參數,只需要傳入相應的參數即可,用空格分開
1、使用 "java -jar" 的方式提交:
2、使用submit的方式提交程序
可以看到,也可使用submit的方式進行提交,可以指定--class,也可以不指定
b.對於spark程序的jar包,此時即使是在pom中指定了main函數,在提交的執行的時候必須按照spark程序的提交方式進行提交,即使用submit的方式,不能用 java -jar的方式提交,否則會報錯
1、使用submit的方式提交程序:
這樣提交運行之后是沒有什么問題的
2、使用 "java -jar" 的方式提交:
報錯,至於如何解決,本人暫時還沒有找到好的方案。希望能夠幫到需要的童鞋