Maven可以使用SSH将本地文件复制到远程服务器吗?
我希望在Maven配置文件中指定位置,并在每次执行部署阶段时将该文件(或文件)复制到服务器。
Maven可以使用SSH将本地文件复制到远程服务器吗?
我希望在Maven配置文件中指定位置,并在每次执行部署阶段时将该文件(或文件)复制到服务器。
通过简单的命令行手动尝试: 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
在这两种情况下,请务必将SSH扩展程序添加到您的pom.xml中:
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
为什么不使用Ant SCP任务,你可以在Maven中运行它?
与PaoloC的想法相同,使用带有wagon-ssh扩展的Maven Wagon插件,但在pom文件中配置并在指定阶段运行它,这个示例将war文件复制到带有SSH的远程服务器上:
<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
ant
(可以从这里提到的maven触发)解决了这个问题。sshsession
任务只创建一个隧道,您可以在其中使用任务。但是,任务内部并不会自动在远程服务器上运行,但您可以使用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>
Maven不是通用工具,它是一个使您的构建过程可重用的工具。我建议使用嵌入式antrun构建步骤。在这个步骤中,您可以使用普通的ant语法来执行任何操作,就像在build.xml中一样。
scp
任务,请参阅http://ant.apache.org/manual/Tasks/scp.html。 - Jaime Hablutzel
maven-deploy-plugin
的一个缺点是它总是上传一个maven artifact
,也就是说,它会上传到一个groupId/artifactId/version/artifactId-version.ext
路径位置。如果你只想上传一个文件到某个特定的服务器位置,那么可以使用antrun
插件和scp
任务来完成工作。 - Jaime Hablutzelupload-single
(将.war部署到Jetty)。无论如何,请接受我的点赞! - Zero3maven-deploy-plugin
用于将 构件 部署到 仓库 中。通过maven-deploy-plugin
在某些情况下可以复制文件,但这并不意味着它是正确的工具。我在上面提到的答案中已经解释了这一点(如果你愿意去读)。由于自从写这篇答案以来,我们已经有了一个适合这项任务的合适工具,因此当前的答案已经过时了。 - ᄂ ᄀ