2009-08-10 11 views
2

Ich versuche, eine Maven-Site auf einem FTP-Server bereitzustellen. Ich verwende den folgenden Code in meinem pom.xml:Bereitstellen der Maven-Site mit der FTP-Ant-Task

<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> 

Hier habe ich den vorherigen Standort bereitgestellt löschen und ein neues Verzeichnis für den Standort in der Post-Ort-Phase zu schaffen, so dass der deploy die Struktur hat es braucht. Das Problem ist, dass es nicht zum ersten Mal funktioniert - wenn der zu löschende Ordner nicht existiert. Beim ersten Mal muss ich das Verzeichnis manuell erstellen, damit es funktioniert. nach dem ersten Mal funktioniert es gut.

meine Frage ist, wie überprüfe ich die Existenz des Verzeichnisses vor dem Versuch, es zu löschen.

Danke, Ronen.

Antwort

2

könnten Sie tun ftp mkdir bevor die ftp del Task aufgerufen wird, würde dies das Verzeichnis vor dem Löschen vorhanden gewährleisten. Das kann natürlich fehlschlagen, wenn das Verzeichnis bereits existiert. Ich bin nicht in der Lage, dies zu testen, aber nach der docs, Hinzufügen ignoreNoncriticalErrors = "true" möglicherweise mkdir nicht fehlschlagen, wenn das Verzeichnis existiert.

Zum Beispiel:

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

Update: Von Ftp.java sieht es wie folgt funktioniert:

/** 
* 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

Vielen Dank, du hast recht. Die Aktionen "del" und "rmdir" sind redundant und funktionieren jetzt nur mit "mkdir" -Aktion. Es löscht einfach nicht die vorherige Version, sondern überschreibt sie einfach - womit ich leben kann. Danke. – rperez

Verwandte Themen