Skip to content

Commit 0f87001

Browse files
authored
Revert "Refactor plugin scanning into lib" (#93116)
This reverts the plugin scanning backport in 8.6. Commits reverted: ef99ffd ba98f35 and 92a9cc1
1 parent e666c38 commit 0f87001

File tree

29 files changed

+665
-850
lines changed

29 files changed

+665
-850
lines changed

build-tools/src/integTest/groovy/org/elasticsearch/gradle/plugin/StablePluginBuildPluginFuncTest.groovy

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ import java.nio.file.Files
1919
import java.nio.file.Path
2020
import java.util.stream.Collectors
2121

22-
import static org.elasticsearch.gradle.fixtures.TestClasspathUtils.setupNamedComponentScanner
23-
2422
class StablePluginBuildPluginFuncTest extends AbstractGradleFuncTest {
2523

2624
def setup() {
25+
// underlaying TestClusterPlugin and StandaloneRestIntegTestTask are not cc compatible
26+
configurationCacheCompatible = false
27+
}
28+
29+
def "can build stable plugin properties"() {
30+
given:
2731
buildFile << """plugins {
2832
id 'elasticsearch.stable-esplugin'
2933
}
@@ -34,27 +38,8 @@ class StablePluginBuildPluginFuncTest extends AbstractGradleFuncTest {
3438
name = 'myplugin'
3539
description = 'test plugin'
3640
}
37-
repositories {
38-
maven {
39-
name = "local-test"
40-
url = file("local-repo")
41-
metadataSources {
42-
artifact()
43-
}
44-
}
45-
}
4641
"""
4742

48-
// underlaying TestClusterPlugin and StandaloneRestIntegTestTask are not cc compatible
49-
configurationCacheCompatible = false
50-
51-
def version = VersionProperties.elasticsearch
52-
setupNamedComponentScanner(dir("local-repo/org/elasticsearch/elasticsearch-plugin-scanner/${version}/"), version)
53-
54-
}
55-
56-
def "can build stable plugin properties"() {
57-
given:
5843
when:
5944
def result = gradleRunner(":pluginProperties").build()
6045
def props = getPluginProperties()
@@ -77,16 +62,26 @@ class StablePluginBuildPluginFuncTest extends AbstractGradleFuncTest {
7762
}
7863

7964
def "can scan and create named components file"() {
80-
//THIS IS RUNNING A MOCK CONFIGURED IN setup()
8165
given:
8266
File jarFolder = new File(testProjectDir.root, "jars")
8367
jarFolder.mkdirs()
8468

85-
buildFile << """
69+
buildFile << """plugins {
70+
id 'elasticsearch.stable-esplugin'
71+
}
72+
73+
version = '1.2.3'
74+
75+
esplugin {
76+
name = 'myplugin'
77+
description = 'test plugin'
78+
}
79+
8680
dependencies {
8781
implementation files('${normalized(StableApiJarMocks.createPluginApiJar(jarFolder.toPath()).toAbsolutePath().toString())}')
8882
implementation files('${normalized(StableApiJarMocks.createExtensibleApiJar(jarFolder.toPath()).toAbsolutePath().toString())}')
8983
}
84+
9085
"""
9186

9287
file("src/main/java/org/acme/A.java") << """
@@ -100,16 +95,18 @@ class StablePluginBuildPluginFuncTest extends AbstractGradleFuncTest {
10095
}
10196
"""
10297

103-
when:
104-
def result = gradleRunner(":assemble", "-i").build()
10598

99+
when:
100+
def result = gradleRunner(":assemble").build()
101+
Path namedComponents = file("build/generated-named-components/named_components.json").toPath();
102+
def map = new JsonSlurper().parse(namedComponents.toFile())
106103
then:
107104
result.task(":assemble").outcome == TaskOutcome.SUCCESS
108-
//we expect that a Fake namedcomponent scanner used in this test will be passed a filename to be created
109-
File namedComponents = file("build/generated-named-components/named_components.json")
110-
namedComponents.exists() == true
105+
106+
map == ["org.elasticsearch.plugin.scanner.test_classes.ExtensibleClass" : (["componentA" : "org.acme.A"]) ]
111107
}
112108

109+
113110
Map<String, String> getPluginProperties() {
114111
Path propsFile = file("build/generated-descriptor/stable-plugin-descriptor.properties").toPath();
115112
Properties rawProps = new Properties()

build-tools/src/main/java/org/elasticsearch/gradle/NamedComponentScannerMock.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

build-tools/src/main/java/org/elasticsearch/gradle/plugin/GenerateNamedComponentsTask.java

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,54 @@
88

99
package org.elasticsearch.gradle.plugin;
1010

11-
import org.elasticsearch.gradle.LoggedExec;
11+
import com.fasterxml.jackson.databind.ObjectMapper;
12+
13+
import org.elasticsearch.gradle.plugin.scanner.ClassReaders;
14+
import org.elasticsearch.gradle.plugin.scanner.NamedComponentScanner;
1215
import org.gradle.api.DefaultTask;
16+
import org.gradle.api.file.ConfigurableFileCollection;
1317
import org.gradle.api.file.FileCollection;
1418
import org.gradle.api.file.ProjectLayout;
1519
import org.gradle.api.file.RegularFileProperty;
1620
import org.gradle.api.logging.Logger;
1721
import org.gradle.api.logging.Logging;
22+
import org.gradle.api.model.ObjectFactory;
1823
import org.gradle.api.tasks.CompileClasspath;
19-
import org.gradle.api.tasks.InputFiles;
2024
import org.gradle.api.tasks.OutputFile;
21-
import org.gradle.api.tasks.PathSensitive;
22-
import org.gradle.api.tasks.PathSensitivity;
2325
import org.gradle.api.tasks.TaskAction;
24-
import org.gradle.process.ExecOperations;
25-
import org.gradle.process.ExecResult;
26+
import org.gradle.workers.WorkAction;
27+
import org.gradle.workers.WorkParameters;
2628
import org.gradle.workers.WorkerExecutor;
29+
import org.objectweb.asm.ClassReader;
2730

2831
import java.io.File;
32+
import java.nio.file.Files;
33+
import java.nio.file.Path;
34+
import java.util.List;
35+
import java.util.Map;
36+
import java.util.Set;
2937

3038
import javax.inject.Inject;
3139

3240
public abstract class GenerateNamedComponentsTask extends DefaultTask {
3341
private static final Logger LOGGER = Logging.getLogger(GenerateNamedComponentsTask.class);
34-
private static final String NAMED_COMPONENTS_DIR = "generated-named-components/";
3542
private static final String NAMED_COMPONENTS_FILE = "named_components.json";
36-
private static final String NAMED_COMPONENTS_PATH = NAMED_COMPONENTS_DIR + NAMED_COMPONENTS_FILE;
3743

3844
private final WorkerExecutor workerExecutor;
39-
private FileCollection pluginScannerClasspath;
4045
private FileCollection classpath;
41-
private ExecOperations execOperations;
42-
private ProjectLayout projectLayout;
4346

4447
@Inject
45-
public GenerateNamedComponentsTask(WorkerExecutor workerExecutor, ExecOperations execOperations, ProjectLayout projectLayout) {
48+
public GenerateNamedComponentsTask(WorkerExecutor workerExecutor, ObjectFactory objectFactory, ProjectLayout projectLayout) {
4649
this.workerExecutor = workerExecutor;
47-
this.execOperations = execOperations;
48-
this.projectLayout = projectLayout;
49-
50-
getOutputFile().convention(projectLayout.getBuildDirectory().file(NAMED_COMPONENTS_PATH));
50+
getOutputFile().convention(projectLayout.getBuildDirectory().file("generated-named-components/" + NAMED_COMPONENTS_FILE));
5151
}
5252

5353
@TaskAction
5454
public void scanPluginClasses() {
55-
File outputFile = projectLayout.getBuildDirectory().file(NAMED_COMPONENTS_PATH).get().getAsFile();
56-
57-
ExecResult execResult = LoggedExec.javaexec(execOperations, spec -> {
58-
spec.classpath(pluginScannerClasspath.plus(getClasspath()).getAsPath());
59-
spec.getMainClass().set("org.elasticsearch.plugin.scanner.NamedComponentScanner");
60-
spec.args(outputFile);
61-
spec.setErrorOutput(System.err);
62-
spec.setStandardOutput(System.out);
55+
workerExecutor.noIsolation().submit(GenerateNamedComponentsAction.class, params -> {
56+
params.getClasspath().from(classpath);
57+
params.getOutputFile().set(getOutputFile());
6358
});
64-
execResult.assertNormalExitValue();
6559
}
6660

6761
@OutputFile
@@ -76,13 +70,36 @@ public void setClasspath(FileCollection classpath) {
7670
this.classpath = classpath;
7771
}
7872

79-
public void setPluginScannerClasspath(FileCollection pluginScannerClasspath) {
80-
this.pluginScannerClasspath = pluginScannerClasspath;
73+
public abstract static class GenerateNamedComponentsAction implements WorkAction<Parameters> {
74+
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
75+
76+
@Override
77+
public void execute() {
78+
Set<File> classpathFiles = getParameters().getClasspath().getFiles();
79+
80+
List<ClassReader> classReaders = ClassReaders.ofPaths(classpathFiles.stream().map(File::toPath));
81+
82+
NamedComponentScanner namedComponentScanner = new NamedComponentScanner();
83+
Map<String, Map<String, String>> namedComponentsMap = namedComponentScanner.scanForNamedClasses(classReaders);
84+
writeToFile(namedComponentsMap);
85+
}
86+
87+
private void writeToFile(Map<String, Map<String, String>> namedComponentsMap) {
88+
try {
89+
String json = OBJECT_MAPPER.writeValueAsString(namedComponentsMap);
90+
File file = getParameters().getOutputFile().getAsFile().get();
91+
Path of = Path.of(file.getAbsolutePath());
92+
Files.writeString(of, json);
93+
} catch (Exception e) {
94+
e.printStackTrace();
95+
}
96+
}
8197
}
8298

83-
@InputFiles
84-
@PathSensitive(PathSensitivity.RELATIVE)
85-
public FileCollection getPluginScannerClasspath() {
86-
return pluginScannerClasspath;
99+
interface Parameters extends WorkParameters {
100+
101+
ConfigurableFileCollection getClasspath();
102+
103+
RegularFileProperty getOutputFile();
87104
}
88105
}

build-tools/src/main/java/org/elasticsearch/gradle/plugin/StablePluginBuildPlugin.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@
88

99
package org.elasticsearch.gradle.plugin;
1010

11-
import org.elasticsearch.gradle.VersionProperties;
1211
import org.elasticsearch.gradle.util.GradleUtils;
1312
import org.gradle.api.Plugin;
1413
import org.gradle.api.Project;
15-
import org.gradle.api.artifacts.Configuration;
16-
import org.gradle.api.artifacts.dsl.DependencyHandler;
1714
import org.gradle.api.file.FileCollection;
1815
import org.gradle.api.file.RegularFile;
1916
import org.gradle.api.plugins.JavaPlugin;
@@ -36,21 +33,12 @@ public void apply(Project project) {
3633
});
3734

3835
final var pluginNamedComponents = project.getTasks().register("pluginNamedComponents", GenerateNamedComponentsTask.class, t -> {
39-
4036
SourceSet mainSourceSet = GradleUtils.getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME);
4137
FileCollection dependencyJars = project.getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME);
4238
FileCollection compiledPluginClasses = mainSourceSet.getOutput().getClassesDirs();
4339
FileCollection classPath = dependencyJars.plus(compiledPluginClasses);
4440
t.setClasspath(classPath);
4541
});
46-
Configuration pluginScannerConfig = project.getConfigurations().create("pluginScannerConfig");
47-
DependencyHandler dependencyHandler = project.getDependencies();
48-
pluginScannerConfig.defaultDependencies(
49-
deps -> deps.add(
50-
dependencyHandler.create("org.elasticsearch:elasticsearch-plugin-scanner:" + VersionProperties.getElasticsearch())
51-
)
52-
);
53-
pluginNamedComponents.configure(t -> { t.setPluginScannerClasspath(pluginScannerConfig); });
5442

5543
final var pluginExtension = project.getExtensions().getByType(PluginPropertiesExtension.class);
5644
pluginExtension.getBundleSpec().from(pluginNamedComponents);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Side Public License, v 1.
77
*/
88

9-
package org.elasticsearch.plugin.scanner;
9+
package org.elasticsearch.gradle.plugin.scanner;
1010

1111
import org.objectweb.asm.AnnotationVisitor;
1212
import org.objectweb.asm.ClassVisitor;

libs/plugin-scanner/src/main/java/org/elasticsearch/plugin/scanner/ClassReaders.java renamed to build-tools/src/main/java/org/elasticsearch/gradle/plugin/scanner/ClassReaders.java

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,19 @@
66
* Side Public License, v 1.
77
*/
88

9-
package org.elasticsearch.plugin.scanner;
9+
package org.elasticsearch.gradle.plugin.scanner;
1010

11-
import org.elasticsearch.core.PathUtils;
1211
import org.objectweb.asm.ClassReader;
1312

1413
import java.io.IOException;
1514
import java.io.InputStream;
1615
import java.io.UncheckedIOException;
17-
import java.net.URISyntaxException;
18-
import java.net.URL;
1916
import java.nio.file.FileSystem;
2017
import java.nio.file.FileSystems;
2118
import java.nio.file.Files;
2219
import java.nio.file.Path;
23-
import java.nio.file.Paths;
24-
import java.util.Arrays;
2520
import java.util.Collections;
2621
import java.util.List;
27-
import java.util.Set;
2822
import java.util.stream.Collectors;
2923
import java.util.stream.Stream;
3024

@@ -40,34 +34,17 @@ public class ClassReaders {
4034
* This method must be used within a try-with-resources statement or similar
4135
* control structure.
4236
*/
43-
public static List<ClassReader> ofDirWithJars(String path) {
44-
if (path == null) {
37+
public static List<ClassReader> ofDirWithJars(Path dir) {
38+
if (dir == null) {
4539
return Collections.emptyList();
4640
}
47-
Path dir = Paths.get(path);
4841
try (var stream = Files.list(dir)) {
4942
return ofPaths(stream);
5043
} catch (IOException e) {
5144
throw new UncheckedIOException(e);
5245
}
5346
}
5447

55-
public static List<ClassReader> ofPaths(Set<URL> classpathFiles) {
56-
return ofPaths(classpathFiles.stream().map(ClassReaders::toPath));
57-
}
58-
59-
private static Path toPath(URL url) {
60-
try {
61-
return PathUtils.get(url.toURI());
62-
} catch (URISyntaxException e) {
63-
throw new AssertionError(e);
64-
}
65-
}
66-
67-
/**
68-
* This method must be used within a try-with-resources statement or similar
69-
* control structure.
70-
*/
7148
public static List<ClassReader> ofPaths(Stream<Path> list) {
7249
return list.filter(Files::exists).flatMap(p -> {
7350
if (p.toString().endsWith(".jar")) {
@@ -106,18 +83,4 @@ private static List<ClassReader> classesInPath(Path root) {
10683
}
10784
}
10885

109-
public static List<ClassReader> ofClassPath() throws IOException {
110-
String classpath = System.getProperty("java.class.path");
111-
return ofClassPath(classpath);
112-
}
113-
114-
public static List<ClassReader> ofClassPath(String classpath) {
115-
if (classpath != null && classpath.equals("") == false) {// todo when do we set cp to "" ?
116-
var classpathSeparator = System.getProperty("path.separator");
117-
118-
String[] pathelements = classpath.split(classpathSeparator);
119-
return ofPaths(Arrays.stream(pathelements).map(Paths::get));
120-
}
121-
return Collections.emptyList();
122-
}
12386
}

libs/plugin-scanner/src/main/java/org/elasticsearch/plugin/scanner/ClassScanner.java renamed to build-tools/src/main/java/org/elasticsearch/gradle/plugin/scanner/ClassScanner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Side Public License, v 1.
77
*/
88

9-
package org.elasticsearch.plugin.scanner;
9+
package org.elasticsearch.gradle.plugin.scanner;
1010

1111
import org.objectweb.asm.AnnotationVisitor;
1212
import org.objectweb.asm.ClassReader;

0 commit comments

Comments
 (0)