Gradleで"UP-TO-DATE"となる条件を自分で定義したい

outputs.upToDateWhenを上書きします。このとき、doLastにあたるタスクがないと、何も起きないのでちゃんと書く事。(多分"<<"で追加しても良い。)

以下サンプル

特定のディレクトリにTomcatがなかったらダウンロードして配置する。(ディレクトリの有り/無しをoutputs.upToDateWhenで判定)

/*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'ryozi' at '14/05/22 23:10' with Gradle 1.12
 *
 * This generated file contains a commented-out sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at http://gradle.org/docs/1.12/userguide/tutorial_java_projects.html
 */


// Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'download-task'

buildscript {
	repositories { mavenCentral() }
	dependencies { classpath 'de.undercouch:gradle-download-task:1.0' }
}

// Environment
def catalinaHome = "/opt/tomcat";
def tomcatZipUrl = "http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-7/v7.0.53/bin/apache-tomcat-7.0.53.zip";

task removeTomcat {
	outputs.upToDateWhen {
		! new File(catalinaHome).exists()
	}
	doLast {
		new File(catalinaHome).deleteDir();
	}
}

task installTomcat {
	outputs.upToDateWhen {
		new File(catalinaHome).exists()
	}
	doLast {
		def workDir = file("build/temp-tomcat");
		def tomcatZipTemp = File.createTempFile("tomcat", ".zip");
		def catalinaHomeDir = file(catalinaHome);

		// create temporary
		tomcatZipTemp.deleteOnExit();
		workDir.mkdirs();
		workDir.deleteOnExit();

		// tomcat.zip download
		download {
			src tomcatZipUrl
			dest tomcatZipTemp
		}

		// Unzip
		copy {
			from zipTree(tomcatZipTemp)
			into workDir
		}
		
		// zip中にversion付きのディレクトリがあるので、それをリネームする
		def tomcatZipInRootDir = workDir.listFiles()[0]
		tomcatZipInRootDir.renameTo(catalinaHome);
	}
}

downloadプラグインhttps://github.com/michel-kraemer/gradle-download-task から拝借。