- 
                Notifications
    You must be signed in to change notification settings 
- Fork 50
fix(QTDI-2031): manage dynamic dependencies - w/o MAVEN-INF #1118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR reverts changes from QTDI-693 related to nested repository handling and adds debugging capabilities for dynamic dependencies troubleshooting. The changes simplify classloader behavior by removing nested URL tracking and redundant scanning logic.
Key Changes:
- Removes nested repository special handling and scanning logic that was added in QTDI-693
- Adds debug logging for system information (JVM arguments, classpaths, repository locations)
- Introduces @DynamicDependenciesConfigurationannotation for marking dynamic dependency configurations
Reviewed Changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description | 
|---|---|
| ContainerManager.java | Adds debug logging for system info and repository locations; simplifies root repository resolution | 
| ConfigurableClassLoader.java | Removes nested URL tracking by deleting nestedURLsfield andgetURLs()override | 
| ComponentManager.java | Removes nested repository scanning logic and unused imports | 
| ComponentManagerTest.java | Updates test assertions to reflect reverted behavior (expects 1 dependency instead of 2) | 
| DynamicDependenciesConfiguration.java | New annotation file for marking dynamic dependencies configuration classes | 
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if (nested != null) { | ||
| rootRepo = PathFactory.get(nested.getFile().replace("file:", "")); | ||
| } | ||
| .orElseGet(() -> PathFactory.get(System.getProperty("user.home", "")).resolve(".m2/repository")); | 
    
      
    
      Copilot
AI
    
    
    
      Oct 29, 2025 
    
  
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using an empty string as the default value for 'user.home' system property will cause PathFactory.get(\"\") to be called if the property is not set, which may result in unexpected path resolution behavior. Consider using a more appropriate fallback or handling the null case explicitly.
| .orElseGet(() -> PathFactory.get(System.getProperty("user.home", "")).resolve(".m2/repository")); | |
| .orElseGet(() -> { | |
| String userHome = System.getProperty("user.home"); | |
| if (userHome == null || userHome.isEmpty()) { | |
| userHome = System.getProperty("user.dir"); | |
| if (userHome == null || userHome.isEmpty()) { | |
| throw new IllegalStateException("Neither 'user.home' nor 'user.dir' system properties are set. Cannot determine repository location."); | |
| } | |
| } | |
| return PathFactory.get(userHome).resolve(".m2/repository"); | |
| }); | 

https://qlik-dev.atlassian.net/browse/QTDI-2031
This pull request mainly
Related pull-requests: