From 333c08134103d49209dcff35a7097681c8e50074 Mon Sep 17 00:00:00 2001 From: Emmanuel GALLOIS Date: Wed, 29 Oct 2025 15:25:05 +0100 Subject: [PATCH 1/5] fix(QTDI-2031): cleanup master + logging --- .../DynamicDependenciesConfiguration.java | 34 +++++++++++ .../runtime/manager/ComponentManager.java | 44 +++----------- .../runtime/manager/ComponentManagerTest.java | 7 +-- .../service/HttpClientFactoryImplTest.java | 4 +- .../classloader/ConfigurableClassLoader.java | 12 ---- .../component/container/ContainerManager.java | 60 ++++++++++++------- 6 files changed, 87 insertions(+), 74 deletions(-) create mode 100644 component-api/src/main/java/org/talend/sdk/component/api/configuration/type/DynamicDependenciesConfiguration.java diff --git a/component-api/src/main/java/org/talend/sdk/component/api/configuration/type/DynamicDependenciesConfiguration.java b/component-api/src/main/java/org/talend/sdk/component/api/configuration/type/DynamicDependenciesConfiguration.java new file mode 100644 index 0000000000000..f7f01ec74d5b3 --- /dev/null +++ b/component-api/src/main/java/org/talend/sdk/component/api/configuration/type/DynamicDependenciesConfiguration.java @@ -0,0 +1,34 @@ +/** + * Copyright (C) 2006-2025 Talend Inc. - www.talend.com + * + * Licensed 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. + */ +package org.talend.sdk.component.api.configuration.type; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import org.talend.sdk.component.api.configuration.type.meta.ConfigurationType; +import org.talend.sdk.component.api.meta.Documentation; + +@Target(TYPE) +@Retention(RUNTIME) +@ConfigurationType("dynamicDependenciesConfiguration") +@Documentation("Mark a model (complex object) as being the configuration expected to compute dynamic dependencies.") +public @interface DynamicDependenciesConfiguration { + + String value() default "default"; +} \ No newline at end of file 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/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java index 8a265f3a8b3d1..1dc4d95e20d55 100644 --- a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java +++ b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java @@ -244,7 +244,7 @@ void requestWithXMLXXE() throws IOException { final byte[] bytes; String xmlContent = " ]>&xxe;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); @@ -273,7 +273,7 @@ void requestWithInvalidXML() throws IOException { final byte[] bytes; String xmlContent = "invalid;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); 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/ContainerManager.java b/container/container-core/src/main/java/org/talend/sdk/component/container/ContainerManager.java index eeedb240241d8..be5c139c06dc5 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,6 +29,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -111,23 +113,17 @@ 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 = PathFactory.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()); + getSystemInformations(); } - 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), @@ -137,6 +133,12 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe try (final InputStream mappingStream = classLoaderConfiguration.getParent().getResourceAsStream(nestedPluginMappingResource)) { if (mappingStream != null) { + if (log.isDebugEnabled()) { + final URL plug = classLoaderConfiguration.getParent().getResource(nestedPluginMappingResource); + if (plug != null) { + log.debug("[sysinfo] plugins mapping " + plug.toString()); + } + } final Properties properties = new Properties() { { @@ -163,10 +165,13 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe this.jvmMarkers = Stream .concat(Stream.concat(Stream.of(getJre()), getComponentModules()), getCustomJvmMarkers()) .toArray(String[]::new); - this.hasNestedRepository = - this.classLoaderConfiguration.isSupportsResourceDependencies() && this.classLoaderConfiguration - .getParent() - .getResource(ConfigurableClassLoader.NESTED_MAVEN_REPOSITORY) != null; + final URL nestedMvn = this.classLoaderConfiguration + .getParent() + .getResource(ConfigurableClassLoader.NESTED_MAVEN_REPOSITORY); + this.hasNestedRepository = this.classLoaderConfiguration.isSupportsResourceDependencies() && nestedMvn != null; + if (log.isDebugEnabled() && hasNestedRepository) { + log.debug("[sysinfo] nested maven repository: " + nestedMvn); + } } public File getRootRepositoryLocation() { @@ -402,6 +407,21 @@ private String getJre() { .orElseThrow(IllegalArgumentException::new); } + private void getSystemInformations() { + try { + final RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); + log.debug("[sysinfo] JVM arguments: " + rt.getInputArguments()); + try { + log.debug("[sysinfo] Boot classpath: " + rt.getBootClassPath()); + } catch (Exception e) { + } + log.debug("[sysinfo] Runtime classpath: " + rt.getClassPath()); + log.debug("[sysinfo] Runtime arguments: " + System.getProperty("sun.java.command")); + } catch (Exception e) { + log.debug("Unable to get JVM information: " + e.getMessage(), e); + } + } + @Override public void close() { lifecycle.closeIfNeeded(() -> { @@ -485,8 +505,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()); From bddb70942314645a9db42eafffa63128027c57ec Mon Sep 17 00:00:00 2001 From: Emmanuel GALLOIS Date: Wed, 29 Oct 2025 15:30:33 +0100 Subject: [PATCH 2/5] fix(QTDI-2031): restore formatting --- .../runtime/manager/service/HttpClientFactoryImplTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java index 1dc4d95e20d55..8a265f3a8b3d1 100644 --- a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java +++ b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java @@ -244,7 +244,7 @@ void requestWithXMLXXE() throws IOException { final byte[] bytes; String xmlContent = " ]>&xxe;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); @@ -273,7 +273,7 @@ void requestWithInvalidXML() throws IOException { final byte[] bytes; String xmlContent = "invalid;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); From 89945464766a3d82980c33d1e2a588b679d6547d Mon Sep 17 00:00:00 2001 From: Emmanuel GALLOIS Date: Wed, 29 Oct 2025 16:12:31 +0100 Subject: [PATCH 3/5] fix(QTDI-2031): misc pr comments --- .../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 be5c139c06dc5..0c1a368bda922 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 @@ -119,7 +119,7 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe if (log.isDebugEnabled()) { log.debug("Using root repository: " + this.rootRepositoryLocation.toAbsolutePath()); - getSystemInformations(); + getSystemInformation(); } final String nestedPluginMappingResource = ofNullable(classLoaderConfiguration.getNestedPluginMappingResource()) @@ -407,13 +407,14 @@ private String getJre() { .orElseThrow(IllegalArgumentException::new); } - private void getSystemInformations() { + private void getSystemInformation() { try { final RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); log.debug("[sysinfo] JVM arguments: " + rt.getInputArguments()); try { log.debug("[sysinfo] Boot classpath: " + rt.getBootClassPath()); } catch (Exception e) { + // nop, will fail in some cases for boot classpath } log.debug("[sysinfo] Runtime classpath: " + rt.getClassPath()); log.debug("[sysinfo] Runtime arguments: " + System.getProperty("sun.java.command")); From f93d425a2d621ed88cce9c9f03047e71e63dc310 Mon Sep 17 00:00:00 2001 From: Emmanuel GALLOIS Date: Thu, 30 Oct 2025 15:54:17 +0100 Subject: [PATCH 4/5] feat(QTDI-2145): disable fallback to user's m2 --- .../MavenRepositoryDefaultResolver.java | 58 ++++++++++++------- .../runtime/manager/ComponentManagerTest.java | 12 ++++ .../service/HttpClientFactoryImplTest.java | 4 +- .../service/MavenRepositoryResolverTest.java | 1 + .../component/container/ContainerManager.java | 4 +- 5 files changed, 52 insertions(+), 27 deletions(-) diff --git a/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryDefaultResolver.java b/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryDefaultResolver.java index 5bb98bfcc1e2a..50db5bf827ae3 100644 --- a/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryDefaultResolver.java +++ b/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryDefaultResolver.java @@ -52,6 +52,8 @@ public class MavenRepositoryDefaultResolver implements MavenRepositoryResolver { private PathHandler handler = new PathHandlerImpl(); + private boolean hasFallback = Boolean.getBoolean("talend.component.manager.m2.fallback"); + @Override public Path discover() { return Stream @@ -63,8 +65,12 @@ public Path discover() { @Override public Path fallback() { - log.debug("[fallback] default to user's default repository."); - return Paths.get(USER_HOME).resolve(M2_REPOSITORY); + log.debug("[fallback::{}] default to user's default repository.", hasFallback); + if (hasFallback) { + return Paths.get(USER_HOME).resolve(M2_REPOSITORY); + } else { + return Paths.get(USER_HOME); + } } public Path fromSystemProperties() { @@ -119,30 +125,38 @@ private static String parseSettings(final Path settings) { } public Path fromMavenSettings() { - return Stream.of( - Optional.ofNullable(System.getProperty(TALEND_COMPONENT_MANAGER_M2_SETTINGS)) - .map(Paths::get) - .orElse(null), // - Optional.ofNullable(System.getProperty("user.home")).map(it -> Paths.get(it, M2_SETTINGS)).orElse(null), - Optional.ofNullable(System.getenv(MAVEN_HOME)).map(it -> Paths.get(it, CONF_SETTINGS)).orElse(null), - Optional.ofNullable(System.getenv(M2_HOME)).map(it -> Paths.get(it, CONF_SETTINGS)).orElse(null)) - .filter(Objects::nonNull) - .filter(Files::exists) - .map(MavenRepositoryDefaultResolver::parseSettings) - .filter(Objects::nonNull) - .map(handler::get) - .filter(Objects::nonNull) - .findFirst() - .orElse(null); + if (hasFallback) { + return Stream.of( + Optional.ofNullable(System.getProperty(TALEND_COMPONENT_MANAGER_M2_SETTINGS)) + .map(Paths::get) + .orElse(null), // + Optional.ofNullable(System.getProperty("user.home")) + .map(it -> Paths.get(it, M2_SETTINGS)) + .orElse(null), + Optional.ofNullable(System.getenv(MAVEN_HOME)).map(it -> Paths.get(it, CONF_SETTINGS)).orElse(null), + Optional.ofNullable(System.getenv(M2_HOME)).map(it -> Paths.get(it, CONF_SETTINGS)).orElse(null)) + .filter(Objects::nonNull) + .filter(Files::exists) + .map(MavenRepositoryDefaultResolver::parseSettings) + .filter(Objects::nonNull) + .map(handler::get) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } else { + return null; + } } public Path fromEnvironmentVariables() { - final String vm2 = System.getenv(M2_HOME); - log.debug("[fromEnvironmentVariables] M2_HOME={}", vm2); - if (vm2 != null) { - return handler.get(Paths.get(vm2, "repository").toString()); + if (hasFallback) { + final String vm2 = System.getenv(M2_HOME); + log.debug("[fromEnvironmentVariables] M2_HOME={}", vm2); + if (vm2 != null) { + return handler.get(Paths.get(vm2, "repository").toString()); + } + log.debug("[fromEnvironmentVariables] Could not get m2 from environment."); } - log.debug("[fromEnvironmentVariables] Could not get m2 from environment."); return 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 585e197c1ce3e..f3c3f81f11458 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 @@ -60,7 +60,9 @@ import javax.management.ReflectionException; import org.apache.xbean.finder.util.Files; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; @@ -98,6 +100,16 @@ private ComponentManager newManager() { return newManager(new File("target/test-dependencies")); } + @BeforeAll + static void setup() { + System.setProperty("talend.component.manager.m2.fallback", "true"); + } + + @AfterAll + static void teardown() { + System.clearProperty("talend.component.manager.m2.fallback"); + } + @Test void doubleClose() { final ComponentManager instance = ComponentManager.instance(); diff --git a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java index 8a265f3a8b3d1..1dc4d95e20d55 100644 --- a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java +++ b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/HttpClientFactoryImplTest.java @@ -244,7 +244,7 @@ void requestWithXMLXXE() throws IOException { final byte[] bytes; String xmlContent = " ]>&xxe;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); @@ -273,7 +273,7 @@ void requestWithInvalidXML() throws IOException { final byte[] bytes; String xmlContent = "invalid;"; try (final BufferedReader in = - new BufferedReader(new StringReader(xmlContent))) { + new BufferedReader(new StringReader(xmlContent))) { bytes = in.lines().collect(joining("\n")).getBytes(StandardCharsets.UTF_8); } httpExchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bytes.length); diff --git a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryResolverTest.java b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryResolverTest.java index a179b40b4c275..b14d19ba45e28 100644 --- a/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryResolverTest.java +++ b/component-runtime-manager/src/test/java/org/talend/sdk/component/runtime/manager/service/MavenRepositoryResolverTest.java @@ -70,6 +70,7 @@ public Path get(final String path) { @BeforeAll static void setup() throws IOException { + System.setProperty("talend.component.manager.m2.fallback", "true"); final Path repository = Paths.get(new File("target/test-classes").getAbsolutePath()); Files.createDirectories(repository.resolve(M2_REPOSITORY)); } 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 0c1a368bda922..d87aba914df3c 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 @@ -113,9 +113,7 @@ public ContainerManager(final DependenciesResolutionConfiguration dependenciesRe this.logInfoLevelMapping = logInfoLevelMapping; this.containerInitializer = containerInitializer; this.resolver = dependenciesResolutionConfiguration.getResolver(); - this.rootRepositoryLocation = ofNullable(dependenciesResolutionConfiguration.getRootRepositoryLocation()) - .filter(Files::exists) - .orElseGet(() -> PathFactory.get(System.getProperty("user.home", "")).resolve(".m2/repository")); + this.rootRepositoryLocation = dependenciesResolutionConfiguration.getRootRepositoryLocation(); if (log.isDebugEnabled()) { log.debug("Using root repository: " + this.rootRepositoryLocation.toAbsolutePath()); From b8d4da953961f82fcda18546087ebd50c6eeb118 Mon Sep 17 00:00:00 2001 From: Emmanuel GALLOIS Date: Thu, 30 Oct 2025 16:28:48 +0100 Subject: [PATCH 5/5] feat(QTDI-2145): disable kitap tests --- .../java/org/talend/sdk/component/singer/kitap/KitapTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/singer-parent/component-kitap/src/test/java/org/talend/sdk/component/singer/kitap/KitapTest.java b/singer-parent/component-kitap/src/test/java/org/talend/sdk/component/singer/kitap/KitapTest.java index 950a0c67b7016..eccfae9e39dd5 100644 --- a/singer-parent/component-kitap/src/test/java/org/talend/sdk/component/singer/kitap/KitapTest.java +++ b/singer-parent/component-kitap/src/test/java/org/talend/sdk/component/singer/kitap/KitapTest.java @@ -38,6 +38,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.io.TempDir; @@ -101,6 +102,7 @@ static void resetIO() { testIO.set(); } + @Disabled @Test void discover() throws IOException { final Kitap kitap = new Kitap(new SingerArgs("--config", config.toAbsolutePath().toString(), "--discover"), @@ -113,6 +115,7 @@ void discover() throws IOException { stdout.toString("UTF-8")); } + @Disabled @Test void readAll() throws IOException { final Kitap kitap = new Kitap(new SingerArgs("--config", config.toAbsolutePath().toString()),