-
Notifications
You must be signed in to change notification settings - Fork 1
/
settings.gradle
127 lines (113 loc) · 3.62 KB
/
settings.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
/*
* Master Gradle initialization script
*
* Depends on bnd_* values from gradle.properties.
*/
import aQute.bnd.build.Workspace
/* Add bnd as a script dependency */
buildscript {
dependencies {
def bndURI = rootDir.toURI().resolve(bnd_jar)
if (bndURI.scheme != 'file') {
/* If not a local file, copy to a local file in cnf/cache */
def cnfCache = mkdir("${rootDir}/${bnd_cnf}/cache")
def bndJarFile = new File(cnfCache, 'biz.aQute.bnd.gradle.jar')
if (!bndJarFile.exists()) {
println "Downloading ${bndURI} to ${bndJarFile} ..."
bndURI.toURL().withInputStream { is ->
bndJarFile.withOutputStream { os ->
def bos = new BufferedOutputStream( os )
bos << is
}
}
}
bndURI = bndJarFile.toURI()
}
classpath files(bndURI)
/* After the rootProject is created, pass URI to projects */
gradle.rootProject { rootProject ->
rootProject.ext.bndURI = bndURI
}
}
}
/* Initialize the bnd workspace */
def workspace = Workspace.getWorkspace(rootDir, bnd_cnf)
if (workspace == null) {
throw new GradleException("Unable to load workspace ${rootDir}/${bnd_cnf}")
}
/* Add cnf project to the graph */
include bnd_cnf
/* Start with the declared build project name */
def defaultProjectName = bnd_build
/* If in a subproject, use the subproject name */
for (def currentDir = startParameter.currentDir; currentDir != rootDir; currentDir = currentDir.parentFile) {
defaultProjectName = currentDir.name
}
/* Build a set of project names we need to include from the specified tasks */
def projectNames = startParameter.taskNames.collect { taskName ->
def elements = taskName.split(':')
switch (elements.length) {
case 1:
return defaultProjectName
case 2:
return elements[0].empty ? bnd_build : elements[0]
default:
return elements[0].empty ? elements[1] : elements[0]
}
}.toSet()
/* Include the default project name if in a subproject or no tasks specified */
if ((startParameter.currentDir != rootDir) || projectNames.empty) {
projectNames += defaultProjectName
}
/* If bnd_build used but declared empty, add all non-private folders of rootDir */
if (projectNames.remove('')) {
rootDir.eachDir {
def projectName = it.name
if (!projectName.startsWith('.')) {
projectNames += projectName
}
}
}
/* Add each project and its dependencies to the graph */
projectNames.each { projectName ->
include projectName
def project = getBndProject(workspace, projectName)
project?.dependson.each {
include it.name
}
}
/* Get the bnd project for the specified project name */
def getBndProject(Workspace workspace, String projectName) {
def project = workspace.getProject(projectName)
if (project == null) {
return null
}
project.prepare()
if (project.isValid()) {
return project
}
project.getInfo(workspace, "${rootDir} :")
def errorCount = 0
project.warnings.each {
println "Warning: ${it}"
}
project.errors.each {
println "Error : ${it}"
errorCount++
}
if (!project.isOk()) {
def str = 'even though no errors were reported'
if (errorCount == 1) {
str = 'one error was reported'
} else if (errorCount > 1) {
str = "${errorCount} errors were reported"
}
throw new GradleException("Project ${rootDir}/${projectName} is invalid, ${str}")
}
throw new GradleException("Project ${rootDir}/${projectName} is not a valid bnd project")
}
/* After the rootProject is created, set up some properties. */
gradle.rootProject { rootProject ->
rootProject.ext.bndWorkspace = workspace
rootProject.ext.cnf = rootProject.project(bnd_cnf)
}