scp mit Maven und Ant
Ich setze mich gerade ein wenig mit Maven auseinander. Das gesetzte Ziel war eine .war Datei mittels scp auf einen Server zu kopieren.
Dazu benötigt man erst einmal das Ant-Plugin, welches ich in den <build> Teil der pom.xml integriert habe. So, dass beim Aufruf von Run As -> Maven install (ich nutze das m2eclipse Plugin) die neue .war Datei erzeugt und direkt auf den Zielserver kopiert wird.
<plugin>
<artifactid>maven-antrun-plugin</artifactid>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<scp file="..\project\target\myWar.war" todir="user@server:/home/apache-tomcat-6.0.29/webapps" password="pw"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
Allerdings weigerte sich ant beharrlich scp auszuführen, was an der fehlenden jsch Datei lag (vgl. failed to create task or type scp)
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (install) on project ScoreCards: An Ant BuildException has occured: Problem: failed to create task or type scp
Ich konnte das Problem jedoch beheben indem ich zusätzlich 2 dependencies eingebunden habe.
...
</executions>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>jsch</groupId>
<artifactId>jsch</artifactId>
<version>0.1.25</version>
</dependency>
</dependencies>
</plugin>
Danach wurde der HostKey des Zielservers nicht akzeptiert.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (install) on project ScoreCards: An Ant BuildException has occured: com.jcraft.jsch.JSchException: reject HostKey: server
Dies lies sich ganz einfach durch das Hinzufügen folgender Zeile in den scp Befehl lösen:
trust="true"
Was mich zum nächsten Problem brachte: Die Authentifizierung schlug fehl.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (install) on project ScoreCards: An Ant BuildException has occured: com.jcraft.jsch.JSchException: Auth fail
In der Regel bedeutet das zwar, dass Username und/oder Passwort falsch sind. Aber in meinem Fall lag es am Server. In der
/etc/sshd/sshd_config
musste nur PasswordAuthentication yes eingetragen werden. Nach dem Neustart des SSH-Daemon lief dann alles wie am Schnürchen. :)
Übrigens kommt es bei dessen Neustart auf das jeweilige Betriebssystem an. Hier ein paar Beispiele:
Ubuntu Linux
/etc/init.d/ssh restart
Suse linux
/etc/rc.d/sshd restart
Solaris 10
svcadm disable ssh
svcadm enable ssh
Solaris 9 und früher
/etc/init.d/sshd stop
/etc/init.d/sshd start
Fedora und RedHat Linux
/sbin/service sshd restart
Abschließend noch einmal der fertige und funktionsfähige Eintrag in der pom.xml:
<plugin>
<artifactid>maven-antrun-plugin</artifactid>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<scp file="..\project\target\myWar.war" todir="user@server:/home/apache-tomcat-6.0.29/webapps" password="pw" trusted="true"/>
</tasks>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>jsch</groupId>
<artifactId>jsch</artifactId>
<version>0.1.25</version>
</dependency>
</dependencies>
</plugin>













