Claus Ibsen created CAMEL-25236:
-----------------------------------
Summary: camel-jbang - camel run --example should work from any
folder for examples that read files
Key: CAMEL-25236
URL: https://issues.apache.org/jira/browse/CAMEL-25236
Project: Camel
Issue Type: Improvement
Components: camel-jbang
Reporter: Claus Ibsen
*Problem*
{{camel run --example=route/content-based-router}} (and other examples that
read or write files, such as {{fail-well/error-handling}}) only works when run
from the example's own folder. The example is extracted (or downloaded) to a
temp folder, but the JVM keeps the working directory it was started in, so
{{file:orders}} reads an auto-created, empty {{./orders}} in the current folder
and the example processes nothing. A JVM cannot change its own working
directory, and setting {{user.dir}} is unsupported.
The TUI works around it by starting the example in a separate process whose
working directory is the example folder. The CLI should not need a different
code path depending on whether an example has files.
*Idea*
Put the example's data files on the classpath (as the routes are), and let
camel-file read them from there, as a kind of virtual ("fake") file system for
the example. For example, camel run could tell camel-file that relative file
paths of this run resolve against the example's files, so {{file:orders}}
consumes the example's {{orders}} folder, wherever {{camel run}} is started.
*Questions to settle*
* Where the virtual file system lives: a camel-file feature (a base directory
or resolver for relative paths, set by camel run for examples), or something in
camel-jbang only.
* Writing: examples also write files ({{parked/}}, {{out/}}). The classpath is
read-only, so writes need a real folder (the extracted temp folder, or a folder
in the current directory), and the user should be able to find what was written.
* Consumer semantics: {{noop}}, idempotent repository, move/delete after
processing, and file watching should behave the same as with a real folder.
* Scope: bundled examples and examples downloaded from GitHub alike; {{camel
export}} of an example should still produce a normal project with real files.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)