From 86ff97936c17350882d69e2591080276e16d3ed9 Mon Sep 17 00:00:00 2001 From: Yves Piel Date: Tue, 4 Nov 2025 15:47:24 +0100 Subject: [PATCH 1/2] Revert "fix(QTDI-1963): fix windows path for rootRepo (#1101)" This reverts commit 674c399c6bf7e0f8d41e5ff9bbffebcda648855a. --- .../org/talend/sdk/component/container/ContainerManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java b/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java index eeedb240241d8..8822cdbccc1f1 100644 --- a/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java +++ b/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java @@ -33,6 +33,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; @@ -119,7 +120,7 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe if (PathFactory.get(System.getProperty("user.home")).resolve(".m2/repository").equals(rootRepo)) { final URL nested = classLoaderConfiguration.getParent().getResource("MAVEN-INF/repository"); if (nested != null) { - rootRepo = PathFactory.get(nested.getFile().replace("file:", "")); + rootRepo = Paths.get(nested.getFile().replace("file:", "")); } } this.rootRepositoryLocation = rootRepo; @@ -554,4 +555,4 @@ private Stream getBuiltInClasspath(final String moduleLocation) { return resolver.resolve(classLoaderConfiguration.getParent(), moduleLocation); } } -} +} \ No newline at end of file From 6f02b84dee2b73f5ba281b1ac5462d37bc280a89 Mon Sep 17 00:00:00 2001 From: Yves Piel Date: Tue, 4 Nov 2025 15:47:42 +0100 Subject: [PATCH 2/2] Revert "Reapply "feat(QTDI-693): TCK microservice/OSGI build with dynamic dependencies." (#1104)" This reverts commit 9bfaacd134081c0ea4d3a5cfd09d065a9c1d2d3e. --- .../runtime/manager/ComponentManager.java | 44 ++++--------------- .../runtime/manager/ComponentManagerTest.java | 7 ++- .../classloader/ConfigurableClassLoader.java | 12 ----- .../sdk/component/container/Container.java | 4 -- .../component/container/ContainerManager.java | 27 ++++-------- 5 files changed, 20 insertions(+), 74 deletions(-) diff --git a/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/ComponentManager.java b/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/ComponentManager.java index de7dcd831bd83..56957e149196f 100644 --- a/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/ComponentManager.java +++ b/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/ComponentManager.java @@ -37,11 +37,9 @@ import static org.talend.sdk.component.runtime.manager.reflect.Constructors.findConstructor; import static org.talend.sdk.component.runtime.manager.util.Lazy.lazy; -import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.ObjectStreamException; import java.io.Serializable; import java.lang.annotation.Annotation; @@ -1304,42 +1302,16 @@ public void onCreate(final Container container) { try { String alreadyScannedClasses = null; Filter filter = KnownClassesFilter.INSTANCE; - // we need to scan the nested repository - if (container.hasNestedRepository()) { - try { - final Enumeration urls = loader.getResources("TALEND-INF/scanning.properties"); + try (final InputStream containerFilterConfig = + container.getLoader().getResourceAsStream("TALEND-INF/scanning.properties")) { + if (containerFilterConfig != null) { final Properties config = new Properties(); - while (urls.hasMoreElements()) { - final URL url = urls.nextElement(); - // ensure we scan the correct classes of plugin in the nested repository - if ("nested".equals(url.getProtocol()) - && url.getPath().contains(container.getRootModule())) { - try (final BufferedReader reader = - new BufferedReader(new InputStreamReader(url.openStream()))) { - config.load(reader); - filter = createScanningFilter(config); - alreadyScannedClasses = config.getProperty("classes.list"); - break; - } - } - } - } catch (IOException e) { - log.info("[onCreate] Can't read nested scanning.properties: {}", e.getMessage()); - } - } - // normal scanning or nested scan failed - if (alreadyScannedClasses == null) { - try (final InputStream containerFilterConfig = - container.getLoader().getResourceAsStream("TALEND-INF/scanning.properties")) { - if (containerFilterConfig != null) { - final Properties config = new Properties(); - config.load(containerFilterConfig); - filter = createScanningFilter(config); - alreadyScannedClasses = config.getProperty("classes.list"); - } - } catch (final IOException e) { - log.debug(e.getMessage(), e); + config.load(containerFilterConfig); + filter = createScanningFilter(config); + alreadyScannedClasses = config.getProperty("classes.list"); } + } catch (final IOException e) { + log.debug(e.getMessage(), e); } AnnotationFinder optimizedFinder = null; diff --git a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/ComponentManagerTest.java b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/ComponentManagerTest.java index f28b82dd7c735..585e197c1ce3e 100644 --- a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/ComponentManagerTest.java +++ b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/ComponentManagerTest.java @@ -427,11 +427,10 @@ void extendFamilyInNestedRepo(@TempDir final File temporaryFolder) throws Except .of(container.getLoader().getURLs()) .map(Files::toFile) .map(File::getName) - .sorted() // !! for asserts + .sorted() .toArray(String[]::new); - assertEquals(2, dependencies.length); // ignored transitive deps, enables the new root to control it - assertEquals("fatjar.jar", dependencies[0]); // transitive-1.0.0.jar is nested - assertEquals("main.jar", dependencies[1]); // main.jar containing fatjar.jar + assertEquals(1, dependencies.length); // ignored transitive deps, enables the new root to control it + assertEquals("main.jar", dependencies[0]); // transitive-1.0.0.jar is nested } finally { if (!transitive.delete()) { transitive.deleteOnExit(); diff --git a/container/container-core/src/main/java/org/talend/sdk/component/classloader/ConfigurableClassLoader.java b/container/container-core/src/main/java/org/talend/sdk/component/classloader/ConfigurableClassLoader.java index 5e75d9ebdf5fa..3ded8250b3ccd 100644 --- a/container/container-core/src/main/java/org/talend/sdk/component/classloader/ConfigurableClassLoader.java +++ b/container/container-core/src/main/java/org/talend/sdk/component/classloader/ConfigurableClassLoader.java @@ -111,8 +111,6 @@ public class ConfigurableClassLoader extends URLClassLoader { @Getter private final List cacheableClasses; - private List nestedURLs = new ArrayList<>(); - public ConfigurableClassLoader(final String id, final URL[] urls, final ClassLoader parent, final Predicate parentFilter, final Predicate childFirstFilter, final String[] nestedDependencies, final String[] jvmPrefixes) { @@ -157,7 +155,6 @@ private void loadNestedDependencies(final ClassLoader parent, final String[] nes if (url == null) { throw new IllegalArgumentException("Didn't find " + resource + " in " + asList(nestedDependencies)); } - nestedURLs.add(url); final Map resources = new HashMap<>(); final URLConnection urlConnection; final Manifest manifest; @@ -461,15 +458,6 @@ public Enumeration findResources(final String name) throws IOException { return enumeration(aggregated); } - @Override - public URL[] getURLs() { - final List urls = new ArrayList<>(Arrays.asList(super.getURLs())); - if (!nestedURLs.isEmpty()) { - urls.addAll(nestedURLs); - } - return urls.toArray(new URL[0]); - } - private boolean isNestedDependencyResource(final String name) { return name != null && name.startsWith(NESTED_MAVEN_REPOSITORY); } diff --git a/container/container-core/src/main/java/org/talend/sdk/component/container/Container.java b/container/container-core/src/main/java/org/talend/sdk/component/container/Container.java index 287e580ae72ad..67e33c498479a 100644 --- a/container/container-core/src/main/java/org/talend/sdk/component/container/Container.java +++ b/container/container-core/src/main/java/org/talend/sdk/component/container/Container.java @@ -307,10 +307,6 @@ public Date getCreated() { return created.get(); } - public boolean hasNestedRepository() { - return hasNestedRepository; - } - public void registerTransformer(final ClassFileTransformer transformer) { transformers.add(transformer); } diff --git a/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java b/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java index 8822cdbccc1f1..393401aeadf87 100644 --- a/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java +++ b/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java @@ -29,11 +29,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; @@ -112,23 +110,16 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe this.logInfoLevelMapping = logInfoLevelMapping; this.containerInitializer = containerInitializer; this.resolver = dependenciesResolutionConfiguration.getResolver(); - - Path rootRepo = ofNullable(dependenciesResolutionConfiguration.getRootRepositoryLocation()) + this.rootRepositoryLocation = ofNullable(dependenciesResolutionConfiguration.getRootRepositoryLocation()) .filter(Files::exists) - .orElseGet(() -> PathFactory.get(System.getProperty("user.home")).resolve(".m2/repository")); - // if we've defaulted to user home m2 (fallback), we want to check if we're in running in a fatjar - if (PathFactory.get(System.getProperty("user.home")).resolve(".m2/repository").equals(rootRepo)) { - final URL nested = classLoaderConfiguration.getParent().getResource("MAVEN-INF/repository"); - if (nested != null) { - rootRepo = Paths.get(nested.getFile().replace("file:", "")); - } + .orElseGet(() -> PathFactory.get(System.getProperty("user.home", "")).resolve(".m2/repository")); + + if (log.isDebugEnabled()) { + log.debug("Using root repository: " + this.rootRepositoryLocation.toAbsolutePath()); } - this.rootRepositoryLocation = rootRepo; - info("Using root repository: " + this.rootRepositoryLocation.toAbsolutePath()); - final String pluginsLocation = System.getProperty("talend.component.manager.plugins.location", - "TALEND-INF/plugins.properties"); + final String nestedPluginMappingResource = ofNullable(classLoaderConfiguration.getNestedPluginMappingResource()) - .orElse(pluginsLocation); + .orElse("TALEND-INF/plugins.properties"); this.classLoaderConfiguration = new ClassLoaderConfiguration( ofNullable(classLoaderConfiguration.getParent()).orElseGet(ContainerManager.class::getClassLoader), ofNullable(classLoaderConfiguration.getClassesFilter()).orElseGet(() -> name -> true), @@ -486,8 +477,8 @@ public Container create() { ? nestedContainerMapping.getOrDefault(module, module) : module; final Path resolved = resolve(moduleLocation); - info(String.format("Creating module %s (from %s, location=%s)", moduleLocation, module, - resolved.toAbsolutePath())); + info("Creating module " + moduleLocation + " (from " + module + + (Files.exists(resolved) ? ", location=" + resolved.toAbsolutePath().toString() : "") + ")"); final Stream classpath = Stream .concat(getBuiltInClasspath(moduleLocation), additionalClasspath == null ? Stream.empty() : additionalClasspath.stream());