Maven копирует локальный файл на удаленный сервер с помощью SSH


может ли Maven скопировать локальный файл на удаленный сервер с помощью SSH?

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

6 54

6 ответов:

модуль Maven-deploy-plugin позволяет настроить этап развертывания для развертывания на сервере с помощью scp. Есть страница в документация, который описывает, как это можно сделать.

Я считаю, что это заменит нормальное развертывание вместо добавления к нему, поэтому это может быть не то, что вам нужно.

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

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

посмотреть 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 для Wagon в свой pom.XML-код:

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

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

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

хотя этот вопрос не совсем новый, я оказался в подобной ситуации сегодня. Моя цель-загрузить файлы и выполнить команды на удаленном сервере, к которому я должен туннелировать (через другой сервер). Мне удалось подделать решение для этого с 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>

идея PaoloC, используя плагин Maven Wagon С расширением wagon-ssh, но конфигурация в файле 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>

The <phase> тег не является обязательным. Вы можете запустить только выполнение загрузки с помощью команды:

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