blob: 32078f8f108595090923566cfb2a7187aaa57c7d [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001apply plugin: 'maven-publish'
2apply plugin: 'java-library'
Brian Silverman8fce7482020-01-05 13:18:21 -08003apply plugin: 'jacoco'
James Kuszmaulb13e13f2023-11-22 20:44:04 -08004apply plugin: 'com.google.protobuf'
Brian Silverman8fce7482020-01-05 13:18:21 -08005
6def baseArtifactId = project.baseId
7def artifactGroupId = project.groupId
8def javaBaseName = "_GROUP_edu_wpi_first_${project.baseId}_ID_${project.baseId}-java_CLS"
9
10def outputsFolder = file("$project.buildDir/outputs")
11
12task sourcesJar(type: Jar, dependsOn: classes) {
James Kuszmaulb13e13f2023-11-22 20:44:04 -080013 archiveClassifier = 'sources'
Brian Silverman8fce7482020-01-05 13:18:21 -080014 from sourceSets.main.allSource
15}
16
17task javadocJar(type: Jar, dependsOn: javadoc) {
James Kuszmaulb13e13f2023-11-22 20:44:04 -080018 archiveClassifier = 'javadoc'
Brian Silverman8fce7482020-01-05 13:18:21 -080019 from javadoc.destinationDir
20}
21
22task outputJar(type: Jar, dependsOn: classes) {
23 archiveBaseName = javaBaseName
24 destinationDirectory = outputsFolder
25 from sourceSets.main.output
26}
27
28task outputSourcesJar(type: Jar, dependsOn: classes) {
29 archiveBaseName = javaBaseName
30 destinationDirectory = outputsFolder
James Kuszmaulb13e13f2023-11-22 20:44:04 -080031 archiveClassifier = 'sources'
Brian Silverman8fce7482020-01-05 13:18:21 -080032 from sourceSets.main.allSource
33}
34
35task outputJavadocJar(type: Jar, dependsOn: javadoc) {
36 archiveBaseName = javaBaseName
37 destinationDirectory = outputsFolder
James Kuszmaulb13e13f2023-11-22 20:44:04 -080038 archiveClassifier = 'javadoc'
Brian Silverman8fce7482020-01-05 13:18:21 -080039 from javadoc.destinationDir
40}
41
42artifacts {
43 archives sourcesJar
44 archives javadocJar
45 archives outputJar
46 archives outputSourcesJar
47 archives outputJavadocJar
48}
49
50addTaskToCopyAllOutputs(outputSourcesJar)
51addTaskToCopyAllOutputs(outputJavadocJar)
52addTaskToCopyAllOutputs(outputJar)
53
54build.dependsOn outputSourcesJar
55build.dependsOn outputJavadocJar
56build.dependsOn outputJar
57
58project(':').libraryBuild.dependsOn build
59
60publishing {
61 publications {
62
63 java(MavenPublication) {
64 artifact jar
65 artifact sourcesJar
66 artifact javadocJar
67
68 artifactId = "${baseArtifactId}-java"
69 groupId artifactGroupId
70 version wpilibVersioning.version.get()
71 }
72 }
73}
74
75test {
76 useJUnitPlatform()
77 systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
78 testLogging {
79 events "failed"
80 exceptionFormat "full"
81 }
82 finalizedBy jacocoTestReport
83}
84
James Kuszmaulb13e13f2023-11-22 20:44:04 -080085if (project.hasProperty('onlylinuxathena') || project.hasProperty('onlylinuxarm32') || project.hasProperty('onlylinuxarm64') || project.hasProperty('onlywindowsarm64')) {
Brian Silverman8fce7482020-01-05 13:18:21 -080086 test.enabled = false
87}
88
89repositories {
James Kuszmaulcf324122023-01-14 14:07:17 -080090 maven {
91 url = 'https://frcmaven.wpi.edu/artifactory/ex-mvn'
92 }
Brian Silverman8fce7482020-01-05 13:18:21 -080093 //maven.url "https://oss.sonatype.org/content/repositories/snapshots/"
94}
95
96sourceSets {
97 dev
98}
99
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800100configurations {
101 devImplementation.extendsFrom(implementation)
102}
103
Brian Silverman8fce7482020-01-05 13:18:21 -0800104tasks.withType(JavaCompile).configureEach {
Austin Schuh812d0d12021-11-04 20:16:48 -0700105 options.compilerArgs = [
106 '--release',
107 '11',
108 '-encoding',
James Kuszmaulcf324122023-01-14 14:07:17 -0800109 'UTF8',
110 "-Werror",
111 "-Xlint:all",
112 // ignore AutoCloseable warnings
113 "-Xlint:-try",
114 // ignore missing serialVersionUID warnings
115 "-Xlint:-serial",
Austin Schuh812d0d12021-11-04 20:16:48 -0700116 ]
Brian Silverman8fce7482020-01-05 13:18:21 -0800117}
118
119dependencies {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800120 testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.0'
121 testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.0'
122 testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
Brian Silverman8fce7482020-01-05 13:18:21 -0800123
124 devImplementation sourceSets.main.output
Brian Silverman8fce7482020-01-05 13:18:21 -0800125}
126
127task run(type: JavaExec) {
128 classpath = sourceSets.dev.runtimeClasspath
129
Austin Schuh812d0d12021-11-04 20:16:48 -0700130 mainClass = project.devMain
Brian Silverman8fce7482020-01-05 13:18:21 -0800131}
132
133build.dependsOn devClasses
134
135jacoco {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800136 toolVersion = "0.8.10"
Brian Silverman8fce7482020-01-05 13:18:21 -0800137}
138
139jacocoTestReport {
140 reports {
Austin Schuh812d0d12021-11-04 20:16:48 -0700141 xml.required = true
142 html.required = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800143 }
144}
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800145
146protobuf {
147 protoc {
148 artifact = 'com.google.protobuf:protoc:3.21.12'
149 }
150 plugins {
151 quickbuf {
152 artifact = 'us.hebi.quickbuf:protoc-gen-quickbuf:1.3.2'
153 }
154 }
155 generateProtoTasks {
156 all().configureEach { task ->
157 task.builtins {
158 cpp {}
159 remove java
160 }
161 task.plugins {
162 quickbuf {
163 option "gen_descriptors=true"
164 }
165 }
166 }
167 }
168}