在我们日常开发中,我们经常会使用maven来构建项目,项目构建之后通常会使用ssh远程连接主机并上传到服务器上去部署,你有没有想过使用maven提供的插件一键即可完成,这样对于我们开发来说,不仅节省时间还省去了许多麻烦的问题,何乐而不为呢,下面我们将通过实际的需求来解决这个问题。
第一步:我们需要配置maven的settings.xml文件,在下面的选项中打开 open file 这个连接,Eclipse会打开该文件,
之后我们需要定位到<servers></servers>节点,我们根据它提供的Demo,复制一个即可,下面是我选择的一个server配置节点。
其中server中的节点配置,id为网络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节点中指定远程主机的用户名和密码即可,这里不过多饶舌了。完成了上面步骤之后,就可以使用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这个算法不可用,这时候我们就不知道如何下手了,经过我一波搜索,总算找到了解决方案了,那就是看下一个步骤。
第三步:完成了上两个步骤,我们得到了一个大大的异常,以至于我们辗转发侧,难以入眠,为了打破这个异常,我们接下来解决这个问题。首先我们需要定位问题,这个异常提示我们找不到DH这个算法,所以我们就添加一个算法不就可以了吗,具体步骤如下:
C:\xxx\Java\jdk1.8.0_131\jre\lib\ext 目前小编我的计算机java目录如下,进入该目录,然后你会发现这个文件夹下面有很多的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
上面的命令只提供了上传文件到服务器,如果需要执行命令还需要增加如下命令:
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] ------------------------------------------------------------------------
到此我们便完成了一键部署的操作了。