Skip to content

Commit efd7988

Browse files
authored
Allow build to directly run under JDK 9 (#25859)
With Gradle 4.1 and newer JDK versions, we can finally invoke Gradle directly using a JDK9 JAVA_HOME without requiring a JDK8 to "bootstrap" the build. As the thirdPartyAudit task runs within the JVM that Gradle runs in, it needs to be adapted now to be JDK9 aware. This commit also changes the `JavaCompile` tasks to only fork if necessary (i.e. when Gradle's JVM and JAVA_HOME's JVM differ).
1 parent 3e568f5 commit efd7988

File tree

7 files changed

+271
-213
lines changed

7 files changed

+271
-213
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -408,11 +408,13 @@ class BuildPlugin implements Plugin<Project> {
408408
static void configureCompile(Project project) {
409409
project.ext.compactProfile = 'compact3'
410410
project.afterEvaluate {
411-
// fail on all javac warnings
412411
project.tasks.withType(JavaCompile) {
413-
options.fork = true
414-
options.forkOptions.executable = new File(project.javaHome, 'bin/javac')
415-
options.forkOptions.memoryMaximumSize = "1g"
412+
File gradleJavaHome = Jvm.current().javaHome
413+
if (new File(project.javaHome).canonicalPath != gradleJavaHome.canonicalPath) {
414+
options.fork = true
415+
options.forkOptions.executable = new File(project.javaHome, 'bin/javac')
416+
options.forkOptions.memoryMaximumSize = "1g"
417+
}
416418
if (project.targetCompatibility >= JavaVersion.VERSION_1_8) {
417419
// compile with compact 3 profile by default
418420
// NOTE: this is just a compile time check: does not replace testing with a compact3 JRE
@@ -426,6 +428,7 @@ class BuildPlugin implements Plugin<Project> {
426428
* -serial because we don't use java serialization.
427429
*/
428430
// don't even think about passing args with -J-xxx, oracle will ask you to submit a bug report :)
431+
// fail on all javac warnings
429432
options.compilerArgs << '-Werror' << '-Xlint:all,-path,-serial,-options,-deprecation' << '-Xdoclint:all' << '-Xdoclint:-missing'
430433

431434
// either disable annotation processor completely (default) or allow to enable them if an annotation processor is explicitly defined
@@ -440,9 +443,12 @@ class BuildPlugin implements Plugin<Project> {
440443
// hack until gradle supports java 9's new "--release" arg
441444
assert minimumJava == JavaVersion.VERSION_1_8
442445
options.compilerArgs << '--release' << '8'
443-
doFirst{
444-
sourceCompatibility = null
445-
targetCompatibility = null
446+
if (GradleVersion.current().getBaseVersion() < GradleVersion.version("4.1")) {
447+
// this hack is not needed anymore since Gradle 4.1, see https://github.com/gradle/gradle/pull/2474
448+
doFirst {
449+
sourceCompatibility = null
450+
targetCompatibility = null
451+
}
446452
}
447453
}
448454
}

core/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,10 @@ thirdPartyAudit.excludes = [
258258
'org.noggit.JSONParser',
259259
]
260260

261+
if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
262+
thirdPartyAudit.excludes += ['javax.xml.bind.DatatypeConverter']
263+
}
264+
261265
dependencyLicenses {
262266
mapping from: /lucene-.*/, to: 'lucene'
263267
mapping from: /jackson-.*/, to: 'jackson'

plugins/discovery-azure-classic/build.gradle

Lines changed: 119 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -125,107 +125,123 @@ thirdPartyAudit.excludes = [
125125
'org.osgi.framework.SynchronousBundleListener',
126126
'com.sun.xml.fastinfoset.stax.StAXDocumentParser',
127127
'com.sun.xml.fastinfoset.stax.StAXDocumentSerializer',
128-
129-
// jarhell with jdk (intentionally, because jaxb was removed from default modules in java 9)
130-
'javax.xml.bind.Binder',
131-
'javax.xml.bind.ContextFinder$1',
132-
'javax.xml.bind.ContextFinder',
133-
'javax.xml.bind.DataBindingException',
134-
'javax.xml.bind.DatatypeConverter',
135-
'javax.xml.bind.DatatypeConverterImpl$CalendarFormatter',
136-
'javax.xml.bind.DatatypeConverterImpl',
137-
'javax.xml.bind.DatatypeConverterInterface',
138-
'javax.xml.bind.Element',
139-
'javax.xml.bind.GetPropertyAction',
140-
'javax.xml.bind.JAXB$Cache',
141-
'javax.xml.bind.JAXB',
142-
'javax.xml.bind.JAXBContext',
143-
'javax.xml.bind.JAXBElement$GlobalScope',
144-
'javax.xml.bind.JAXBElement',
145-
'javax.xml.bind.JAXBException',
146-
'javax.xml.bind.JAXBIntrospector',
147-
'javax.xml.bind.JAXBPermission',
148-
'javax.xml.bind.MarshalException',
149-
'javax.xml.bind.Marshaller$Listener',
150-
'javax.xml.bind.Marshaller',
151-
'javax.xml.bind.Messages',
152-
'javax.xml.bind.NotIdentifiableEvent',
153-
'javax.xml.bind.ParseConversionEvent',
154-
'javax.xml.bind.PrintConversionEvent',
155-
'javax.xml.bind.PropertyException',
156-
'javax.xml.bind.SchemaOutputResolver',
157-
'javax.xml.bind.TypeConstraintException',
158-
'javax.xml.bind.UnmarshalException',
159-
'javax.xml.bind.Unmarshaller$Listener',
160-
'javax.xml.bind.Unmarshaller',
161-
'javax.xml.bind.UnmarshallerHandler',
162-
'javax.xml.bind.ValidationEvent',
163-
'javax.xml.bind.ValidationEventHandler',
164-
'javax.xml.bind.ValidationEventLocator',
165-
'javax.xml.bind.ValidationException',
166-
'javax.xml.bind.Validator',
167-
'javax.xml.bind.WhiteSpaceProcessor',
168-
'javax.xml.bind.annotation.DomHandler',
169-
'javax.xml.bind.annotation.W3CDomHandler',
170-
'javax.xml.bind.annotation.XmlAccessOrder',
171-
'javax.xml.bind.annotation.XmlAccessType',
172-
'javax.xml.bind.annotation.XmlAccessorOrder',
173-
'javax.xml.bind.annotation.XmlAccessorType',
174-
'javax.xml.bind.annotation.XmlAnyAttribute',
175-
'javax.xml.bind.annotation.XmlAnyElement',
176-
'javax.xml.bind.annotation.XmlAttachmentRef',
177-
'javax.xml.bind.annotation.XmlAttribute',
178-
'javax.xml.bind.annotation.XmlElement$DEFAULT',
179-
'javax.xml.bind.annotation.XmlElement',
180-
'javax.xml.bind.annotation.XmlElementDecl$GLOBAL',
181-
'javax.xml.bind.annotation.XmlElementDecl',
182-
'javax.xml.bind.annotation.XmlElementRef$DEFAULT',
183-
'javax.xml.bind.annotation.XmlElementRef',
184-
'javax.xml.bind.annotation.XmlElementRefs',
185-
'javax.xml.bind.annotation.XmlElementWrapper',
186-
'javax.xml.bind.annotation.XmlElements',
187-
'javax.xml.bind.annotation.XmlEnum',
188-
'javax.xml.bind.annotation.XmlEnumValue',
189-
'javax.xml.bind.annotation.XmlID',
190-
'javax.xml.bind.annotation.XmlIDREF',
191-
'javax.xml.bind.annotation.XmlInlineBinaryData',
192-
'javax.xml.bind.annotation.XmlList',
193-
'javax.xml.bind.annotation.XmlMimeType',
194-
'javax.xml.bind.annotation.XmlMixed',
195-
'javax.xml.bind.annotation.XmlNs',
196-
'javax.xml.bind.annotation.XmlNsForm',
197-
'javax.xml.bind.annotation.XmlRegistry',
198-
'javax.xml.bind.annotation.XmlRootElement',
199-
'javax.xml.bind.annotation.XmlSchema',
200-
'javax.xml.bind.annotation.XmlSchemaType$DEFAULT',
201-
'javax.xml.bind.annotation.XmlSchemaType',
202-
'javax.xml.bind.annotation.XmlSchemaTypes',
203-
'javax.xml.bind.annotation.XmlSeeAlso',
204-
'javax.xml.bind.annotation.XmlTransient',
205-
'javax.xml.bind.annotation.XmlType$DEFAULT',
206-
'javax.xml.bind.annotation.XmlType',
207-
'javax.xml.bind.annotation.XmlValue',
208-
'javax.xml.bind.annotation.adapters.CollapsedStringAdapter',
209-
'javax.xml.bind.annotation.adapters.HexBinaryAdapter',
210-
'javax.xml.bind.annotation.adapters.NormalizedStringAdapter',
211-
'javax.xml.bind.annotation.adapters.XmlAdapter',
212-
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT',
213-
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter',
214-
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters',
215-
'javax.xml.bind.attachment.AttachmentMarshaller',
216-
'javax.xml.bind.attachment.AttachmentUnmarshaller',
217-
'javax.xml.bind.helpers.AbstractMarshallerImpl',
218-
'javax.xml.bind.helpers.AbstractUnmarshallerImpl',
219-
'javax.xml.bind.helpers.DefaultValidationEventHandler',
220-
'javax.xml.bind.helpers.Messages',
221-
'javax.xml.bind.helpers.NotIdentifiableEventImpl',
222-
'javax.xml.bind.helpers.ParseConversionEventImpl',
223-
'javax.xml.bind.helpers.PrintConversionEventImpl',
224-
'javax.xml.bind.helpers.ValidationEventImpl',
225-
'javax.xml.bind.helpers.ValidationEventLocatorImpl',
226-
'javax.xml.bind.util.JAXBResult',
227-
'javax.xml.bind.util.JAXBSource$1',
228-
'javax.xml.bind.util.JAXBSource',
229-
'javax.xml.bind.util.Messages',
230-
'javax.xml.bind.util.ValidationEventCollector'
231128
]
129+
130+
// jarhell with jdk (intentionally, because jaxb was removed from default modules in java 9)
131+
if (JavaVersion.current() <= JavaVersion.VERSION_1_8) {
132+
thirdPartyAudit.excludes += [
133+
'javax.xml.bind.Binder',
134+
'javax.xml.bind.ContextFinder$1',
135+
'javax.xml.bind.ContextFinder',
136+
'javax.xml.bind.DataBindingException',
137+
'javax.xml.bind.DatatypeConverter',
138+
'javax.xml.bind.DatatypeConverterImpl$CalendarFormatter',
139+
'javax.xml.bind.DatatypeConverterImpl',
140+
'javax.xml.bind.DatatypeConverterInterface',
141+
'javax.xml.bind.Element',
142+
'javax.xml.bind.GetPropertyAction',
143+
'javax.xml.bind.JAXB$Cache',
144+
'javax.xml.bind.JAXB',
145+
'javax.xml.bind.JAXBContext',
146+
'javax.xml.bind.JAXBElement$GlobalScope',
147+
'javax.xml.bind.JAXBElement',
148+
'javax.xml.bind.JAXBException',
149+
'javax.xml.bind.JAXBIntrospector',
150+
'javax.xml.bind.JAXBPermission',
151+
'javax.xml.bind.MarshalException',
152+
'javax.xml.bind.Marshaller$Listener',
153+
'javax.xml.bind.Marshaller',
154+
'javax.xml.bind.Messages',
155+
'javax.xml.bind.NotIdentifiableEvent',
156+
'javax.xml.bind.ParseConversionEvent',
157+
'javax.xml.bind.PrintConversionEvent',
158+
'javax.xml.bind.PropertyException',
159+
'javax.xml.bind.SchemaOutputResolver',
160+
'javax.xml.bind.TypeConstraintException',
161+
'javax.xml.bind.UnmarshalException',
162+
'javax.xml.bind.Unmarshaller$Listener',
163+
'javax.xml.bind.Unmarshaller',
164+
'javax.xml.bind.UnmarshallerHandler',
165+
'javax.xml.bind.ValidationEvent',
166+
'javax.xml.bind.ValidationEventHandler',
167+
'javax.xml.bind.ValidationEventLocator',
168+
'javax.xml.bind.ValidationException',
169+
'javax.xml.bind.Validator',
170+
'javax.xml.bind.WhiteSpaceProcessor',
171+
'javax.xml.bind.annotation.DomHandler',
172+
'javax.xml.bind.annotation.W3CDomHandler',
173+
'javax.xml.bind.annotation.XmlAccessOrder',
174+
'javax.xml.bind.annotation.XmlAccessType',
175+
'javax.xml.bind.annotation.XmlAccessorOrder',
176+
'javax.xml.bind.annotation.XmlAccessorType',
177+
'javax.xml.bind.annotation.XmlAnyAttribute',
178+
'javax.xml.bind.annotation.XmlAnyElement',
179+
'javax.xml.bind.annotation.XmlAttachmentRef',
180+
'javax.xml.bind.annotation.XmlAttribute',
181+
'javax.xml.bind.annotation.XmlElement$DEFAULT',
182+
'javax.xml.bind.annotation.XmlElement',
183+
'javax.xml.bind.annotation.XmlElementDecl$GLOBAL',
184+
'javax.xml.bind.annotation.XmlElementDecl',
185+
'javax.xml.bind.annotation.XmlElementRef$DEFAULT',
186+
'javax.xml.bind.annotation.XmlElementRef',
187+
'javax.xml.bind.annotation.XmlElementRefs',
188+
'javax.xml.bind.annotation.XmlElementWrapper',
189+
'javax.xml.bind.annotation.XmlElements',
190+
'javax.xml.bind.annotation.XmlEnum',
191+
'javax.xml.bind.annotation.XmlEnumValue',
192+
'javax.xml.bind.annotation.XmlID',
193+
'javax.xml.bind.annotation.XmlIDREF',
194+
'javax.xml.bind.annotation.XmlInlineBinaryData',
195+
'javax.xml.bind.annotation.XmlList',
196+
'javax.xml.bind.annotation.XmlMimeType',
197+
'javax.xml.bind.annotation.XmlMixed',
198+
'javax.xml.bind.annotation.XmlNs',
199+
'javax.xml.bind.annotation.XmlNsForm',
200+
'javax.xml.bind.annotation.XmlRegistry',
201+
'javax.xml.bind.annotation.XmlRootElement',
202+
'javax.xml.bind.annotation.XmlSchema',
203+
'javax.xml.bind.annotation.XmlSchemaType$DEFAULT',
204+
'javax.xml.bind.annotation.XmlSchemaType',
205+
'javax.xml.bind.annotation.XmlSchemaTypes',
206+
'javax.xml.bind.annotation.XmlSeeAlso',
207+
'javax.xml.bind.annotation.XmlTransient',
208+
'javax.xml.bind.annotation.XmlType$DEFAULT',
209+
'javax.xml.bind.annotation.XmlType',
210+
'javax.xml.bind.annotation.XmlValue',
211+
'javax.xml.bind.annotation.adapters.CollapsedStringAdapter',
212+
'javax.xml.bind.annotation.adapters.HexBinaryAdapter',
213+
'javax.xml.bind.annotation.adapters.NormalizedStringAdapter',
214+
'javax.xml.bind.annotation.adapters.XmlAdapter',
215+
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT',
216+
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter',
217+
'javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters',
218+
'javax.xml.bind.attachment.AttachmentMarshaller',
219+
'javax.xml.bind.attachment.AttachmentUnmarshaller',
220+
'javax.xml.bind.helpers.AbstractMarshallerImpl',
221+
'javax.xml.bind.helpers.AbstractUnmarshallerImpl',
222+
'javax.xml.bind.helpers.DefaultValidationEventHandler',
223+
'javax.xml.bind.helpers.Messages',
224+
'javax.xml.bind.helpers.NotIdentifiableEventImpl',
225+
'javax.xml.bind.helpers.ParseConversionEventImpl',
226+
'javax.xml.bind.helpers.PrintConversionEventImpl',
227+
'javax.xml.bind.helpers.ValidationEventImpl',
228+
'javax.xml.bind.helpers.ValidationEventLocatorImpl',
229+
'javax.xml.bind.util.JAXBResult',
230+
'javax.xml.bind.util.JAXBSource$1',
231+
'javax.xml.bind.util.JAXBSource',
232+
'javax.xml.bind.util.Messages',
233+
'javax.xml.bind.util.ValidationEventCollector'
234+
]
235+
} else {
236+
// jarhell with jdk (intentionally, because we still expect to run again JDK 8)
237+
thirdPartyAudit.excludes += [
238+
'javax.activation.ActivationDataFlavor',
239+
'javax.activation.DataContentHandler',
240+
'javax.activation.DataHandler',
241+
'javax.activation.DataSource',
242+
'javax.activation.FileDataSource',
243+
'javax.activation.FileTypeMap',
244+
'javax.activation.MimeType',
245+
'javax.activation.MimeTypeParseException',
246+
]
247+
}

plugins/discovery-ec2/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,7 @@ thirdPartyAudit.excludes = [
6161
'org.apache.log.Hierarchy',
6262
'org.apache.log.Logger',
6363
]
64+
65+
if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
66+
thirdPartyAudit.excludes += ['javax.xml.bind.DatatypeConverter']
67+
}

plugins/ingest-attachment/build.gradle

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2071,3 +2071,21 @@ thirdPartyAudit.excludes = [
20712071
'ucar.nc2.Variable',
20722072
'ucar.nc2.dataset.NetcdfDataset'
20732073
]
2074+
2075+
if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
2076+
thirdPartyAudit.excludes += [
2077+
'javax.activation.ActivationDataFlavor',
2078+
'javax.activation.CommandMap',
2079+
'javax.activation.DataContentHandler',
2080+
'javax.activation.DataHandler',
2081+
'javax.activation.DataSource',
2082+
'javax.activation.FileDataSource',
2083+
'javax.activation.MailcapCommandMap',
2084+
'javax.xml.bind.DatatypeConverter',
2085+
'javax.xml.bind.JAXBContext',
2086+
'javax.xml.bind.JAXBElement',
2087+
'javax.xml.bind.Marshaller',
2088+
'javax.xml.bind.Unmarshaller',
2089+
'javax.xml.bind.helpers.DefaultValidationEventHandler',
2090+
]
2091+
}

plugins/repository-hdfs/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,3 +498,7 @@ thirdPartyAudit.excludes = [
498498
if (GradleVersion.current() > GradleVersion.version("2.13")) {
499499
thirdPartyAudit.excludes += ['org.slf4j.impl.StaticLoggerBinder']
500500
}
501+
502+
if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
503+
thirdPartyAudit.excludes += ['javax.xml.bind.annotation.adapters.HexBinaryAdapter']
504+
}

0 commit comments

Comments
 (0)