From be55c347df1074fe19aa3090bd9e4329cb5dcd46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Tue, 8 Nov 2016 12:01:25 +0100 Subject: [PATCH] Implemented validation of duplicate jar entries --- build.gradle | 1 + gradle/eclipse-project-layout.gradle | 7 ++++-- gradle/validation.gradle | 35 ++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 gradle/validation.gradle diff --git a/build.gradle b/build.gradle index 64c8ed305..4e84b0262 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ subprojects { apply from: "${rootDir}/gradle/maven-deployment.gradle" apply from: "${rootDir}/gradle/eclipse-project-layout.gradle" apply from: "${rootDir}/gradle/manifest-gen.gradle" + apply from: "${rootDir}/gradle/validation.gradle" group = 'org.eclipse.xtext' } diff --git a/gradle/eclipse-project-layout.gradle b/gradle/eclipse-project-layout.gradle index db5c40c15..df13d0f5a 100644 --- a/gradle/eclipse-project-layout.gradle +++ b/gradle/eclipse-project-layout.gradle @@ -8,10 +8,13 @@ def sourceDirs = ['src', 'xtend-gen', 'src-gen', 'emf-gen'] sourceSets { configure(isTestProject? test : main) { - java.srcDirs = sourceDirs + java { + srcDirs = sourceDirs + include '**/*.java', '**/*.xtend' + } resources { srcDirs = sourceDirs - exclude '**/*.java', '**/*.xtendbin', '**/*.xtend', '**/*._trace' + exclude '**/*.java', '**/*.xtend', '**/*.xtendbin', '**/*._trace' } } configure(isTestProject? main : test) { diff --git a/gradle/validation.gradle b/gradle/validation.gradle new file mode 100644 index 000000000..6ab900db6 --- /dev/null +++ b/gradle/validation.gradle @@ -0,0 +1,35 @@ +/* + * Validation of output artifacts to make sure they can be published. + */ + +import java.util.jar.JarFile + +def checkDuplicateEntries = { archive -> + def uniqueEntries = new HashSet() + def jarFile = new JarFile(archive) + def entries = jarFile.entries() + while (entries.hasMoreElements()) { + def entry = entries.nextElement() + if (!uniqueEntries.add(entry.name)) + throw new GradleException("Duplicate entry ${entry} in archive ${archive.name}") + } + jarFile.close() +} + +task validateJar { + dependsOn(jar) + inputs.file(jar.archivePath) + doLast { + checkDuplicateEntries(jar.archivePath) + } +} +check.dependsOn(validateJar) + +task validateSourcesJar { + dependsOn(sourcesJar) + inputs.file(sourcesJar.archivePath) + doLast { + checkDuplicateEntries(sourcesJar.archivePath) + } +} +check.dependsOn(validateSourcesJar)