Deploy Maven site using FTP Ant task

2019-07-22 13:25发布

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="my.name@gmail.com"
        skipFailedTransfers="true" ignoreNoncriticalErrors="true">
        <fileset>
                <include name="**/" />
        </fileset>
            </ftp>
        <ftp action="rmdir" server="nexus"
             remotedir="/pub/${project.groupId}/${project.artifactId}"
        userid="anonymous" password="my.name@gmail.com"
        skipFailedTransfers="true" ignoreNoncriticalErrors="true">
             <fileset>
            <include name="**/" />
             </fileset>
        </ftp>
        <ftp action="mkdir" server="nexus"
        remotedir="/pub/${project.groupId}/${project.artifactId}"
        userid="anonymous" password="my.name@gmail.com" 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.

1条回答
冷血范
2楼-- · 2019-07-22 13:53

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="my.name@gmail.com"
  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 {
    ...
查看更多
登录 后发表回答