Skip to content

CAMEL-22544: jbang dependency update supports multi-file and --scan-routes#22208

Open
gnodet wants to merge 2 commits intomainfrom
calm-hisser
Open

CAMEL-22544: jbang dependency update supports multi-file and --scan-routes#22208
gnodet wants to merge 2 commits intomainfrom
calm-hisser

Conversation

@gnodet
Copy link
Copy Markdown
Contributor

@gnodet gnodet commented Mar 23, 2026

JIRA: CAMEL-22544

Summary

  • Enhanced camel dependency update command to accept multiple target files (pom.xml or Java source files with //DEPS)
  • Added --scan-routes flag to sync dependencies from route definitions:
    • Manages only org.apache.camel dependencies
    • Preserves non-Camel dependencies (e.g., guava, netty)
    • Removes unused Camel dependencies no longer needed by routes
    • Idempotent on re-execution (no duplicates)
  • Route definition files (YAML, XML) passed as arguments are automatically classified and used as source files for the export pipeline
  • In scan-routes mode, existing Camel //DEPS in Java target files are stripped before running the export pipeline, so only actual route-based dependencies are resolved
  • Added input validation preventing mixed pom.xml and Java source files as update targets
  • Fixed PrepareCamelJBangCommandsMojo regex to match this (not just main) as constructor arg, fixing stale metadata generation
  • Regenerated all jbang command metadata and docs

Test plan

  • Existing DependencyUpdateTest (Maven pom.xml with quarkus, spring-boot, main runtimes) passes
  • Scan-routes Maven tests use fixture files from src/test/resources/dependency-update/ (no Init+Export at runtime):
    • --scan-routes adds new deps from routes (Maven, all runtimes)
    • --scan-routes removes unused Camel deps from pom.xml
    • --scan-routes adds and removes deps simultaneously
  • JBang //DEPS tests (inline fixtures):
    • Multi-file JBang //DEPS update
    • --scan-routes preserves non-Camel //DEPS in JBang files
    • --scan-routes is idempotent on re-execution

@github-actions github-actions bot added the dsl label Mar 23, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using build-all, build-dependents, skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@gnodet gnodet marked this pull request as draft March 23, 2026 21:20
…outes

- Accept multiple target files (pom.xml or Java source files with //DEPS)
- Add --scan-routes flag to sync dependencies from route definitions:
  - Manages only org.apache.camel dependencies
  - Preserves non-Camel dependencies
  - Removes unused Camel dependencies
  - Idempotent on re-execution
- Route files (YAML, XML) passed as arguments are used as source files
  for the export pipeline dependency resolution
- In scan-routes mode, Camel //DEPS in Java target files are stripped
  before export to prevent stale deps from being resolved

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gnodet gnodet marked this pull request as ready for review March 23, 2026 21:29
@github-actions
Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • dsl/camel-jbang/camel-jbang-core
All tested modules (26 modules)
  • Camel :: Coverage
  • Camel :: Coverage [pom]
  • Camel :: JBang :: Core
  • Camel :: JBang :: Core [jar]
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: Integration tests [jar]
  • Camel :: JBang :: MCP
  • Camel :: JBang :: MCP [jar]
  • Camel :: JBang :: Main
  • Camel :: JBang :: Main [jar]
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Edit [jar]
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Generate [jar]
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: Kubernetes [jar]
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: Route Parser [jar]
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Testing [jar]
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: JBang :: Plugin :: Validate [jar]
  • Camel :: Launcher
  • Camel :: Launcher [jar]
  • Camel :: Launcher :: Container
  • Camel :: Launcher :: Container [pom]

assertThat(content2).contains("//DEPS org.apache.camel:camel-bom:");
}

private void prepareMavenProject(RuntimeType rt) throws Exception {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling jbang init and export for each test is not good for tests in CI, since it will take time to invoke and write files. I suggest to have the files ready at src/test/resources, this way the test class is less hassle to maintain and easier to understand.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. The new scan-routes Maven tests now use fixture files from src/test/resources/dependency-update/ (pom.xml per runtime + route YAML), copied into the temp working directory at test setup time — no Init+Export invocation needed. The existing shouldDependencyUpdate test still uses Init+Export since it validates the "no updates on fresh project" invariant which requires exact dependency matching.

Claude Code on behalf of Guillaume Nodet


import static org.assertj.core.api.Assertions.assertThat;

class DependencyUpdateJBangTest extends CamelCommandBaseTestSupport {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having a single DependencyUpdateTest class is easier to maintain, instead 2 files to the same DependencyUpdate command.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — merged all tests from DependencyUpdateJBangTest into DependencyUpdateTest. Single test class now covers Maven dependency update, scan-routes (Maven), and JBang //DEPS scenarios.

Claude Code on behalf of Guillaume Nodet

- Merge DependencyUpdateJBangTest into DependencyUpdateTest (single test class)
- Use fixture files from src/test/resources for scan-routes Maven tests
  instead of calling Init+Export at runtime
- Add input validation preventing mixed pom.xml and Java targets
- Guard addMavenDeps against targetLineNumber == -1
- Clean up blank lines left by removeMavenDeps
- Clarify isCamelDependency javadoc on group prefix matching
- Fix PrepareCamelJBangCommandsMojo regex to match 'this' (not just 'main')
  as constructor arg, fixing stale metadata generation
- Regenerate all jbang command metadata and docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants