Maven使用SSH将本地文件复制到远程服务器

Maven可以使用SSH将本地文件复制到远程服务器服务器?

我想在mavenconfiguration文件中指定位置,并在每次执行部署阶段时将该文件(或多个文件)复制到服务器。

maven-deploy-plugin允许您使用scp将部署阶段configuration为部署到服务器。 文档中有一个页面描述如何完成。

我相信这将取代正常的部署,而不是添加到它,所以它可能不是你所追求的。

如果您需要部署到传统的Maven存储库以及将文件传送到远程服务器,则需要使用scp任务,如其他答案所示。

在这个答案中,我已经介绍了如何configurationftp任务,除了可能需要添encryption钥文件和密码属性(并将任务名称从ftp更改为scp)之外,scp任务几乎是相同的。

为什么不使用可以在Maven中运行的Ant SCP任务?

看看Maven Wagon插件

使用一个简单的命令行手动尝试: mvn org.codehaus.mojo:wagon-maven-plugin:1.0:upload -Dwagon.url=scp://username:userpassword@myserver -Dwagon.fromDir=target -Dwagon.includes=*.ear -Dwagon.toDir=/home/elisabetta

在这两种情况下,请务必将Wagon的SSH扩展添加到您的pom.xml中:

 <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> 

Maven不是一个通用的工具,它是一个让你的构build过程可重用的工具。 我build议使用embedded的antrun构build步骤。 在这一步中,你可以使用在build.xml中使用的普通ant语法来做任何事情。

虽然这个问题不是全新的,但我今天也遇到过类似的情况。 我的目标是上传文件并在远程服务器上运行命令(必须通过其他服务器)。 我设法与ant (这也可以从这里提到的maven触发) ant的解决scheme。

antsshsession任务只创build一个隧道 ,您可以使用它的任务。 其中的任务不会自动在远程服务器上运行,但是您可以使用sshexec任务和隧道一起完成此任务。 此外, scp任务现在可以通过隧道上传到远程服务器。 这里是一个例子:

 <sshsession host="${jumphost}" port="22" username="${user}" password="${password}" trust="true"> <localtunnel lport="${localTunnelPort}" rhost="${targethost}" rport="22"/> <sequential> <!-- run a command on the remote server (here mkdir) --> <sshexec host="localhost" port="${localTunnelPort}" username="${user.param}" password="${password.param}" command="mkdir ${home}/foobar" trust="true" /> <!-- upload a file to the remote server --> <scp port="${localTunnelPort}" file="test_file.txt" todir="${user.param}:${password.param}@localhost:${home}/foobar/" trust="true" /> </sequential> </sshsession> 

PaoloC一样 ,使用Maven Wagon插件 ,使用wagon-ssh扩展名,但在pom文件中configuration,并在指定阶段运行,这个例子使用SSH将war文件复制到远程服务器:

 <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>upload-to-myserver</id> <phase>deploy</phase> <goals> <goal>upload-single</goal> </goals> <configuration> <fromFile>${project.build.directory}/${project.build.finalName}.war</fromFile> <url>scp://username@myserver/path</url> </configuration> </execution> </executions> </plugin> <!-- other plugins ... --> </plugins> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> </build> 

<phase>标签是可选的。 您可以使用以下命令执行上载执行:

 mvn wagon:upload-single@upload-to-myserver