-
Notifications
You must be signed in to change notification settings - Fork 2k
/
build.gradle
151 lines (135 loc) · 5.76 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
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
apply plugin: 'com.github.hierynomus.license'
description = "H2O Application Assembly"
// Exclude unwanted dependencies
configurations {
compile.exclude module: 'junit'
compile.exclude module: 'mockito-all'
compile.exclude module: 'zookeeper'
compile.exclude module: 'javax.mail.glassfish'
compile.exclude module: 'servlet-api'
}
// Dependencies
dependencies {
compile project(":h2o-app")
compile project(":h2o-web")
compile project(":h2o-avro-parser")
compile project(":h2o-persist-s3")
compile project(":h2o-persist-hdfs")
if (project.hasProperty("doIncludeOrc") && project.doIncludeOrc == "true") {
compile project(":h2o-orc-parser")
}
compile project(":h2o-parquet-parser")
compile "org.slf4j:slf4j-log4j12:1.7.10"
}
//
// Bundle optional modules
// The process is defined by convention. There are two flags:
// - -Pwith${componentName}=true - enables component "componentName" and includes it in assembly
// - -P${componentName}Version=3.14 - overrides default component version
//
for (comp in optionalComponents) {
def compName = comp['name']
def compVersion = comp['version']
def compEnabled = comp['enabled']
def compPropName = "with${compName.capitalize()}"
def compPropVersionName = "${compName}Version"
if (!project.hasProperty(compPropVersionName)) {
project.ext.set(compPropVersionName, compVersion)
}
if (compEnabled || project.hasProperty(compPropName) && project.property(compPropName)) {
logger.lifecycle("== ${project.path}: Using optional component: ${compName}, version ${project.findProperty(compPropVersionName)}")
apply from: "$rootDir/gradle/components/${compName}.gradle"
}
}
shadowJar {
zip64 true
mergeServiceFiles()
classifier = ''
// CDH 5.3.0 provides joda-time v1.6 which is too old, shadow the library instead
if (!project.hasProperty("jacocoCoverage")) {
relocate 'org.joda.time', 'ai.h2o.org.joda.time'
}
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.SF'
exclude 'synchronize.properties'
exclude 'uploader.properties'
exclude 'test.properties'
exclude 'cockpitlite.properties'
exclude 'devpay_products.properties'
manifest {
attributes 'Main-Class': 'water.H2OApp'
}
transform(com.github.jengelman.gradle.plugins.shadow.transformers.IncludeResourceTransformer.class) {
file = file("${buildDir}/reports/license/dependency-license.xml")
resource = "META-INF/license/h2o-depenencies-licenses.xml"
}
}
artifacts {
archives shadowJar
}
//
// Support make infrastructure by copying the resulting assembly into parent
// project build directory
//
def assembly = "main.jar"
def allInOne = "h2o.jar"
task copyJar(type: Copy) {
from ("${project.buildDir}/libs"){
include assembly
}
into "${project.parent.parent.buildDir}"
rename { it.replace(assembly, allInOne) }
}
downloadLicenses {
ext.apacheTwo = license('Apache License, Version 2.0', 'http://opensource.org/licenses/Apache-2.0')
ext.bsd = license('BSD License', 'http://www.opensource.org/licenses/bsd-license.php')
licenses = [
'commons-beanutils:commons-beanutils:1.7.0': apacheTwo,
'asm:asm-parent:3.1': bsd,
'org.codehaus.jettison:jettison:1.1': apacheTwo,
'javax.servlet.jsp:jsp-api:2.1': license('CDDL + GPLv2 with classpath exception', 'https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html'),
'org.apache.zookeeper:zookeeper:3.4.6': apacheTwo
]
aliases = [
(apacheTwo) : ['The Apache Software License, Version 2.0', 'Apache 2', 'Apache License Version 2.0', 'Apache License, Version 2.0', 'Apache License 2.0', license('Apache License', 'http://www.apache.org/licenses/LICENSE-2.0')],
(bsd) : ['BSD', license('New BSD License', 'http://www.opensource.org/licenses/bsd-license.php')]
]
}
task licenseReport(dependsOn: project.tasks.getByName('downloadLicenses')) {
doLast {
def jsonLicensesFile = file("${buildDir}/reports/license/dependency-license.json")
def csvLicensesFile = file("${buildDir}/reports/license/dependency-license.csv")
def licenses = new groovy.json.JsonSlurper().parseText(jsonLicensesFile.text)
csvLicensesFile.withWriter('UTF-8') { w ->
boolean xgboostDefined = false
w.write('"Dependency","File","License Name","License URL"\n')
licenses.dependencies.each { dep ->
dep.licenses.each {
xgboostDefined |= dep.file.startsWith("xgboost4j")
boolean licenseValid = it.name != "No license found"
if (! licenseValid) {
if (dep.name == "asm:asm-parent:3.1") {
// FIXME: manual override, this doesn't work for some reason!
w.write("${dep.name},${dep.file},\"BSD License\",http://www.opensource.org/licenses/bsd-license.php\n")
} else
throw new StopExecutionException("License not found for dependency ${dep.name}. Please define dependency manually.")
}
w.write("${dep.name},${dep.file},\"${it.name}\",${it.url}\n")
}
}
if (! xgboostDefined) {
// Manually add XGBoost
logger.error('ERROR: XGBoost dependency is manually defined, please consider changing it!')
w.write("ml.dmlc:xgboost-jvm:0.7,xgboost4j-0.7.jar,\"Apache License 2.0\",http://opensource.org/licenses/Apache-2.0\n")
}
}
}
}
// Include licences
shadowJar.dependsOn(licenseReport)
// Execute always copyJar
shadowJar.finalizedBy copyJar
// Run shadowJar as par of build
jar.finalizedBy shadowJar