Skip to content

CAMEL-26494: camel-jbang - camel run --dev with a source directory does not reload the routes when a file in the test folder changes - #28874

Open
davsclaus wants to merge 2 commits into
mainfrom
fix/CAMEL-26494
Open

davsclaus wants to merge 2 commits into
mainfrom
fix/CAMEL-26494

Conversation

@davsclaus

@davsclaus davsclaus commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Claude Code on behalf of davsclaus

CAMEL-26494

camel run --dev --source-dir watches every file under the source directory, except the data folders of --data-dir (CAMEL-25670). The test folder of a project (the layout of camel-jbang-examples, run with camel test run) holds the Citrus tests and their data (payloads, compose.yaml, citrus-application.properties), none of them routes. Yet each change there reloaded the routes ("Routes reloaded summary (total:1 started:1 changed:0)"), which restarted every route for nothing.

Changes

  • RunPipeline.sourceDirReloadPattern adds !test/** to the pattern, next to the data-folder excludes. The Camel Main runner of the exported project (CamelMainRunner.reloadArgs) uses the same pattern.
  • The whole folder is excluded, not the test names. The first version excluded !**/*.citrus.*, which missed *.citrus-it.yaml, *.feature and the test data (see the review). Citrus tests go in test, in the YAML DSL that matches the Camel CLI.
  • No change in camel-support: the folder excludes of CAMEL-25670 already skip test/ as a whole, and testing/ or routes/ are still watched.
  • Docs: a short note in the "Data folders in the source directory" section of camel-jbang-running.adoc.

At startup a Citrus test file already loads no routes (it gets a no-op loader), so only the reload was affected.

Tests

  • RunTest.sourceDirReloadPatternLeavesTheDataDirsOut: the expected patterns now include !test/**.
  • RouteWatcherReloadDataDirTest.testTestFolderIsNotWatched (camel-core): with that pattern, a test of any name (.citrus.it.yaml, .citrus-it.yaml, .feature) or a data file under test/ is not a change, whether new or edited. A route under routes/ or testing/ still is.

Ran RouteWatcherReloadDataDirTest (8 tests) and RunTest (25 tests): all green. Not tried in a live camel run --dev session.

🤖 Generated with Claude Code

https://claude.ai/code/session_016Y4dDiMc7mxmdVoQiGSMh8

@davsclaus davsclaus added this to the 4.24.0 milestone Nov 2, 2026
@davsclaus davsclaus added the dsl label Nov 2, 2026
@github-actions

github-actions Bot commented Nov 2, 2026

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 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.

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • core/camel-core
  • docs
  • dsl/camel-jbang/camel-jbang-core
  • dsl/camel-jbang/camel-jbang-run

🔁 13 tests passed only after a retry on JDK 21 (13 retried attempts)

Recovered flaky tests on JDK 21 (13)
Module Test Failed attempts First failure
core/camel-core ClusteredRoutePolicyFactoryTest.testClusteredRoutePolicyFactoryAddRoute 1 expected: <Started> but was: <Starting>
core/camel-core FileConsumerBeginExpressionRenameStrategyTest.testRenameSuccess 1 mock://report Body of message: 0. Expected: <Hello Paris> but was: <>
core/camel-core FileRecursiveDepthTest.testMin1Max1 1 mock://result Message with body b was expected but not found in []
core/camel-core DefaultCamelContextSuspendResumeRouteStartupOrderTest.testSuspendResume 1 Assertion condition defined as a Lambda expression in org.apache.camel.impl.DefaultCamelContextSuspendResumeRouteStartupOrderTest null within 100 milliseconds.
core/camel-core RecipientListParallelStreamingTest.testRecipientListParallelStreaming 1 mock://result Body of message: 0. Expected: <b> but was: <c>
core/camel-core ThreadsRejectedExecutionTest.testThreadsRejectedAbortNoRedelivery 1 Expected 0 messages at mock:error but got 2 ==> expected: <0> but was: <2>
core/camel-core AggregateDiscardOnFailureTest.testAggregateDiscardOnAggregationFailureMiddle 1 mock://aggregated Body of message: 1. Expected: <DEF> but was: <DE>
core/camel-core AggregateTimeoutWithNoExecutorServiceTest.testThreadUsedForEveryAggregatorWhenDefaultExecutorServiceUsed 1 mock://result18 Body of message: 0. Expected: <Message 4> but was: <Message 1>
core/camel-core DistributedOptimisticLockFailingTest.testEverySecondOneFails 1 expected: <25> but was: <24>
core/camel-core RoutingSlipSentEventOrderTest.dynamicRouterWithAsyncSteps 1 Time taken of step1 includes step2: {step2=303, step1=415} ==> expected: <true> but was: <false>
core/camel-core ThrottlingExceptionRoutePolicyRaiseHalfOpenAfterTest.testRaisedHalfOpenAfterHalfOpensTheCircuit 1 Condition with Lambda expression in org.apache.camel.processor.throttle.ThrottlingExceptionRoutePolicyRaiseHalfOpenAfterTest was not fulfilled within 10 seconds.
core/camel-core ThrottlingExceptionRoutePolicySuspendRouteTest.testSuspendedRouteStaysSuspendedWhenHalfOpen 1 The half open timer should not have fired yet ==> expected: <opened> but was: <half opened>
core/camel-core TotalRequestsThrottlerRateDecreaseTest.testDecreaseWhileExchangesWaitForPermits 1 Condition with Lambda expression in org.apache.camel.processor.throttle.requests.TotalRequestsThrottlerRateDecreaseTest was not fulfilled within 5 seconds.

ℹ️ These tests did not fail the build. Surefire retried them and they passed.
Retries are enabled project-wide by surefire.rerunFailingTestsCount in parent/pom.xml.


🔬 Scalpel shadow comparison — Scalpel: 28 of 713 tested, 3 compile-only — current: 6 all tested

Maveniverse Scalpel detected 28 affected modules (current approach: 6).

Skip-tests mode would test 28 modules (4 direct + 26 downstream), skip tests for 3 (generated code, meta-modules)

⚠️ Modules only in Scalpel (25)
  • camel-console
  • camel-core
  • camel-datasonnet
  • camel-groovy
  • camel-hl7
  • camel-jactl
  • camel-javascript
  • camel-joor
  • camel-jq
  • camel-jsonpath
  • camel-main
  • camel-management
  • camel-mvel
  • camel-ognl
  • camel-platform-http-jolokia
  • camel-python
  • camel-python3
  • camel-quickjs
  • camel-saxon
  • camel-spring-xml
  • camel-stax
  • camel-xml-io-dsl
  • camel-xml-jaxb-dsl
  • camel-xml-jaxb-dsl-test-definition
  • camel-xml-jaxb-dsl-test-spring
Modules only in current approach (3)
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-launcher-container
Modules Scalpel would test (28)
  • camel-console ← downstream of org.apache.camel:camel-core
  • camel-core ← core/camel-core/src/test/java/org/apache/camel/support/RouteWatcherReloadDataDirTest.java
  • camel-datasonnet ← downstream of org.apache.camel:camel-core
  • camel-groovy ← downstream of org.apache.camel:camel-core
  • camel-hl7 ← downstream of org.apache.camel:camel-core
  • camel-jactl ← downstream of org.apache.camel:camel-core
  • camel-javascript ← downstream of org.apache.camel:camel-core
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-run ← dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/RunPipeline.java
  • camel-joor ← downstream of org.apache.camel:camel-core
  • camel-jq ← downstream of org.apache.camel:camel-core
  • camel-jsonpath ← downstream of org.apache.camel:camel-core
  • camel-main ← downstream of org.apache.camel:camel-core
  • camel-management ← downstream of org.apache.camel:camel-core
  • camel-mvel ← downstream of org.apache.camel:camel-core
  • camel-ognl ← downstream of org.apache.camel:camel-core
  • camel-platform-http-jolokia ← downstream of org.apache.camel:camel-core
  • camel-python ← downstream of org.apache.camel:camel-core
  • camel-python3 ← downstream of org.apache.camel:camel-core
  • camel-quickjs ← downstream of org.apache.camel:camel-core
  • camel-saxon ← downstream of org.apache.camel:camel-core
  • camel-spring-xml ← downstream of org.apache.camel:camel-core
  • camel-stax ← downstream of org.apache.camel:camel-core
  • camel-xml-io-dsl ← downstream of org.apache.camel:camel-core
  • camel-xml-jaxb-dsl ← downstream of org.apache.camel:camel-core
  • camel-xml-jaxb-dsl-test-definition ← downstream of org.apache.camel:camel-core
  • camel-xml-jaxb-dsl-test-spring ← downstream of org.apache.camel:camel-core
Modules with tests skipped (3)
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • coverage

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • dsl/camel-jbang/camel-jbang-core: 2 test(s) disabled on GitHub Actions
  • core/camel-core: 4 test(s) disabled on GitHub Actions

💡 Manual integration tests recommended:

You modified dsl/camel-jbang/camel-jbang-core. The related integration tests in dsl/camel-jbang/camel-jbang-it are excluded from CI. Consider running them manually:

mvn verify -f dsl/camel-jbang/camel-jbang-it -Djbang-it-test
All tested modules (519 modules, 12m 31s total)

Total reactor time: 12m 31s

Module Duration Status
Camel :: MINA 47.8s SUCCESS
Camel :: Infinispan :: Remote 47.5s SUCCESS
Camel :: OpenApi Java 43.5s SUCCESS
Camel :: Main 32.8s SUCCESS
Camel :: Quartz 32.1s SUCCESS
Camel :: Resilience4j 31.2s SUCCESS
Camel :: Jetty 28.6s SUCCESS
Camel :: AI :: Neo4j 28.6s SUCCESS
Camel :: Undertow 26.5s SUCCESS
Camel :: AI :: Milvus 23.1s SUCCESS
Camel :: Console 21.3s SUCCESS
Camel :: Micrometer 20.1s SUCCESS
Camel :: Test :: Spring :: JUnit6 19.7s SUCCESS
Camel :: AI :: Weaviate 19.6s SUCCESS
Camel :: SSH 19.3s SUCCESS
Camel :: JAXB 17.6s SUCCESS
Camel :: Test :: JUnit6 16.5s SUCCESS
Camel :: Test :: JUnit5 16.3s SUCCESS
Camel :: REST OpenApi 14.7s SUCCESS
Camel :: Platform HTTP :: Vert.x 14.2s SUCCESS
Camel :: jOOR 13.7s SUCCESS
Camel :: Kamelet 13.7s SUCCESS
Camel :: XML DSL with camel-xml-io 13.6s SUCCESS
Camel :: CSV 12.8s SUCCESS
Camel :: Jackson 12.1s SUCCESS
Camel :: AI :: PGVector 11.3s SUCCESS
Camel :: HTTP :: Common 10.8s SUCCESS
Camel :: Vert.x :: HTTP 10.6s SUCCESS
Camel :: AI :: Qdrant 10.5s SUCCESS
Camel :: Zip Deflater 10.0s SUCCESS
Camel :: Groovy 8.4s SUCCESS
Camel :: AI :: Observability API 8.0s SUCCESS
Camel :: Platform HTTP 7.5s SUCCESS
Camel :: CXF :: REST 7.0s SUCCESS
Camel :: REST Postman 5.9s SUCCESS
Camel :: Webhook 5.1s SUCCESS
Camel :: AI :: Pinecone 4.8s SUCCESS
Camel :: AI :: Tool 4.8s SUCCESS
Camel :: Jackson 3 4.7s SUCCESS
Camel :: CXF :: Transport 4.6s SUCCESS
Camel :: Gson 4.1s SUCCESS
Camel :: Spring Main 4.1s SUCCESS
Camel :: JDBC 4.0s SUCCESS
Camel :: Jackson XML 3.9s SUCCESS
Camel :: Platform HTTP :: Main 3.9s SUCCESS
Camel :: Google :: Common 3.3s SUCCESS
Camel :: Base64 3.1s SUCCESS
Camel :: AI :: LangChain4j :: Core 2.6s SUCCESS
Camel :: AI :: Resource 2.6s FAILURE
Camel :: Attachments 2.3s SUCCESS
Camel :: Vert.x :: Common 2.0s SUCCESS
Camel :: Jackson Protobuf 1.9s SUCCESS
Camel :: Cron 1.8s SUCCESS
Camel :: Jackson Avro 1.8s SUCCESS
Camel :: Knative API 1.6s SUCCESS
Camel :: HTTP :: Base 1.5s SUCCESS
Camel :: Infinispan :: Common 1.1s SUCCESS
Camel :: Spring 1.1s SUCCESS
Camel :: CXF :: Common :: Spring 0.6s SUCCESS
Camel :: Jetty :: Common 0.6s SUCCESS
Camel :: CXF :: Common 0.6s SUCCESS
Camel :: Test Infra :: Core 0.5s SUCCESS
Camel :: Test Infra :: Artemis 0.5s SUCCESS
Camel :: DHIS2 :: Parent 0.3s SUCCESS
Camel :: AI :: A2A n/a
Camel :: AI :: ChatScript n/a
Camel :: AI :: Deep Java Library n/a
Camel :: AI :: Docling n/a
Camel :: AI :: Hugging Face n/a
Camel :: AI :: KServe n/a
Camel :: AI :: LangChain4j :: Agent n/a
Camel :: AI :: LangChain4j :: Chat n/a
Camel :: AI :: LangChain4j :: Embedding n/a
Camel :: AI :: LangChain4j :: EmbeddingStore n/a
Camel :: AI :: LangChain4j :: Ingest n/a
Camel :: AI :: LangChain4j :: Tokenizer n/a
Camel :: AI :: LangChain4j :: Web Search n/a
Camel :: AI :: MCP Server n/a
Camel :: AI :: MCP Server API n/a
Camel :: AI :: Observability n/a
Camel :: AI :: OpenAI n/a
Camel :: AI :: Semantic Evaluation n/a
Camel :: AI :: Semantic OpenAI n/a
Camel :: AI :: Semantic TypeSafe AI n/a
Camel :: AI :: Semantic Wolf Defender n/a
Camel :: AI :: TensorFlow Serving n/a
Camel :: AI :: TypeSafe AI n/a
Camel :: AMQP n/a
Camel :: AS2 :: API n/a
Camel :: AS2 :: Component n/a
Camel :: ASN.1 n/a
Camel :: AWS CloudTrail n/a
Camel :: AWS Config n/a
Camel :: AWS Redshift Data n/a
Camel :: AWS Rekognition n/a
Camel :: AWS Security Hub n/a
Camel :: AWS Step Functions n/a
Camel :: AWS Timestream n/a
Camel :: AWS2 :: Transcribe n/a
Camel :: AWS2 Athena n/a
Camel :: AWS2 Bedrock n/a
Camel :: AWS2 CW n/a
Camel :: AWS2 Comprehend n/a
Camel :: AWS2 DDB n/a
Camel :: AWS2 EC2 n/a
Camel :: AWS2 ECS n/a
Camel :: AWS2 EKS n/a
Camel :: AWS2 Eventbridge n/a
Camel :: AWS2 IAM n/a
Camel :: AWS2 KMS n/a
Camel :: AWS2 Kinesis n/a
Camel :: AWS2 Lambda n/a
Camel :: AWS2 MQ n/a
Camel :: AWS2 MSK n/a
Camel :: AWS2 Parameter Store n/a
Camel :: AWS2 Polly n/a
Camel :: AWS2 S3 n/a
Camel :: AWS2 S3 Vectors n/a
Camel :: AWS2 SES n/a
Camel :: AWS2 SNS n/a
Camel :: AWS2 SQS n/a
Camel :: AWS2 STS n/a
Camel :: AWS2 Secrets Manager n/a
Camel :: AWS2 Textract n/a
Camel :: AWS2 Translate n/a
Camel :: ActiveMQ 5.x n/a
Camel :: ActiveMQ 6.x n/a
Camel :: Alibaba Cloud :: EventBridge n/a
Camel :: Alibaba Cloud :: Function Compute (FC) n/a
Camel :: Alibaba Cloud :: Key Management Service (KMS) n/a
Camel :: Alibaba Cloud :: Message Service (MNS) n/a
Camel :: Alibaba Cloud :: OSS n/a
Camel :: Alibaba Cloud :: Short Message Service (SMS) n/a
Camel :: Alibaba Cloud :: Simple Log Service (SLS) n/a
Camel :: Alibaba Cloud :: Tablestore (OTS) n/a
Camel :: All Components Sync point n/a
Camel :: All Core Sync point n/a
Camel :: Apicurio Registry n/a
Camel :: ArangoDB n/a
Camel :: Archetypes n/a
Camel :: Archetypes :: API Component n/a
Camel :: Archetypes :: Component n/a
Camel :: Archetypes :: Data Format n/a
Camel :: Archetypes :: Java Router n/a
Camel :: Archetypes :: Main n/a
Camel :: Assembly n/a
Camel :: Asterisk n/a
Camel :: Atmosphere WebSocket Servlet n/a
Camel :: Atom n/a
Camel :: Avro n/a
Camel :: Avro RPC n/a
Camel :: Azure :: CosmosDB n/a
Camel :: Azure :: Event Grid n/a
Camel :: Azure :: Event Hubs n/a
Camel :: Azure :: Files n/a
Camel :: Azure :: Functions n/a
Camel :: Azure :: Key Vault n/a
Camel :: Azure :: Schema Registry n/a
Camel :: Azure :: ServiceBus n/a
Camel :: Azure :: Storage Blob n/a
Camel :: Azure :: Storage Datalake n/a
Camel :: Azure :: Storage Queue n/a
Camel :: Barcode n/a
Camel :: Bean validator n/a
Camel :: BeanIO n/a
Camel :: Bindy n/a
Camel :: Bonita n/a
Camel :: Box :: Component n/a
Camel :: Braintree n/a
Camel :: CBOR n/a
Camel :: CM SMS n/a
Camel :: CXF :: REST :: Spring n/a
Camel :: CXF :: SOAP n/a
Camel :: CXF :: SOAP :: Spring n/a
Camel :: CXF :: Transport :: Spring n/a
Camel :: Caffeine n/a
Camel :: Camunda n/a
Camel :: Cassandra CQL n/a
Camel :: Catalog :: Camel Catalog n/a
Camel :: Catalog :: Camel Report Maven Plugin n/a
Camel :: Catalog :: Camel Route Parser n/a
Camel :: Catalog :: Console n/a
Camel :: Catalog :: Dummy Component n/a
Camel :: Catalog :: Maven n/a
Camel :: Catalog :: Suggest (deprecated) n/a
Camel :: Chaos n/a
Camel :: Chunk n/a
Camel :: ClickHouse n/a
Camel :: ClickUp n/a
Camel :: CloudEvents n/a
Camel :: CoAP n/a
Camel :: Cometd n/a
Camel :: Common Telemetry n/a
Camel :: Common Tracing (deprecated) n/a
Camel :: Component DSL n/a
Camel :: Consul n/a
Camel :: Core n/a
Camel :: CouchDB n/a
Camel :: Couchbase n/a
Camel :: Coverage n/a
Camel :: Crypto n/a
Camel :: Crypto PGP n/a
Camel :: CyberArk Vault n/a
Camel :: DFDL n/a
Camel :: DHIS2 n/a
Camel :: DHIS2 API n/a
Camel :: DNS n/a
Camel :: DSL :: CLI Connector n/a
Camel :: DSL :: CLI Debug n/a
Camel :: DSL :: Modeline n/a
Camel :: Dapr n/a
Camel :: DataSonnet n/a
Camel :: Debezium :: Common n/a
Camel :: Debezium :: DB2 n/a
Camel :: Debezium :: Maven Plugin n/a
Camel :: Debezium :: MongoDB n/a
Camel :: Debezium :: MySQL n/a
Camel :: Debezium :: Oracle n/a
Camel :: Debezium :: PostgreSQL n/a
Camel :: Debezium :: SQL Server n/a
Camel :: Debugging n/a
Camel :: Diagram n/a
Camel :: Disruptor n/a
Camel :: Docker n/a
Camel :: Docs n/a
Camel :: Drill n/a
Camel :: Dropbox n/a
Camel :: DuckDB n/a
Camel :: Dynamic Router n/a
Camel :: Ehcache n/a
Camel :: ElasticSearch Rest Client n/a
Camel :: Elasticsearch Java API Client n/a
Camel :: Endpoint DSL n/a
Camel :: Endpoint DSL :: Support n/a
Camel :: Event n/a
Camel :: Exec n/a
Camel :: FHIR n/a
Camel :: FOP n/a
Camel :: FTP n/a
Camel :: Fastjson n/a
Camel :: File Watch n/a
Camel :: FlatPack n/a
Camel :: Flink n/a
Camel :: Flowable n/a
Camel :: Fory n/a
Camel :: Freemarker n/a
Camel :: Geocoder n/a
Camel :: Git n/a
Camel :: GitHub2 n/a
Camel :: Google :: BigQuery n/a
Camel :: Google :: Calendar n/a
Camel :: Google :: Drive n/a
Camel :: Google :: Firestore n/a
Camel :: Google :: Functions n/a
Camel :: Google :: Mail n/a
Camel :: Google :: PubSub n/a
Camel :: Google :: Secret Manager n/a
Camel :: Google :: Sheets n/a
Camel :: Google :: Speech To Text n/a
Camel :: Google :: Storage n/a
Camel :: Google :: Text To Speech n/a
Camel :: Google :: Vertex AI n/a
Camel :: Google :: Vision n/a
Camel :: GraphQL n/a
Camel :: Grok n/a
Camel :: HL7 n/a
Camel :: HTTP n/a
Camel :: HashiCorp :: Key Vault n/a
Camel :: HazelCast n/a
Camel :: Hibernate n/a
Camel :: HiveMQ n/a
Camel :: Huawei Cloud :: DMS n/a
Camel :: Huawei Cloud :: FaceRecognition n/a
Camel :: Huawei Cloud :: FunctionGraph n/a
Camel :: Huawei Cloud :: IAM n/a
Camel :: Huawei Cloud :: ImageRecognition n/a
Camel :: Huawei Cloud :: OBS n/a
Camel :: Huawei Cloud :: SimpleNotification n/a
Camel :: IBM :: Cloud Object Storage n/a
Camel :: IBM :: Secrets Manager n/a
Camel :: IBM :: Watson Discovery n/a
Camel :: IBM :: Watson Language n/a
Camel :: IBM :: Watson Speech to Text n/a
Camel :: IBM :: Watson Text to Speech n/a
Camel :: IBM :: watsonx.ai n/a
Camel :: IBM :: watsonx.data n/a
Camel :: ISO-8583 n/a
Camel :: Iggy n/a
Camel :: Ignite n/a
Camel :: Infinispan :: Embedded n/a
Camel :: InfluxDB n/a
Camel :: InfluxDB2 n/a
Camel :: Integration Tests n/a
Camel :: Integration Tests :: Stream Caching Tests n/a
Camel :: JBang :: Console n/a
Camel :: JBang :: Core n/a
Camel :: JBang :: MCP n/a
Camel :: JBang :: Plugin :: Generate n/a
Camel :: JBang :: Plugin :: Kubernetes n/a
Camel :: JBang :: Plugin :: MCP n/a
Camel :: JBang :: Plugin :: TUI n/a
Camel :: JBang :: Plugin :: Validate n/a
Camel :: JBang :: Run n/a
Camel :: JCR n/a
Camel :: JCache n/a
Camel :: JGroups n/a
Camel :: JGroups Raft n/a
Camel :: JIRA n/a
Camel :: JMS n/a
Camel :: JMX n/a
Camel :: JOOQ n/a
Camel :: JPA n/a
Camel :: JQ n/a
Camel :: JSON validator n/a
Camel :: JSON-B n/a
Camel :: JSONATA n/a
Camel :: JSon Path n/a
Camel :: JSonApi n/a
Camel :: JSoup n/a
Camel :: JTA n/a
Camel :: Jackson 3 Avro n/a
Camel :: Jackson 3 Protobuf n/a
Camel :: Jackson 3 XML n/a
Camel :: Jactl n/a
Camel :: Jandex n/a
Camel :: Jasypt n/a
Camel :: Java DSL with jOOR n/a
Camel :: Java Flight Recorder n/a
Camel :: Java Template Engine n/a
Camel :: Java Toolbox for IBM i n/a
Camel :: JavaScript n/a
Camel :: Jolt n/a
Camel :: Jsch n/a
Camel :: Jslt n/a
Camel :: Kafka n/a
Camel :: Kafka :: Common n/a
Camel :: Kafka :: Share n/a
Camel :: Kamelet Main n/a
Camel :: Kamelet Main :: Support n/a
Camel :: Keycloak n/a
Camel :: Knative Component n/a
Camel :: Knative HTTP n/a
Camel :: Kubernetes n/a
Camel :: Kudu n/a
Camel :: LDAP n/a
Camel :: LDIF n/a
Camel :: LZF n/a
Camel :: Launcher :: Container n/a
Camel :: Long-Running-Action n/a
Camel :: Lucene n/a
Camel :: Lumberjack n/a
Camel :: MDC n/a
Camel :: MINA SFTP n/a
Camel :: MLLP n/a
Camel :: MTConnect n/a
Camel :: MVEL n/a
Camel :: Mail n/a
Camel :: Mail :: Microsoft OAuth n/a
Camel :: Management n/a
Camel :: MapStruct n/a
Camel :: Master n/a
Camel :: Maven Plugins :: Camel API Component Plugin n/a
Camel :: Maven Plugins :: Camel Maven Plugin n/a
Camel :: Maven Plugins :: OpenApi REST DSL Generator n/a
Camel :: Metrics n/a
Camel :: MicroProfile :: Config n/a
Camel :: MicroProfile :: Fault Tolerance n/a
Camel :: MicroProfile :: Health n/a
Camel :: Micrometer :: Observability 2 n/a
Camel :: Micrometer :: Observation (deprecated) n/a
Camel :: Micrometer :: Prometheus n/a
Camel :: Milo n/a
Camel :: MinIO (Deprecated) n/a
Camel :: MongoDB n/a
Camel :: MongoDB GridFS n/a
Camel :: Mustache n/a
Camel :: MyBatis n/a
Camel :: Nats n/a
Camel :: Netty n/a
Camel :: Netty HTTP n/a
Camel :: OAIPMH n/a
Camel :: OAuth n/a
Camel :: OCSF n/a
Camel :: OData n/a
Camel :: OGNL (deprecated) n/a
Camel :: OPA n/a
Camel :: Observability Services n/a
Camel :: Olingo2 (Deprecated) :: API n/a
Camel :: Olingo2 (Deprecated) :: Component n/a
Camel :: Olingo4 (Deprecated) :: API n/a
Camel :: Olingo4 (Deprecated) :: Component n/a
Camel :: Once n/a
Camel :: OpenAPI :: Validator n/a
Camel :: OpenFGA n/a
Camel :: OpenFeature n/a
Camel :: OpenSearch Java API Client n/a
Camel :: OpenStack n/a
Camel :: OpenTelemetry (deprecated) n/a
Camel :: Opentelemetry 2 n/a
Camel :: Opentelemetry Metrics n/a
Camel :: OptaPlanner n/a
Camel :: PDF n/a
Camel :: PLC4X n/a
Camel :: PQC n/a
Camel :: Paho (deprecated) n/a
Camel :: Paho MQTT 5 n/a
Camel :: Parquet Avro n/a
Camel :: PgEvent n/a
Camel :: PgReplicationSlot n/a
Camel :: Platform HTTP :: Jolokia n/a
Camel :: Printer n/a
Camel :: Protobuf n/a
Camel :: PubNub n/a
Camel :: Pulsar n/a
Camel :: Python n/a
Camel :: Python 3 n/a
Camel :: QuickFIX/J n/a
Camel :: QuickJS n/a
Camel :: RSS n/a
Camel :: Reactive Streams n/a
Camel :: Reactor n/a
Camel :: Redis n/a
Camel :: Resilience4j :: Micrometer n/a
Camel :: ResourceResolver GitHub n/a
Camel :: RobotFramework n/a
Camel :: RocketMQ n/a
Camel :: RxJava n/a
Camel :: SAP NetWeaver n/a
Camel :: SMB n/a
Camel :: SMPP n/a
Camel :: SNMP n/a
Camel :: SOAP n/a
Camel :: SPIFFE n/a
Camel :: SQL n/a
Camel :: SWIFT n/a
Camel :: Salesforce n/a
Camel :: Salesforce :: CodeGen n/a
Camel :: Salesforce :: Maven Plugin n/a
Camel :: Saxon n/a
Camel :: Schematron n/a
Camel :: ServiceNow :: Component n/a
Camel :: ServiceNow :: Maven Plugin n/a
Camel :: Servlet n/a
Camel :: Shell n/a
Camel :: Shiro n/a
Camel :: Simple JMS n/a
Camel :: Simple JMS2 n/a
Camel :: Slack n/a
Camel :: Smooks :: Parent n/a
Camel :: SnakeYAML n/a
Camel :: Solr n/a
Camel :: Splunk HEC n/a
Camel :: Spring AI :: Chat n/a
Camel :: Spring AI :: Embeddings n/a
Camel :: Spring AI :: Image n/a
Camel :: Spring AI :: Vector Store n/a
Camel :: Spring Batch n/a
Camel :: Spring Cloud Config n/a
Camel :: Spring JDBC n/a
Camel :: Spring LDAP n/a
Camel :: Spring RabbitMQ n/a
Camel :: Spring Redis n/a
Camel :: Spring Security n/a
Camel :: Spring Web Services n/a
Camel :: Spring XML n/a
Camel :: StAX n/a
Camel :: State Store n/a
Camel :: Stitch n/a
Camel :: Stream n/a
Camel :: StringTemplate n/a
Camel :: Stripe n/a
Camel :: Syslog n/a
Camel :: TOON n/a
Camel :: Tahu n/a
Camel :: Tar File n/a
Camel :: Telegram n/a
Camel :: Telemetry :: Dev n/a
Camel :: Test :: Citrus n/a
Camel :: Test :: Main :: JUnit5 n/a
Camel :: Test :: Main :: JUnit6 n/a
Camel :: Test :: Spring :: JUnit5 n/a
Camel :: Test Infra :: All test services n/a
Camel :: Test Infra :: Server Message Block n/a
Camel :: Thrift n/a
Camel :: Thymeleaf n/a
Camel :: Tika n/a
Camel :: Twilio n/a
Camel :: Twitter n/a
Camel :: UBL n/a
Camel :: Undertow Spring Security n/a
Camel :: UniVocity Parsers n/a
Camel :: Velocity n/a
Camel :: Vert.x :: WebSocket n/a
Camel :: Vertx n/a
Camel :: Wasm n/a
Camel :: Weather n/a
Camel :: Web3j n/a
Camel :: Whatsapp n/a
Camel :: Wordpress n/a
Camel :: Workday n/a
Camel :: XChange n/a
Camel :: XJ n/a
Camel :: XML DSL Jaxb :: Test :: Definition n/a
Camel :: XML DSL Jaxb :: Test :: Spring n/a
Camel :: XML DSL with camel-xml-jaxb n/a
Camel :: XML Security n/a
Camel :: XMPP n/a
Camel :: XSLT Saxon n/a
Camel :: YAML DSL n/a
Camel :: YAML DSL :: Deserializers n/a
Camel :: YAML DSL :: Maven Plugins n/a
Camel :: YAML DSL :: Validator n/a
Camel :: YAML DSL :: Validator Maven Plugin n/a
Camel :: Zendesk n/a
Camel :: Zip File n/a
Camel :: Zookeeper n/a
Camel :: Zookeeper Master n/a
Camel :: gRPC n/a
Camel :: iCal n/a

Top 20 slowest modules:

  • Camel :: MINA (47.8s)
  • Camel :: Infinispan :: Remote (47.5s)
  • Camel :: OpenApi Java (43.5s)
  • Camel :: Main (32.8s)
  • Camel :: Quartz (32.1s)
  • Camel :: Resilience4j (31.2s)
  • Camel :: Jetty (28.6s)
  • Camel :: AI :: Neo4j (28.6s)
  • Camel :: Undertow (26.5s)
  • Camel :: AI :: Milvus (23.1s)
  • Camel :: Console (21.3s)
  • Camel :: Micrometer (20.1s)
  • Camel :: Test :: Spring :: JUnit6 (19.7s)
  • Camel :: AI :: Weaviate (19.6s)
  • Camel :: SSH (19.3s)
  • Camel :: JAXB (17.6s)
  • Camel :: Test :: JUnit6 (16.5s)
  • Camel :: Test :: JUnit5 (16.3s)
  • Camel :: REST OpenApi (14.7s)
  • Camel :: Platform HTTP :: Vert.x (14.2s)

⚙️ View full build and test results

@gnodet-bot gnodet-bot left a comment

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.

LGTM. No issues found.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

…es not reload the routes when a Citrus test changes

The reload pattern of dev mode with a source directory now leaves out the Citrus tests of the project (*.citrus.*,
such as test/orders.citrus.it.yaml, run with camel test run), as it does the data folders of --data-dir. They are not
routes, so a change of them only restarted every route for nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>

@gnodet-bot gnodet-bot left a comment

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.

Clean, focused bug fix. The !**/*.citrus.* exclude pattern correctly filters Citrus test files from route reload watching, is handled before includes by RouteWatcherReloadStrategy, and CamelMainRunner already delegates to the updated method. Tests and docs match the fix. ✅

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@Croway

Croway commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

!**/*.citrus.* only covers some of the files camel-jbang treats as Citrus tests. RunFiles.isCitrusTest (CAMEL-26495) and the Citrus 5.1.0 default names also include *.citrus-it.yaml, *.citrus-test.yaml (and .xml/.groovy) and *.feature, and editing those still reloads the routes.

Live camel run --dev --source-dir=proj, one file edited at a time:

Edited file base this PR
test/orders.citrus.it.yaml reload no reload
test/orders.citrus-it.yaml reload reload
test/orders.feature reload reload

(reload = Routes reloaded summary (total:1 started:1 changed:0))

I checked *,!**/*.citrus.*,!**/*.citrus-*,!**/*.feature with the real RunPipeline.sourceDirReloadPattern and the RouteWatcherReloadStrategy file filter. It leaves all of these out, and orders.camel.yaml and test/stub.camel.yaml still reload. Citrus tests written as Java/XML classes (OrdersIT.java) can't be excluded by name, so a sentence in the docs may help.

Claude Code on behalf of Croway

@davsclaus

Copy link
Copy Markdown
Contributor Author

I think we should frankly just exclude by default all from test/** and leave that as a folder for citrus.
we don't support citrus java DSL or the likes, the goal is its yaml dsl that fits with the camel cli low-code philosophy.

…watch the test folder

Leave the whole test folder out of the reload pattern, instead of the
*.citrus.* names: it holds the Citrus tests of the project, whatever
their name (*.citrus-it.yaml, *.feature, ...), and their data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@davsclaus davsclaus changed the title CAMEL-26494: camel-jbang - camel run --dev with a source directory does not reload the routes when a Citrus test changes CAMEL-26494: camel-jbang - camel run --dev with a source directory does not reload the routes when a file in the test folder changes Nov 3, 2026
@davsclaus

Copy link
Copy Markdown
Contributor Author

Done in 26b4f50: the reload pattern now excludes !test/** instead of !**/*.citrus.*. That covers every Citrus name (.citrus-it.yaml, .feature, ...) and the test data in that folder (payloads, compose.yaml). routes/ and testing/ are still watched. Docs updated.

@Croway thanks for the live check and the list of names.

Claude Code on behalf of davsclaus

@gnodet-bot gnodet-bot left a comment

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.

Previous reviews were on the stale !**/*.citrus.* approach — that code is entirely replaced. The new !test/** folder-level exclusion is correct, simpler, and well-tested across both layers (core strategy in RouteWatcherReloadDataDirTest + pattern generation in RunTest). Documentation accurately describes the behavior. No issues found.

✅ LGTM

This review was generated by an AI agent, Hermès on behalf of @gnodet.

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.

3 participants