2009-08-10 7 views
2

Je tente de déployer un site Maven sur un serveur FTP. J'utilise le code suivant dans mon pom.xml:Déploiement du site Maven à l'aide de la tâche FTP Ant

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
<executions> 
    <execution> 
    <id>ftp</id> 
    <phase>post-site</phase> 
    <configuration> 
     <tasks> 
      <ftp action="del" server="nexus" 
     remotedir="/pub/${project.groupId}/${project.artifactId}" 
     userid="anonymous" password="[email protected]" 
     skipFailedTransfers="true" ignoreNoncriticalErrors="true"> 
     <fileset> 
       <include name="**/" /> 
     </fileset> 
      </ftp> 
     <ftp action="rmdir" server="nexus" 
      remotedir="/pub/${project.groupId}/${project.artifactId}" 
     userid="anonymous" password="[email protected]" 
     skipFailedTransfers="true" ignoreNoncriticalErrors="true"> 
      <fileset> 
      <include name="**/" /> 
      </fileset> 
     </ftp> 
     <ftp action="mkdir" server="nexus" 
     remotedir="/pub/${project.groupId}/${project.artifactId}" 
     userid="anonymous" password="[email protected]" depends="yes" 
     verbose="no" chmod="777"> 
     </ftp> 
    </tasks> 
    </configuration> 
    <goals> 
    <goal>run</goal> 
    </goals> 
     </execution> 
</executions> 
</plugin> 

Ici, je supprimer le site précédent déployé, et la création d'un nouveau répertoire pour le site dans la phase post-site, de sorte que la Déployez aura la structure il faut. Le problème est que cela ne fonctionne pas pour la première fois - lorsque le dossier à supprimer n'existe pas. Dans la première fois, je dois créer manuellement le répertoire pour que cela fonctionne. après la première fois que cela fonctionne bien.

ma question est comment puis-je vérifier l'existence du répertoire avant d'essayer de le supprimer.

Merci, Ronen.

Répondre

2

Vous pouvez faire ftp mkdir avant de la ftp del tâche est appelée, cela garantirait le répertoire existe avant de le supprimer. Bien sûr, cela pourrait échouer si le répertoire existe déjà. Je ne suis pas en mesure de tester cela, mais selon le docs, en ajoutant ignoreNoncriticalErrors = "true" peut laisser mkdir pas échouer si le répertoire existe.

Par exemple:

<ftp action="mkdir" 
    server="nexus" 
    userid="anonymous" 
    password="[email protected]" 
    remotedir="/pub/${project.groupId}/${project.artifactId}" 
    ignoreNoncriticalErrors="true"/> 

Mise à jour: De Ftp.java il semble que cela va fonctionner:

/** 
* Create the specified directory on the remote host. 
* 
* @param ftp The FTP client connection 
* @param dir The directory to create (format must be correct for host 
*  type) 
* @throws IOException in unknown circumstances 
* @throws BuildException if ignoreNoncriticalErrors has not been set to true 
*   and a directory could not be created, for instance because it was 
*   already existing. Precisely, the codes 521, 550 and 553 will trigger 
*   a BuildException 
*/ 
protected void makeRemoteDir(FTPClient ftp, String dir) 
    throws IOException, BuildException { 
    ... 
+0

Merci beaucoup, vous aviez raison. Les actions "del" et "rmdir" sont redondantes et cela fonctionne maintenant avec seulement l'action "mkdir". il ne suffit pas de supprimer la version précédente, il suffit de la contourner - ce qui est quelque chose que je peux vivre avec. Merci. – rperez