Jednym z użytecznych elementów Eclipsa jest możliwość podłączenie narzędzia do projektu tzw. External Tool. Może to być np. walidator kodu, skrypt testujący lub np. synchronizacja kodu ze zdalnym serwerem na czym się skupię w tym poście.

Istnieje oczywiście taki plugin jak SFTP Plugin, który umożliwia wgrywania kodu na zdalny serwer, ale w połączeniu z Subversive jest dość niewygodny i nie jest automatyczny.

Do wrzucania kodu na zdalny serwer stworzymy sobie skrypt używający linuksowego rsync’a, wrzucający zmienione pliki na serwer po każdym Ctrl+s. Jest to rozwiązanie i szybkie, i skuteczne, a działanie proste – rsync wykrywa zmienione pliki i transferuje za nas na zdalny serwer.

Piszemy skrypt i pamiętamy o chmod u+x dla pliku.

Kodzik   
#!/bin/bash
workspace=$1
targetServer=$2
targetRootDir=$3
projectName=$4
echo "Synchronizing project ${projectName}, `date +%Y-%m-%d\ %H:%M:%S`"
echo ""
echo "Target ${targetServer}:${targetRootDir}${projectName}"
echo ""
rsync -avz --delete --filter='merge /path...ToMyLocalScripts/.rsyncfilter' ${workspace}/${projectName}/ ${targetServer}:${targetRootDir}${projectName}

Rsynca ustawiamy dodatkowo, oczywiście możemy go podkoksać wedle uznania (man page). Oprócz standardowych opcji -avz -delete dodałem także filtr na pliki .svn – zyskujemy na transferach.

Filtr jakby co dla leniwych:

Kodzik   
- .svn

Pozostaje jeszcze konfiguracja Eclipsa. Wchodzimy więc we właściwości projektu, dalej w Builders -> New -> Program i wybieramy skrypt

oraz podajemy parametry, które zostaną przekazane do skryptu rsync’a. Jest tu niestety jeden mankament – zmienna ${project_name} nie jest poprawnie ustawiana podczas np. update’u kodu z SVN’a i kończy się ostrzeżeniem, ale można podać konkretną nazwę danego projektu i będzie działać poprawnie:

Kodzik   
${workspace_loc}
remoteUser@remoteServer
/pathToTargetDir
${project_name} #lub myProject

Na zakładce Build Options zaznaczamy opcje Launch in background spowoduje to wysyłanie plików w tle z raportem w konsoli. Druga ważna opcja to During auto builds dzięki niej skrypt zostanie uruchomiony automatycznie po zapisaniu każdego pliku.