-
Notifications
You must be signed in to change notification settings - Fork 94
/
build.gradle
167 lines (150 loc) · 6.18 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
apply plugin: 'java-library'
apply plugin: 'checkstyle'
apply plugin: 'eclipse'
apply plugin: 'jacoco'
group = 'uk.org.okapibarcode'
version = '0.4.7'
repositories {
mavenCentral()
}
dependencies {
implementation 'com.beust:jcommander:1.82'
testImplementation 'com.google.zxing:javase:3.5.3'
testImplementation 'org.reflections:reflections:0.10.2'
testImplementation 'com.code-intelligence:jazzer-junit:0.22.1'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
}
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
compileJava.options.release = 8
compileJava.options.compilerArgs << '-Xlint:-options' // Java 8 target is considered obsolete when building on Java 21; silence this warning
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
javadoc.options.encoding = 'UTF-8'
javadoc.options.addStringOption('Xdoclint:none', '-quiet')
base.archivesName = 'okapibarcode'
jar {
dependsOn 'check'
manifest.attributes(
'Main-Class': 'uk.org.okapibarcode.OkapiBarcode',
'Implementation-Title': 'Okapi Barcode',
'Implementation-Version': project.version
)
}
tasks.withType(AbstractArchiveTask).configureEach {
// ensure 100% byte-for-byte reproducible builds
// https://github.com/jvm-repo-rebuild/reproducible-central
// https://github.com/gradle/gradle/issues/28806
preserveFileTimestamps = false
reproducibleFileOrder = true
dirMode = 0755 // rwx r-x r-x
fileMode = 0644 // rw- r-- r--
}
checkstyle {
toolVersion = '10.14.2'
configFile = file('checkstyle.xml')
showViolations = true
}
test {
useJUnitPlatform()
// only run unit tests, not fuzz tests (even in regression mode, fuzz tests
// can take a long time to run with a large enough ".cifuzz-corpus" directory)
filter.excludeTestsMatching "*Fuzzer"
}
task fuzz(type: Test) {
useJUnitPlatform()
filter.includeTestsMatching "*Fuzzer" // only run fuzz tests, not regular unit tests
forkEvery = 1 // must run each fuzz test in a separate process, due to libfuzzer global state
environment "JAZZER_FUZZ", "1" // setting environment variable enables Jazzer's fuzzing mode
outputs.upToDateWhen { false } // always fuzz test when requested, even if no code has changed
testClassesDirs = testing.suites.test.sources.output.classesDirs
classpath = testing.suites.test.sources.runtimeClasspath
}
jacocoTestReport {
// for Codecov: enable JaCoCo XML output
reports {
xml.required = true
}
// for Codecov: exclude GUI classes from the coverage reports
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: [
'uk/org/okapibarcode/*.class',
'uk/org/okapibarcode/gui/**/*.class'
])
}))
}
// for fuzzing: include *all* available JaCoCo coverage data in the report, not just the standard unit test data
executionData { tasks.withType(Test).findAll { it.jacoco.destinationFile.exists() }*.jacoco.destinationFile }
}
wrapper {
gradleVersion = '8.5'
}
/*------------------------------------------------------------------------------------------------*/
/* CONFIGURATION FOR UPLOAD TO MAVEN CENTRAL REPO */
/* */
/* The signing credentials and Sonatype OSSRH credentials must be in the gradle.properties file. */
/* Upload to Maven Central with the command "gradlew publish". */
/* - https://docs.gradle.org/current/userguide/publishing_maven.html */
/* - http://central.sonatype.org/pages/ossrh-guide.html */
/* - http://central.sonatype.org/pages/gradle.html */
/* */
/*------------------------------------------------------------------------------------------------*/
apply plugin: 'maven-publish'
apply plugin: 'signing'
java {
withJavadocJar()
withSourcesJar()
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId = 'okapibarcode'
from components.java
pom {
name = 'Okapi Barcode'
description = 'An open-source barcode generator written entirely in Java, supporting over 50 encoding standards including all ISO standards.'
url = 'https://github.com/woo-j/OkapiBarcode'
scm {
connection = 'scm:git:git://github.com/woo-j/OkapiBarcode.git'
url = 'https://github.com/woo-j/OkapiBarcode'
}
licenses {
license {
name = 'Apache-2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'woo-j'
name = 'Robin Stuart'
}
developer {
id = 'gredler'
name = 'Daniel Gredler'
}
}
}
}
}
repositories {
maven {
url = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
credentials {
username = sonatypeUsername
password = sonatypePassword
}
}
}
}
signing {
sign publishing.publications.mavenJava
}
tasks.withType(Sign) {
// https://github.com/jvm-repo-rebuild/reproducible-central/issues/162
// reproducible builds use "publishToMavenLocal" to verify reproducibility, and need to be able to publish locally without
// signing... so we do not sign when publishing to the local Maven repo, but we *do* sign when publishing to Maven Central
onlyIf { gradle.taskGraph.hasTask(':publish') }
}