Skip to content

Commit 259ed4d

Browse files
authored
Import sources for javadoc through a dependency (#1461)
Add configurations for importing and exporting source directories Add an additionalSources configuration to add another project's source to the current project's javadoc. Add a sourceElements configuration to register all java source directories in the project under so they may be picked up by other projects.
1 parent b838ff8 commit 259ed4d

File tree

6 files changed

+73
-41
lines changed

6 files changed

+73
-41
lines changed

buildSrc/src/main/groovy/org/elasticsearch/hadoop/gradle/BuildPlugin.groovy

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ import org.gradle.api.artifacts.ProjectDependency
1717
import org.gradle.api.artifacts.ResolutionStrategy
1818
import org.gradle.api.artifacts.maven.MavenPom
1919
import org.gradle.api.artifacts.maven.MavenResolver
20+
import org.gradle.api.attributes.LibraryElements
21+
import org.gradle.api.attributes.Usage
2022
import org.gradle.api.file.CopySpec
23+
import org.gradle.api.file.FileCollection
2124
import org.gradle.api.java.archives.Manifest
2225
import org.gradle.api.plugins.JavaPlugin
2326
import org.gradle.api.plugins.MavenPlugin
2427
import org.gradle.api.plugins.MavenPluginConvention
28+
import org.gradle.api.tasks.SourceSet
2529
import org.gradle.api.tasks.SourceSetContainer
2630
import org.gradle.api.tasks.TaskProvider
2731
import org.gradle.api.tasks.Upload
@@ -84,6 +88,32 @@ class BuildPlugin implements Plugin<Project> {
8488
}
8589

8690
private static void configureConfigurations(Project project) {
91+
if (project != project.rootProject) {
92+
// Set up avenues for sharing source files between projects in order to create embedded Javadocs
93+
// Import source configuration
94+
Configuration sources = project.configurations.create("additionalSources")
95+
sources.canBeConsumed = false
96+
sources.canBeResolved = true
97+
sources.attributes {
98+
// Changing USAGE is required when working with Scala projects, otherwise the source dirs get pulled
99+
// into incremental compilation analysis.
100+
attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, 'java-source'))
101+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements, 'sources'))
102+
}
103+
104+
// Export source configuration
105+
Configuration sourceElements = project.configurations.create("sourceElements")
106+
sourceElements.canBeConsumed = true
107+
sourceElements.canBeResolved = false
108+
sourceElements.extendsFrom(sources)
109+
sourceElements.attributes {
110+
// Changing USAGE is required when working with Scala projects, otherwise the source dirs get pulled
111+
// into incremental compilation analysis.
112+
attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, 'java-source'))
113+
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements, 'sources'))
114+
}
115+
}
116+
87117
if (project.path.startsWith(":qa")) {
88118
return
89119
}
@@ -200,6 +230,15 @@ class BuildPlugin implements Plugin<Project> {
200230
project.sourceCompatibility = '1.8'
201231
project.targetCompatibility = '1.8'
202232

233+
// TODO: Remove all root project distribution logic. It should exist in a separate dist project.
234+
if (project != project.rootProject) {
235+
SourceSet mainSourceSet = project.sourceSets.main
236+
FileCollection javaSourceDirs = mainSourceSet.java.sourceDirectories
237+
javaSourceDirs.each { File srcDir ->
238+
project.getArtifacts().add('sourceElements', srcDir)
239+
}
240+
}
241+
203242
JavaCompile compileJava = project.tasks.getByName('compileJava') as JavaCompile
204243
compileJava.getOptions().setCompilerArgs(['-Xlint:unchecked', '-Xlint:options'])
205244

@@ -235,6 +274,10 @@ class BuildPlugin implements Plugin<Project> {
235274
sourcesJar.dependsOn(project.tasks.classes)
236275
sourcesJar.classifier = 'sources'
237276
sourcesJar.from(project.sourceSets.main.allSource)
277+
// TODO: Remove when root project does not handle distribution
278+
if (project != project.rootProject) {
279+
sourcesJar.from(project.configurations.additionalSources)
280+
}
238281

239282
// Configure javadoc
240283
Javadoc javadoc = project.tasks.getByName('javadoc') as Javadoc
@@ -246,6 +289,10 @@ class BuildPlugin implements Plugin<Project> {
246289
"org/elasticsearch/hadoop/util/**",
247290
"org/apache/hadoop/hive/**"
248291
]
292+
// TODO: Remove when root project does not handle distribution
293+
if (project != project.rootProject) {
294+
javadoc.source = project.files(project.configurations.additionalSources)
295+
}
249296
// Set javadoc executable to runtime Java (1.8)
250297
javadoc.executable = new File(project.ext.runtimeJavaHome, 'bin/javadoc')
251298

hive/build.gradle

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ dependencies {
3333
itestImplementation("org.apache.hive:hive-jdbc:$hiveVersion") {
3434
exclude module: "log4j-slf4j-impl"
3535
}
36+
37+
additionalSources(project(":elasticsearch-hadoop-mr"))
3638
}
3739

3840
jar {
@@ -42,12 +44,3 @@ jar {
4244
include "META-INF/services/*"
4345
}
4446
}
45-
46-
javadoc {
47-
source += project(":elasticsearch-hadoop-mr").sourceSets.main.allJava
48-
classpath += files(project(":elasticsearch-hadoop-mr").sourceSets.main.compileClasspath)
49-
}
50-
51-
sourcesJar {
52-
from project(":elasticsearch-hadoop-mr").sourceSets.main.allJava.srcDirs
53-
}

pig/build.gradle

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ dependencies {
3131

3232
itestImplementation(project(":test:shared"))
3333
itestImplementation("dk.brics.automaton:automaton:1.11-8")
34+
35+
additionalSources(project(":elasticsearch-hadoop-mr"))
3436
}
3537

3638
jar {
@@ -40,12 +42,3 @@ jar {
4042
include "META-INF/services/*"
4143
}
4244
}
43-
44-
javadoc {
45-
source += project(":elasticsearch-hadoop-mr").sourceSets.main.allJava
46-
classpath += files(project(":elasticsearch-hadoop-mr").sourceSets.main.compileClasspath)
47-
}
48-
49-
sourcesJar {
50-
from project(":elasticsearch-hadoop-mr").sourceSets.main.allJava.srcDirs
51-
}

spark/sql-13/build.gradle

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,15 @@ dependencies {
161161
testImplementation("org.apache.spark:spark-sql_${project.ext.scalaMajorVersion}:$sparkVersion") {
162162
exclude group: 'org.apache.hadoop'
163163
}
164+
165+
additionalSources(project(":elasticsearch-hadoop-mr"))
166+
}
167+
168+
// Export generated Java code from the genjavadoc compiler plugin
169+
artifacts {
170+
sourceElements(project.file("$buildDir/generated/java")) {
171+
builtBy compileScala
172+
}
164173
}
165174

166175
jar {
@@ -173,13 +182,7 @@ jar {
173182

174183
javadoc {
175184
dependsOn compileScala
176-
source += project(":elasticsearch-hadoop-mr").sourceSets.main.allJava
177185
source += "$buildDir/generated/java"
178-
classpath += files(project(":elasticsearch-hadoop-mr").sourceSets.main.compileClasspath)
179-
}
180-
181-
sourcesJar {
182-
from project(":elasticsearch-hadoop-mr").sourceSets.main.allJava.srcDirs
183186
}
184187

185188
scaladoc {
@@ -193,4 +196,4 @@ tasks.withType(ScalaCompile) {
193196
"-P:genjavadoc:out=$buildDir/generated/java".toString()
194197
]
195198
}
196-
}
199+
}

spark/sql-20/build.gradle

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,15 @@ dependencies {
156156
itestImplementation("org.apache.spark:spark-streaming_${project.ext.scalaMajorVersion}:$sparkVersion") {
157157
exclude group: 'org.apache.hadoop'
158158
}
159+
160+
additionalSources(project(":elasticsearch-hadoop-mr"))
161+
}
162+
163+
// Export generated Java code from the genjavadoc compiler plugin
164+
artifacts {
165+
sourceElements(project.file("$buildDir/generated/java")) {
166+
builtBy compileScala
167+
}
159168
}
160169

161170
jar {
@@ -168,13 +177,7 @@ jar {
168177

169178
javadoc {
170179
dependsOn compileScala
171-
source += project(":elasticsearch-hadoop-mr").sourceSets.main.allJava
172180
source += "$buildDir/generated/java"
173-
classpath += files(project(":elasticsearch-hadoop-mr").sourceSets.main.compileClasspath)
174-
}
175-
176-
sourcesJar {
177-
from project(":elasticsearch-hadoop-mr").sourceSets.main.allJava.srcDirs
178181
}
179182

180183
scaladoc {
@@ -188,4 +191,4 @@ tasks.withType(ScalaCompile) {
188191
"-P:genjavadoc:out=$buildDir/generated/java".toString()
189192
]
190193
}
191-
}
194+
}

storm/build.gradle

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ dependencies {
2727
itestImplementation(project(":test:shared"))
2828
itestImplementation("com.google.guava:guava:16.0.1")
2929
itestImplementation("com.twitter:carbonite:1.4.0")
30+
31+
additionalSources(project(":elasticsearch-hadoop-mr"))
3032
}
3133

3234
jar {
@@ -37,13 +39,4 @@ jar {
3739
}
3840
}
3941

40-
javadoc {
41-
source += project(":elasticsearch-hadoop-mr").sourceSets.main.allJava
42-
classpath += files(project(":elasticsearch-hadoop-mr").sourceSets.main.compileClasspath)
43-
}
44-
45-
sourcesJar {
46-
from project(":elasticsearch-hadoop-mr").sourceSets.main.allJava.srcDirs
47-
}
48-
4942
tasks.getByName('integrationTest').enabled = false

0 commit comments

Comments
 (0)