views:

705

answers:

1

Hi,

I am trying to deploy a Maven site to an FTP server. I am using the following code in my pom.xml:

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

Here I delete the previous site deployed, and creating a new directory for the site in the post-site phase, so that the deploy will have the structure it needs. The problem is that it doesn't work for the first time - when folder to delete does not exist. In the first time I must manually create the directory so it will work. after the first time it works well.

my question is how do I check the existence of the directory before trying to delete it.

Thanks, Ronen.

+2  A: 

You could do ftp mkdir first before the ftp del task is called, this would ensure the directory exists before deleting it. though of course that might fail if the directory already exists. I'm not able to test this, but according to the docs, adding ignoreNoncriticalErrors="true" might let mkdir not fail if the directory exists.

For example:

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

Update: From Ftp.java it looks like this will work:

/**
 * 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 {
    ...
Rich Seller
Thanks a lot, you were right. The "del" and the "rmdir" actions are redundant and it works now with only "mkdir" action. it just dont delete previous version just overrides it - which is something I can live with.Thanks.
rperez