2 id "com.gradle.build-scan" version "1.14"
8 sourceCompatibility = 1.8
9 targetCompatibility = 1.8
11 ext.manifestCommonAttrbutes = manifest {
13 "Built-By": System.getProperty("user.name"),
14 "Implementation-Vendor": "NASA Ames Research Center",
15 "Implementation-Version": "8.0"
20 termsOfServiceUrl = 'https://gradle.com/terms-of-service'
21 termsOfServiceAgree = 'yes'
36 testImplementation "junit:junit:4.12"
41 java.srcDirs = ["src/annotations"]
42 java.outputDir = file("${buildDir}/annotations")
45 java.srcDirs = ["src/main"]
46 java.outputDir = file("${buildDir}/main")
47 compileClasspath += sourceSets.annotations.output
50 java.srcDirs = ["src/examples"]
51 java.outputDir = file("${buildDir}/examples")
52 compileClasspath += sourceSets.main.output
55 java.srcDirs = ["src/classes"]
56 java.outputDir = file("${buildDir}/classes")
57 compileClasspath += sourceSets.main.output + sourceSets.annotations.output
60 java.srcDirs = ["src/peers"]
61 java.outputDir = file("${buildDir}/peers")
62 compileClasspath += sourceSets.main.output + sourceSets.annotations.output
65 java.srcDirs = ["src/tests"]
66 java.outputDir = file("${buildDir}/tests")
67 compileClasspath += sourceSets.annotations.output + sourceSets.classes.output + sourceSets.peers.output
68 runtimeClasspath += compileClasspath
72 task generateVersion {
73 group = "JPF Build Resources"
74 description = "Generates the .version file with the current revision hash"
76 def revision = "git rev-parse HEAD".execute().text
77 new File(".version").withWriter("utf-8") { writer ->
78 writer.writeLine revision
83 task generateBuildInfo {
84 group = "JPF Build Resources"
85 description = "Generates the build.properties file."
88 Properties info = new Properties()
90 def status = "git status --short".execute().text.trim()
91 def revision = "git rev-parse --short HEAD".execute().text.trim()
92 def userName = ["git", "log", "-1", "--format=%an <%ae>"].execute().text.trim()
93 def date = "git log -1 --format=%ci".execute().text.trim()
95 info.setProperty("revision", revision)
96 info.setProperty("date", date)
97 info.setProperty("author", userName)
98 info.setProperty("os.arch", System.getProperty("os.arch"))
99 info.setProperty("os.name", System.getProperty("os.name"))
100 info.setProperty("user.country", System.getProperty("user.country"))
101 info.setProperty("java.version", System.getProperty("java.version"))
103 def writer = new File("build.properties").newWriter("utf-8")
104 info.store(writer, "JPF core build info")
109 task copyResources(type: Copy) {
110 group = "JPF Build Resources"
111 description = "Copies .version and build.properties files to the build directory."
113 dependsOn generateBuildInfo
114 dependsOn generateVersion
116 from "build.properties"
117 into sourceSets.main.java.outputDir.path + "/gov/nasa/jpf"
120 into sourceSets.main.java.outputDir.path + "/gov/nasa/jpf"
125 description = "Compiles all JPF core sources."
127 // These are automatic generated tasks from the Java Gradle Plugin.
128 // Gradle is able to infer the order of the source sets
129 // due to the compileClasspath attribute
130 dependsOn compileTestJava
131 dependsOn compileExamplesJava
134 task srcDist(type: Zip) {
135 group = "JPF Distribution"
136 description = "Builds the source distribution."
138 baseName = project.name
139 version = "git rev-parse --short HEAD".execute().text.trim()
143 destinationDir = buildDir
144 includeEmptyDirs = false
147 include "build.gradle"
148 include "settings.gradle"
150 include "gradlew.bat"
151 include "gradle/**/*"
154 include "jpf.properties"
155 include "build.properties"
156 include "LICENSE-2.0.txt"
160 task dist(type: Zip) {
161 group = "JPF Distribution"
162 description = "Builds binary distribution."
164 baseName = project.name
165 version = "git rev-parse --short HEAD".execute().text.trim()
168 destinationDir = buildDir
169 includeEmptyDirs = false
172 include "jpf.properties"
173 include "build.properties"
176 include "${buildDir.name}/**/*.jar"
179 task createJpfClassesJar(type: Jar) {
180 archiveName = "jpf-classes.jar"
181 destinationDir = file("${buildDir}")
184 description = "Creates the ${archiveName} file."
187 dependsOn copyResources
189 from sourceSets.classes.java.outputDir
190 from sourceSets.annotations.java.outputDir
191 from(sourceSets.main.java.outputDir) {
192 include "gov/nasa/jpf/JPFShell.class"
193 include "gov/nasa/jpf/vm/Verify.class"
194 include "gov/nasa/jpf/util/TypeRef.class"
195 include "gov/nasa/jpf/util/test/TestJPF.class"
196 include "gov/nasa/jpf/util/test/TestMultiProcessJPF.class"
197 include "gov/nasa/jpf/util/test/TestJPFHelper.class"
201 task createJpfJar(type: Jar) {
202 archiveName = "jpf.jar"
203 destinationDir = file("${buildDir}")
206 description = "Creates the ${archiveName} file."
209 dependsOn copyResources
211 from sourceSets.main.java.outputDir
212 from sourceSets.peers.java.outputDir
213 from sourceSets.annotations.java.outputDir
214 from(sourceSets.classes.java.outputDir) {
215 include "org/junit/*.class"
219 attributes "Implementation-Title": "Java Pathfinder core system"
220 from manifestCommonAttrbutes
224 task createAnnotationsJar(type: Jar) {
225 archiveName = "jpf-annotations.jar"
226 destinationDir = file("${buildDir}")
229 description = "Creates the ${archiveName} file."
232 dependsOn copyResources
234 from sourceSets.annotations.java.outputDir
237 task createClassloaderSpecificTestsJar(type: Jar) {
238 archiveName = "classloader_specific_tests.jar"
239 destinationDir = file("${buildDir}")
242 description = "Creates the ${archiveName} file."
245 dependsOn copyResources
247 from(sourceSets.test.java.outputDir) {
248 include "classloader_specific_tests/*.class"
252 task createRunJpfJar(type: Jar) {
253 archiveName = "RunJPF.jar"
254 destinationDir = file("${buildDir}")
256 description = "Creates the ${archiveName} file."
260 dependsOn copyResources
262 from(sourceSets.main.java.outputDir) {
263 include "gov/nasa/jpf/tool/Run.class"
264 include "gov/nasa/jpf/tool/RunJPF.class"
265 include "gov/nasa/jpf/Config.class"
266 include "gov/nasa/jpf/ConfigChangeListener.class"
267 include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
268 include "gov/nasa/jpf/JPFClassLoader.class"
269 include "gov/nasa/jpf/JPFShell.class"
270 include "gov/nasa/jpf/JPFException.class"
271 include "gov/nasa/jpf/JPFConfigException.class"
272 include "gov/nasa/jpf/JPFTargetException.class"
273 include "gov/nasa/jpf/util/JPFSiteUtils.class"
274 include "gov/nasa/jpf/util/FileUtils.class"
275 include "gov/nasa/jpf/util/StringMatcher.class"
276 include "gov/nasa/jpf/util/Pair.class"
280 "Implementation-Title": "Java Pathfinder core launch system",
281 "Main-Class": "gov.nasa.jpf.tool.RunJPF"
283 from manifestCommonAttrbutes
287 task createRunTestJar(type: Jar) {
288 archiveName = "RunTest.jar"
289 destinationDir = file("${buildDir}")
291 description = "Creates the ${archiveName} file."
295 dependsOn copyResources
297 from(sourceSets.main.java.outputDir) {
298 include "gov/nasa/jpf/tool/Run.class"
299 include "gov/nasa/jpf/tool/RunTest.class"
300 include "gov/nasa/jpf/tool/RunTest\$Failed.class"
301 include "gov/nasa/jpf/Config.class"
302 include "gov/nasa/jpf/ConfigChangeListener.class"
303 include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
304 include "gov/nasa/jpf/JPFClassLoader.class"
305 include "gov/nasa/jpf/JPFException.class"
306 include "gov/nasa/jpf/JPFConfigException.class"
307 include "gov/nasa/jpf/util/JPFSiteUtils.class"
308 include "gov/nasa/jpf/util/FileUtils.class"
309 include "gov/nasa/jpf/util/StringMatcher.class"
310 include "gov/nasa/jpf/util/DevNullPrintStream.class"
314 "Implementation-Title": "Java Pathfinder test launch system",
315 "Main-Class": "gov.nasa.jpf.tool.RunTest"
317 from manifestCommonAttrbutes
323 description = "Generates all core JPF jar files."
325 dependsOn createClassloaderSpecificTestsJar
326 dependsOn createAnnotationsJar
327 dependsOn createJpfClassesJar
328 dependsOn createJpfJar
329 dependsOn createRunJpfJar
330 dependsOn createRunTestJar
334 description = "Runs core regression tests."
338 enableAssertions = true
341 maxHeapSize = "1024m"
343 include "**/*Test.class"
344 exclude "**/SplitInputStreamTest.class"
345 exclude "**/JPF_*.class"
348 events "passed", "skipped", "failed"
351 afterSuite { testDescriptor, result ->
352 if (!testDescriptor.parent) {
353 println "Test Execution: ${result.resultType}"
355 def summaryFields = ["${result.testCount} tests",
356 "${result.successfulTestCount} passed",
357 "${result.failedTestCount} failed",
358 "${result.skippedTestCount} skipped"]
360 println "Summary: " + summaryFields.join(", ")
366 group = "JPF IDE Support"
369 natures = ["org.eclipse.buildship.core.gradleprojectnature"]
372 defaultOutputDir = buildDir
374 whenMerged { classpath ->
375 classpath.entries.findAll{ entry -> entry.kind == "src" }*.every { srcNode ->
376 srcNode.output = srcNode.output.replace("bin", "${buildDir.name}")
383 defaultTasks "buildJars"