All Downloads are FREE. Search and download functionalities are using the official Maven repository.

le.java-convention-gradle-plugin.0.1.0.source-code.se.bjurr.gradle-convention.gradle Maven / Gradle / Ivy

There is a newer version: 0.4.1
Show newest version
def getGivenConfigJavaConventions() {
	def givenConfig = [
		// ---- default config ----
		// mainClass: se.bjurr.violations.main.Main
		mainClass: project.getProperties().getOrDefault("mainClass", ""),
		sourceCompatibility: project.getProperties().getOrDefault("sourceCompatibility", "17"),
		targetCompatibility: project.getProperties().getOrDefault("targetCompatibility", "17"),
		maxViolations: project.getProperties().getOrDefault("maxViolations", "0"),
		formattingExcludedPatterns: project.getProperties().getOrDefault("formattingExcludedPatterns", "**/gen/**,**/generated/**"),
		generatedSourceFolders: project.getProperties().getOrDefault("generatedSourceFolders", "src/gen/java,src/generated/java"),
		extraTestSourceFolders: project.getProperties().getOrDefault("extraTestSourceFolders", "src/test/generated"),
		jarResourcesFolder: project.getProperties().getOrDefault("jarResourcesFolder", "src/jar/resources"),
		useViolations: project.getProperties().getOrDefault("useViolations", "true") == true,
		// ---- default config ----
	]
	return givenConfig
}

def getEffectiveJavaConventions() {
	def givenConfig = getGivenConfigJavaConventions()
	return givenConfig + [
		formattingExcludedPatterns: givenConfig.formattingExcludedPatterns.tokenize(','),
		generatedSourceFolders: givenConfig.generatedSourceFolders.tokenize(','),
		extraTestSourceFolders: givenConfig.extraTestSourceFolders.tokenize(','),
	]
}

logger.info("Java Conventions: Given config: ${getGivenConfigJavaConventions()}")
logger.info("Java Conventions: Effective config: ${getEffectiveJavaConventions()}")


if (getEffectiveJavaConventions().useViolations) {
	project.plugins.apply "se.bjurr.violations.violations-gradle-plugin"
}
project.plugins.apply "com.github.spotbugs"
project.plugins.apply "pmd"
project.plugins.apply 'java-library'
project.plugins.apply 'eclipse'
project.plugins.apply "com.diffplug.spotless"
project.plugins.apply 'groovy'


repositories {
	mavenLocal()
	mavenCentral()
}


try {
	se.bjurr.violations.lib.util.Utils.updateReadmeWithReporters()
	logger.info("Updated README with list of reporters")
} catch (e) {
	logger.info("Not updating README with list of reporters: "+e.getMessage())
}

sourceCompatibility = getEffectiveJavaConventions().sourceCompatibility
targetCompatibility = getEffectiveJavaConventions().targetCompatibility

getEffectiveJavaConventions().generatedSourceFolders.each {
	addSourceFolderIfExists(it)
}

getEffectiveJavaConventions().extraTestSourceFolders.each {
	addTestSourceFolderIfExists(it)
}

test {
	if (System.getProperty('DEBUG', 'false') == 'true') {
		jvmArgs '-Xdebug',
				'-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9009',
				'-parameters'
	}
}

allprojects {
	tasks.withType(Javadoc) {
		options.addStringOption('Xdoclint:none', '-quiet')
	}
}

eclipse {
	classpath {
		downloadSources = true
		downloadJavadoc = true
	}
}

java {
	withSourcesJar()
	withJavadocJar()
}

if (getEffectiveJavaConventions().mainClass != '') {
	jar {
		manifest {
			attributes 'Main-Class': getEffectiveJavaConventions().mainClass
		}
		if (new File(getEffectiveJavaConventions().jarResourcesFolder).exists()) {
			from getEffectiveJavaConventions().jarResourcesFolder
		}
	}
}

dependencies {
	spotbugs 'com.github.spotbugs:spotbugs:4.8.3'
	spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.0'
	compileOnly "com.github.spotbugs:spotbugs-annotations:${spotbugs.toolVersion.get()}"
}

assemble.doLast {
	copyIfFound("spotbugs-exclude.xml")
	copyIfFound("pmd.xml")
}

tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
	enabled = false
}

spotbugsMain {
	enabled = true
	ignoreFailures = true
	effort = com.github.spotbugs.snom.Effort.MAX
	showProgress = true
	showStackTraces = false
	excludeFilter = new File("$buildDir/spotbugs-exclude.xml")
	reportsDir = new File("$buildDir/reports/spotbugs/")
	reports {
		xml {
			enabled true
		}
	}
}

pmd {
	sourceSets = [sourceSets.main]
	toolVersion = '6.55.0'
	ruleSets = [] // Gradle has some defaults that needs to be cleared
	ruleSetFiles = files("$buildDir/pmd.xml")
}

pmdMain {
	source = "src/main/java"
	ignoreFailures = true
	reports {
		xml.required = true
		html.required = true
	}
}

if (getEffectiveJavaConventions().useViolations) {
	task violations(type: se.bjurr.violations.gradle.plugin.ViolationsTask) {
		minSeverity = 'INFO'
		detailLevel = 'VERBOSE' // PER_FILE_COMPACT, COMPACT or VERBOSE
		maxViolations = getEffectiveJavaConventions().maxViolations
		printViolations = true

		// Many more formats available, see: https://github.com/tomasbjerre/violations-lib
		violations = [
			[
				"FINDBUGS",
				".",
				".*/build/reports/findbugs/.*\\.xml\$",
				"Findbugs"
			],
			[
				"FINDBUGS",
				".",
				".*/build/reports/spotbugs/.*\\.xml\$",
				"Spotbugs"
			],
			[
				"PMD",
				".",
				".*/build/reports/pmd/.*\\.xml\$",
				"Pmd"
			]
		]
	}

	check.finalizedBy violations
}

processResources.dependsOn spotlessApply

spotless {
	java {
		target '**/*.java'
		googleJavaFormat()
		targetExclude getEffectiveJavaConventions().formattingExcludedPatterns
	}
	groovyGradle {
		target '*.gradle', '**/*.gradle'
		greclipse()
	}
	json {
		target '*.json', '**/*.json'
		gson()
				.indentWithSpaces(2)
				.version('2.8.1')
	}
}

def findResource(String name, classLoader = project.buildscript.classLoader) {
	URL resource = classLoader.getResource(name)
	if (resource == null) {
		logger.lifecycle("Cannot find resource \"${name}\"")
		return null;
	}
	return resource
}

def copyResourceToFile(URL resource, String copyTo, classLoader = project.buildscript.classLoader) {
	logger.lifecycle("Copying ${resource} to ${copyTo}")
	def content = resource.text
	def parentFile = new File(copyTo).getParentFile()
	if (parentFile != null) {
		parentFile.mkdirs()
	}
	FileWriter fw = new FileWriter(copyTo)
	BufferedWriter bw = new BufferedWriter(fw)
	bw.write(content)
	bw.close()
}

def copyIfFound(String name, String target=null, classLoader = project.buildscript.classLoader) {
	URL resource = findResource(name, classLoader)
	if (resource != null) {
		logger.lifecycle("Found resource ${name} as ${resource}")
		def newFilename = target == null ? "$buildDir/$name" : target
		copyResourceToFile(resource, newFilename)
		return new File(newFilename)
	}
}

def addSourceFolderIfExists(String folder) {
	if (new File(folder).exists()) {
		logger.lifecycle("Detected ${folder}, adding it as source folder")
		sourceSets.main.java.srcDirs += [folder]
	}
}

def addTestSourceFolderIfExists(String folder) {
	if (new File(folder).exists()) {
		logger.lifecycle("Detected ${folder}, adding it as test source folder")
		sourceSets.test.java.srcDirs += [folder]
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy