在我們日常開發(fā)中超营,我們經(jīng)常會使用maven來構建項目协屡,項目構建之后通常會使用ssh遠程連接主機并上傳到服務器上去部署赊抖,你有沒有想過使用maven提供的插件一鍵即可完成氛雪,這樣對于我們開發(fā)來說,不僅節(jié)省時間還省去了許多麻煩的問題,何樂而不為呢墓猎,下面我們將通過實際的需求來解決這個問題毙沾。
第一步:我們需要配置maven的settings.xml文件,在下面的選項中打開 open file 這個連接左胞,Eclipse會打開該文件,
之后我們需要定位到<servers></servers>節(jié)點遍烦,我們根據(jù)它提供的Demo服猪,復制一個即可拐云,下面是我選擇的一個server配置節(jié)點。
其中server中的節(jié)點配置膳帕,id為網(wǎng)絡id可隨意命名薇缅,但是我們要記住,因為稍后的時間我們需要使用到恬砂,username則是連接到遠程主機的用戶名蓬痒,password則是遠程主機的密碼,這一步配置好了之后狱掂,基本上就完成了maven的基本配置了。
第二步:這個步驟就需要加入maven的插件來支持遠程操作了鸟顺,在項目的pom.xml中配置wagon-maven-plugin插件:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
</dependencies>
<configuration>
<serverId>doudizhu</serverId>
<fromFile>target/LePoker.jar</fromFile>
<url>scp://192.168.1.201/data/ddz</url>
<commands>
<command>sh /data/project/app/manager.sh stop</command> <command>rm -rf
/data/project/app/Project.jar</command> <command>sh /data/ddz/manager.sh start</command>
<command>pkill -f Project.jar</command>
<command>nohup java -jar /data/project/app/Project.jar >
/data/project/app/logs/monitor.log 2>&1 &</command>
</commands>
<!-- 顯示運行命令的輸出結果 -->
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</plugin>
</plugins>
</build>
需要注意的是這里的serverId需要配置成我們上一個步驟配置的deploymentRepo,不然可能會提示你找不到,或者你也可以省略上一個步驟欧芽,直接在url節(jié)點中指定遠程主機的用戶名和密碼即可,這里不過多饒舌了千扔。完成了上面步驟之后曲楚,就可以使用maven的命令來構建項目了褥符,然后你就喷楣。。抡蛙。會得到一個大大的錯誤:
mvn clean package wagon:upload-single
錯誤:
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- wagon-maven-plugin:1.0:upload-single (default-cli) @ LePoker ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.018 s
[INFO] Finished at: 2017-12-08T09:03:00+08:00
[INFO] Final Memory: 31M/306M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:wagon-maven-plugin:1.0:upload-single (default-cli) on project LePoker: Unable to create a Wagon instance for scp://192.168.1.201/project/app: Cannot connect. Reason: Session.connect: java.security.NoSuchAlgorithmException: Algorithm DH not available -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
這個異常提示java.security.NoSuchAlgorithmException: Algorithm DH not available惋耙,Algorithm DH這個算法不可用熊昌,這時候我們就不知道如何下手了婿屹,經(jīng)過我一波搜索,總算找到了解決方案了届腐,那就是看下一個步驟。
第三步:完成了上兩個步驟硬萍,我們得到了一個大大的異常围详,以至于我們輾轉發(fā)側,難以入眠买羞,為了打破這個異常畜普,我們接下來解決這個問題婉徘。首先我們需要定位問題盖呼,這個異常提示我們找不到DH這個算法化撕,所以我們就添加一個算法不就可以了嗎,具體步驟如下:
C:\xxx\Java\jdk1.8.0_131\jre\lib\ext 目前小編我的計算機java目錄如下植阴,進入該目錄掠手,然后你會發(fā)現(xiàn)這個文件夾下面有很多的jar包,我們不管它們干什么用的喷鸽,我們先打開瀏覽器做祝,下載:bcprov-jdk16-1.46.jar 這個文件,下載完成之后復制到我們的C:\xxx\Java\jdk1.8.0_131\jre\lib\ext這個目錄即可编兄,然后最后一步并是指定該算法即可声登,打開目錄C:\xxx\Java\jdk1.8.0_131\jre\lib\security 文件夾,定位到java.security文件舒岸,打開該文件然后定位到
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
# 這一行并是我們新增的內容蛾派,指定其算法的提供者為我們剛提供的jar包中的算法
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
完成了以上步驟之后个少,我們再使用maven的命令重新構建一下項目即可完成構建并上傳到服務器上去了夜焦。
mvn clean package wagon:upload-single
上面的命令只提供了上傳文件到服務器茫经,如果需要執(zhí)行命令還需要增加如下命令:
package wagon:upload-single wagon:sshexec
成功的信息打印如下:
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Project 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- wagon-maven-plugin:1.0:upload-single (default-cli) @ Project ---
[INFO] Uploading: D:\Workspace\Code\Project \target\Project .jar scp://192.168.1.201/data/project/app/Project .jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.164 s
[INFO] Finished at: 2017-12-08T09:17:50+08:00
[INFO] Final Memory: 43M/423M
[INFO] ------------------------------------------------------------------------
到此我們便完成了一鍵部署的操作了卸伞。