Maven скопировать локальный файл на удаленный сервер, используя SSH - PullRequest
54 голосов
/ 26 мая 2009

Может ли Maven скопировать локальный файл на удаленный сервер, используя SSH?

Я хочу указать местоположение в файле конфигурации maven и копировать этот файл (или файлы) на сервер каждый раз, когда выполняется фаза развертывания.

Ответы [ 6 ]

36 голосов
/ 10 сентября 2009

Плагин maven-deploy-plugin позволяет настроить фазу развертывания для развертывания на сервере с помощью scp. В документации есть страница , где описано, как это можно сделать.

Полагаю, это заменит нормальное развертывание, а не добавит к нему, поэтому, возможно, это не то, что вам нужно

Если вам нужно выполнить развертывание в традиционном репозитории Maven, а также доставить файл на удаленный сервер, вам нужно будет использовать задачу scp, как предлагают другие ответы.

В этот ответ Я описал, как настроить задачу ftp, задача scp практически идентична, за исключением того, что вам может понадобиться добавить атрибуты keyfile и passphrase (и изменить имя задачи с ftp на scp очевидно).

16 голосов
/ 23 марта 2015

Взгляните на Плагин 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

В обоих случаях обязательно добавьте расширение SSH для Wagon в ваш pom.xml:

<extensions>
    <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>2.8</version>
    </extension>
</extensions>
15 голосов
/ 26 мая 2009

Почему бы не использовать задачу Ant SCP , которую вы можете запустить в Maven?

7 голосов
/ 26 мая 2009

Maven - это не универсальный инструмент, это инструмент для повторного использования вашего процесса сборки. Я предлагаю использовать шаг сборки antrun . На этом этапе вы можете делать все, что угодно, используя обычный синтаксис ant, который вы используете в build.xml.

4 голосов
/ 11 августа 2017

Та же идея, что и PaoloC , с использованием Maven Wagon plugin с расширением wagon-ssh, но конфигурация в pom-файле и запуск его на указанной фазе, в этих примерах копируется военный файл в удаленный сервер с 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
3 голосов
/ 14 августа 2014

Хотя этот вопрос не совсем новый, сегодня я оказался в похожей ситуации. Моя цель - загрузить файлы и выполнить команды на удаленном сервере, к которому я должен туннелировать (через другой сервер). Мне удалось найти решение для этого с помощью ant (которое снова может быть вызвано из maven, как упомянуто здесь).

Задача Ants sshsession создает только туннель , который можно использовать для выполнения задач. Задачи внутри не запускаются автоматически на удаленном сервере, но вы можете использовать задачу sshexec вместе с tunnel для достижения этой цели. Также задача 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...