mirror of https://github.com/apache/lucene.git
90 lines
2.9 KiB
Groovy
90 lines
2.9 KiB
Groovy
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
// Produce an MR-JAR with Java 19 MemorySegment implementation for MMapDirectory
|
|
|
|
configure(project(":lucene:core")) {
|
|
plugins.withType(JavaPlugin) {
|
|
sourceSets {
|
|
main19 {
|
|
java {
|
|
srcDirs = ['src/java19']
|
|
}
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
// Inherit any dependencies from the main source set.
|
|
main19Implementation.extendsFrom implementation
|
|
}
|
|
|
|
dependencies {
|
|
// We need the main classes to compile our Java 19 pieces.
|
|
main19Implementation sourceSets.main.output
|
|
}
|
|
|
|
def patchClassFiles = { DirectoryProperty destinationDirectory, int expectedMajor ->
|
|
destinationDirectory.getAsFileTree().matching(new PatternSet().include('**/*.class')).visit{ details ->
|
|
if (!details.directory) {
|
|
logger.info("Patching: ${details.file}")
|
|
new RandomAccessFile(details.file, 'rw').withCloseable { f ->
|
|
int magic = f.readInt();
|
|
if (magic != (int)0xCAFEBABE) {
|
|
throw new GradleException("Invalid Java class file magic ${String.format("0x%08X", magic)}: ${details.file}")
|
|
}
|
|
f.seek(6L)
|
|
short major = f.readShort()
|
|
if (major != expectedMajor) {
|
|
throw new GradleException("Invalid Java class file version ${major}: ${details.file}")
|
|
}
|
|
// patch the minor version to 0 (remove preview flag):
|
|
f.seek(4L)
|
|
f.writeShort(0)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.named('compileMain19Java').configure {
|
|
javaCompiler = javaToolchains.compilerFor {
|
|
languageVersion = JavaLanguageVersion.of(19)
|
|
}
|
|
|
|
// undo alternative JDK support:
|
|
options.forkOptions.javaHome = null
|
|
|
|
sourceCompatibility = 19
|
|
targetCompatibility = 19
|
|
options.compilerArgs += ["--release", 19 as String, "--enable-preview"]
|
|
|
|
doLast {
|
|
patchClassFiles(destinationDirectory, 63)
|
|
}
|
|
}
|
|
|
|
tasks.named('jar').configure {
|
|
into('META-INF/versions/19') {
|
|
from sourceSets.main19.output
|
|
}
|
|
|
|
manifest.attributes(
|
|
'Multi-Release': 'true'
|
|
)
|
|
}
|
|
}
|
|
}
|