Newer
Older
marking / build.gradle
plugins {
	id "application";
}

def defaultMainClassName = "Main";

application {
	mainClass = project.hasProperty("mainClass") ? project.getProperty("mainClass") : defaultMainClassName;
}

java {
	sourceCompatibility = "17";
	targetCompatibility = "17";
}

repositories {

	mavenCentral()

	// since the Jasper devs keep using their own custom builds of ancient
	// versions of other projects we need to add a repository for their
	// "special" versions.
	maven {
		url "https://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/"
	}
}

dependencies {
	implementation group: "com.h2database", name: "h2", version: "2.2.224";
	implementation group: "net.sourceforge.dynamicreports", name: "dynamicreports-core", version: "6.12.1";
	implementation group: "org.simplejavamail", name: "simple-java-mail", version: "8.1.3";
	implementation group: "com.formdev", name: "flatlaf", version: "3.4";
	implementation group: "javax.xml.bind", name: "jaxb-api", version: "2.3.1";
	implementation group: "org.slf4j", name: "slf4j-api", version: "2.0.7";
	implementation group: "ch.qos.logback", name: "logback-classic", version: "1.4.11";
	implementation group: "io.github.resilience4j", name: "resilience4j-retry", version: "2.1.0";
	implementation group: "io.github.resilience4j", name: "resilience4j-circuitbreaker", version: "2.1.0";

	testImplementation group: 'com.icegreen', name: 'greenmail', version: '2.0.0'
}

project.configurations.implementation.setCanBeResolved(true)

jar {
	duplicatesStrategy(DuplicatesStrategy.EXCLUDE)

	manifest {
		attributes (
				"Main-Class": defaultMainClassName,
				"Class-Path":  configurations.implementation.collect { "libs/" + it.name }.join(" ")
		)
	}
}

/* convenience tasks for working with a project */

tasks.register("copyDependencies", Copy) {
	group = "Project";
	description = "Copy all dependencies into a 'libs' folder in the root of the project.";

	duplicatesStrategy = DuplicatesStrategy.EXCLUDE

	from configurations.implementation
	into 'libs/'
}

tasks.register("createMissingSourceDirs") {
	group = "Project";
	description = "Create all of the missing source directories for this project.";
	doFirst {
		sourceSets.each { def sourceRoot ->
			sourceRoot.allSource.srcDirTrees.each { def sourceDir ->
				if(!sourceDir.dir.exists()) {
					println "Creating ${sourceDir}";
					mkdir sourceDir.dir;
				}
			}
		}
	}
}

tasks.register("deleteEmptySourceDirs") {
	group = "Project";
	description = "Delete empty source directories.";
	doFirst {
		sourceSets.each { def sourceRoot ->
			sourceRoot.allSource.srcDirTrees.each { def sourceDir ->
				if(sourceDir.dir.exists() && sourceDir.dir.isDirectory() && sourceDir.dir.list().length == 0) {
					println "Removing empty ${sourceDir}";
					sourceDir.dir.delete();
				}
			}
		}
	}
}

tasks.register("openProjectDir") {
	group = "Project";
	description = "Open the project directory in the system file manager.";
	doFirst {
		println("Opening: " + file(projectDir));
		java.awt.Desktop.getDesktop().open(file(projectDir));
	}
}

tasks.register("openBuildDir") {
	group = "Project";
	description = "Open the project build directory in the system file manager.";
	doFirst {
		println("Opening: " + file(buildDir));
		java.awt.Desktop.getDesktop().open(file(buildDir));
	}
}

tasks.register("createGitIgnore") {
	group = "Project";
	description = "Create the project's .gitignore file.";

	def gitIgnored="""
		.gradle/
		.nb-gradle/
		.settings/
		nbproject/
		build/
		bin/
		dist/
		tmp/
		.classpath
		.project
		*.zip
		*.tgz
		*.tar.gz
		*.class
		*.jar
		.DS_Store
		!gradle-wrapper.jar
		""";

	doLast {
		def file = new File(projectDir, ".gitignore");
		if ( !file.exists() ) {
			println("Creating .gitignore");

			gitIgnored.lines().each { f ->
				if(!f.trim().isBlank()) {
					file.append(f.trim()+"\n");
				}
			}

		} else {
			println(".gitignore already exists");
		}
	}
}