MavenはSSHを使用してローカルファイルをリモートサーバーにコピーできますか?
Maven構成ファイルで場所を指定し、展開フェーズが実行されるたびにそのファイルをサーバーにコピーします。
Maven-deploy-pluginを使用すると、scpを使用してサーバーにデプロイするデプロイフェーズを構成できます。 documentation には、その方法を説明するページがあります。
これにより、通常の展開に追加するのではなく置き換えられるため、目的の展開にならない場合があります。
ファイルをリモートサーバーに配信するだけでなく、従来のMavenリポジトリにデプロイする必要がある場合は、他の回答が示すようにscpタスクを使用する必要があります。
この答え ftpタスクの設定方法を説明しましたが、キーファイルとパスフレーズの属性を追加する必要がある場合を除き、scpタスクはほとんど同じです(タスク名をftpからscpに変更するのは明らかです) 。
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>
Maven内で実行できるAnt [〜#〜] scp [〜#〜] タスクを使用しないのはなぜですか?
Mavenは汎用ツールではなく、ビルドプロセスを再利用可能にするツールです。 embedded antrun ビルドステップを使用することをお勧めします。このステップでは、build.xmlで使用する通常のant構文を使用して何でもできます。
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>
<phase>
タグはオプションです。次のコマンドを使用して、アップロード実行のみを実行できます。
mvn wagon:upload-single@upload-to-myserver
この質問はまったく新しいものではありませんが、今日も同様の状況に陥っています。私の目標は、(別のサーバーを介して)トンネルする必要があるリモートサーバーでファイルをアップロードし、コマンドを実行することです。私はant
(ここで述べたように再びmavenからトリガーすることができます)を使用して、そのためのソリューションを作成しました。
Ant 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>