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

mga*_*mer 57 deployment ssh maven-2

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

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

Ric*_*ler 37

maven-deploy-plugin允许您使用scp配置部署阶段以部署到服务器.文档中有一个页面描述了如何完成它.

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

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

这个答案中,我已经描述了如何配置ftp任务,scp任务几乎完全相同,除了你可能需要添加密钥文件和密码短语属性(并明确地将任务名称从ftp更改为scp).

  • 使用`maven-deploy-plugin`的一个缺点是它总是上传一个`maven artifact`,它会上传到`groupId/artifactId/version/artifactId-version.ext`路径位置,如果你只是想要的话使用`scp`任务将文件上传到某个特定服务器位置`antrun`插件可以完成工作. (2认同)
  • @ Zero3当所有的痛苦和泪水都是"官方"时无关紧要.我在这个问题上写了一个全面的答案-/sf/answers/2972801681/ (2认同)

Pao*_*loC 18

看看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>
Run Code Online (Sandbox Code Playgroud)


Bri*_*new 15

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

  • 值得一提的是你可以使用`antrun` maven插件在maven上运行它 (2认同)

hol*_*s83 8

PaoloC相同的想法,使用带有 wagon-ssh 扩展名的Maven Wagon 插件,但在 pom 文件中配置并在指定阶段运行,此示例使用 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>
Run Code Online (Sandbox Code Playgroud)

<phase>标记是可选的。您可以使用以下命令仅运行上传执行:

mvn wagon:upload-single@upload-to-myserver
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 7

Maven不是一个通用工具,它是一个使您的构建过程可重用的工具.我建议使用嵌入式的antrun构建步骤.在此步骤中,您可以使用在build.xml中使用的常规ant语法执行任何操作.


Seb*_*anH 5

虽然这个问题并不新鲜,但我今天发现自己处于类似的情况。我的目标是在我必须通过隧道(通过另一台服务器)连接到的远程服务器上上传文件并运行命令。我设法为此建立了一个解决方案ant(再次可以从这里提到的 maven 触发)。

Antssshsession任务仅创建一个隧道,您可以将其用于其中的任务。其中的任务不会自动在远程服务器上运行,但您可以将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>
Run Code Online (Sandbox Code Playgroud)