|
12 | 12 | import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
|
13 | 13 | import org.elasticsearch.gradle.internal.info.BuildParams;
|
14 | 14 | import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
|
| 15 | +import org.elasticsearch.gradle.internal.test.TestUtil; |
| 16 | +import org.elasticsearch.gradle.test.SystemPropertyCommandLineArgumentProvider; |
15 | 17 | import org.elasticsearch.gradle.util.GradleUtils;
|
16 | 18 | import org.gradle.api.JavaVersion;
|
17 | 19 | import org.gradle.api.Plugin;
|
18 | 20 | import org.gradle.api.Project;
|
| 21 | +import org.gradle.api.artifacts.Configuration; |
19 | 22 | import org.gradle.api.artifacts.ResolutionStrategy;
|
| 23 | +import org.gradle.api.file.FileCollection; |
20 | 24 | import org.gradle.api.plugins.JavaBasePlugin;
|
21 | 25 | import org.gradle.api.plugins.JavaPluginExtension;
|
22 | 26 | import org.gradle.api.provider.Provider;
|
|
26 | 30 | import org.gradle.api.tasks.compile.CompileOptions;
|
27 | 31 | import org.gradle.api.tasks.compile.GroovyCompile;
|
28 | 32 | import org.gradle.api.tasks.compile.JavaCompile;
|
| 33 | +import org.gradle.api.tasks.testing.Test; |
29 | 34 | import org.gradle.jvm.toolchain.JavaLanguageVersion;
|
30 | 35 | import org.gradle.jvm.toolchain.JavaToolchainService;
|
31 | 36 |
|
32 | 37 | import java.util.List;
|
| 38 | +import java.util.Map; |
| 39 | +import java.util.function.Supplier; |
33 | 40 |
|
34 | 41 | import javax.inject.Inject;
|
35 | 42 |
|
@@ -59,6 +66,7 @@ public void apply(Project project) {
|
59 | 66 | configureConfigurations(project);
|
60 | 67 | configureCompile(project);
|
61 | 68 | configureInputNormalization(project);
|
| 69 | + configureNativeLibraryPath(project); |
62 | 70 |
|
63 | 71 | // convenience access to common versions used in dependencies
|
64 | 72 | project.getExtensions().getExtraProperties().set("versions", VersionProperties.getVersions());
|
@@ -165,6 +173,26 @@ public static void configureInputNormalization(Project project) {
|
165 | 173 | project.getNormalization().getRuntimeClasspath().ignore("IMPL-JARS/**/META-INF/MANIFEST.MF");
|
166 | 174 | }
|
167 | 175 |
|
| 176 | + private static void configureNativeLibraryPath(Project project) { |
| 177 | + String nativeProject = ":libs:elasticsearch-native:elasticsearch-native-libraries"; |
| 178 | + Configuration nativeConfig = project.getConfigurations().create("nativeLibs"); |
| 179 | + nativeConfig.defaultDependencies(deps -> { |
| 180 | + deps.add(project.getDependencies().project(Map.of("path", nativeProject, "configuration", "default"))); |
| 181 | + }); |
| 182 | + // This input to the following lambda needs to be serializable. Configuration is not serializable, but FileCollection is. |
| 183 | + FileCollection nativeConfigFiles = nativeConfig; |
| 184 | + |
| 185 | + project.getTasks().withType(Test.class).configureEach(test -> { |
| 186 | + var systemProperties = test.getExtensions().getByType(SystemPropertyCommandLineArgumentProvider.class); |
| 187 | + var libraryPath = (Supplier<String>) () -> TestUtil.getTestLibraryPath(nativeConfigFiles.getAsPath()); |
| 188 | + |
| 189 | + test.dependsOn(nativeConfigFiles); |
| 190 | + // we may use JNA or the JDK's foreign function api to load libraries, so we set both sysprops |
| 191 | + systemProperties.systemProperty("java.library.path", libraryPath); |
| 192 | + systemProperties.systemProperty("jna.library.path", libraryPath); |
| 193 | + }); |
| 194 | + } |
| 195 | + |
168 | 196 | private static Provider<Integer> releaseVersionProviderFromCompileTask(Project project, AbstractCompile compileTask) {
|
169 | 197 | return project.provider(() -> {
|
170 | 198 | JavaVersion javaVersion = JavaVersion.toVersion(compileTask.getTargetCompatibility());
|
|
0 commit comments