blob: 48a506293b097e348c11eb64bef1fa879dd41a19 [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 {
Maxwell Henderson80bec322024-01-09 15:48:44 -0800120 testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
121 testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
Brian Silverman8fce7482020-01-05 13:18:21 -0800122
123 devImplementation sourceSets.main.output
Brian Silverman8fce7482020-01-05 13:18:21 -0800124}
125
126task run(type: JavaExec) {
127 classpath = sourceSets.dev.runtimeClasspath
128
Austin Schuh812d0d12021-11-04 20:16:48 -0700129 mainClass = project.devMain
Brian Silverman8fce7482020-01-05 13:18:21 -0800130}
131
132build.dependsOn devClasses
133
134jacoco {
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800135 toolVersion = "0.8.10"
Brian Silverman8fce7482020-01-05 13:18:21 -0800136}
137
138jacocoTestReport {
139 reports {
Austin Schuh812d0d12021-11-04 20:16:48 -0700140 xml.required = true
141 html.required = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800142 }
143}
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800144
145protobuf {
146 protoc {
147 artifact = 'com.google.protobuf:protoc:3.21.12'
148 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800149 generateProtoTasks {
150 all().configureEach { task ->
151 task.builtins {
152 cpp {}
153 remove java
154 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800155 }
156 }
157}