Может ли Maven скопировать локальный файл на удаленный сервер с помощью SSH?
Я хочу указать местоположение в файле конфигурации maven и скопировать этот файл (или файлы) на сервер при каждом этапе развертывания.
Может ли Maven скопировать локальный файл на удаленный сервер с помощью SSH?
Я хочу указать местоположение в файле конфигурации maven и скопировать этот файл (или файлы) на сервер при каждом этапе развертывания.
Модуль maven-deploy-plugin позволяет настроить фазу развертывания для развертывания на сервере с помощью scp. В документации есть страница, в которой описывается, как это можно сделать.
Я верю, что это заменит обычное развертывание вместо добавления к нему, так что это может быть не то, что вам нужно.
Если вам нужно развернуть традиционный репозиторий Maven, а также доставить файл на удаленный сервер, вам нужно будет использовать задачу scp, как предлагают другие ответы.
В этом ответе Я описал, как настроить задачу ftp, задача scp почти идентична, за исключением того, что вам может потребоваться добавить атрибуты keyfile и passphrase (и измените имя задачи с ftp на scp, очевидно).
Почему бы не использовать задачу Ant SCP, которую вы можете запустить в Maven?
Посмотрите плагин Maven Wagon
Попробуйте вручную с помощью простой командной строки: mvn org.codehaus.mojo:wagon-maven-plugin:1.0:upload -Dwagon.url=scp://username:[email protected] -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>
Maven - не универсальный инструмент, это инструмент, позволяющий сделать ваш процесс сборки многоразовым. Я предлагаю использовать шаг встроенный antrun. На этом шаге вы можете делать все, используя обычный синтаксис ant, который вы использовали бы в файле build.xml.
Хотя этот вопрос не совсем новый, сегодня я оказался в подобной ситуации. Моя цель - загрузить файлы и запустить команды на удаленном сервере, к которому я должен подключиться (через другой сервер). Мне удалось создать решение для этого с помощью ant
(который снова может быть запущен из maven, как указано здесь).
Задача Ants 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 файле и запуск на указанной фазе, в этих примерах копируется военный файл на удаленный сервер с 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://[email protected]/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:[email protected]