問題
本來準備給Maven項目打個jar包,然後上傳到linux服務器運行。結果發現,mvn package打好的jar包只有自己寫的源代碼,依賴的那些jar包都丟失了。導致我運行jar包時,報classNotFoundException:io.netty
。剛開始還以爲是代碼出問題了,經過一番分析才發現,原來我打的jar包裏只有自己寫的代碼。。。
解決方案
通過一番搜索,終於找到了一個可行的解決方案。那就是通過maven的maven-assembly-plugin
插件,注意版本號是2.5.5
,我測試過3.5.0
竟然不行,3.5
打包到一半會卡住。
一、添加maven插件
下面是pom.xml文件的build
塊代碼:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.yj.TCPClient.upload.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!-- 添加此項後,可直接使用mvn package | mvn install -->
<!-- 不添加此項,需直接使用mvn package assembly:single -->
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
二、使用mvn package打包運行
我這裏使用idea的maven操作檯來打包:
注意:點擊右上角的閃電⚡符號可以跳過測試哦
三、打包完畢,複製jar包到linux服務器運行
打包成功之後(build success),就可以在項目的target目錄下看到我們打好的jar包了,名字應該叫TCP_Client-1.0.0-jar-with-dependencies.jar
。然後,我複製這個jar包到linux服務器運行就好了,所有依賴項都在裏面了。
總結
Maven這個東西真玄學,爲了給maven項目打包,我都折騰了三小時了,真難受啊。