Chcę napisać program w Scali, a jego częścią ma być np generator danych z kodu podanego w jakimś TextArea - ogólnie chodzi mi o kompilację kodu w locie, potem jego wykonania, pobrania instancji jakiejś ustalonej klasy generującej dane i odpytywaniem jej o kolejne dane.
Problemem jest zrobienie tej funkcjonalności (czyli osadzenie kompilatora w projekcie) tak, aby kompilacja przebiegała bezproblemowo zarówno jeśli odpalę program spod FSC (czy tam scalac) jak i pod SBT komendą 'run'.
Próbowałem na kilka sposobów, tzn wklejałem skrawki kodu znalezione w blogach na necie, ale problem dalej nierozwiązany. Aktualnie kompilacja przebiega pomyślnie jeśli odpalę program spod FSC (względnie scalac też pewnie by zadziałał), ale komendą 'sbt run' już nie zadziała.
Z tego co wyczytałem np na https://github.com/harrah/xsbt/wiki/FAQ (dział How do I use the Scala interpreter in my code?) problem leży w classloaderach, ale nie jestem specem od classloaderów i niedługo szału chyba od nich dostanę.
Jak na razie projekt składa się z dwóch plików:
- definicja kompilacji: lemontree-testbed/project/LemonTreeTestbedBuild.scala - http://4programmers.net/Pastebin/1762
- plik źródłowy: lemontree-testbed/src/main/scala/com/github/tarsa/lemontree/LemonTreeTestbed.scala - http://4programmers.net/Pastebin/1763
W obecnej postaci, przy odpalaniu komendy 'sbt run' wyświetlany jest następujący komunikat:
[error] (run-main) scala.tools.nsc.FatalError: object List does not have a member apply
w momencie kompilacji, tzn linijka 55. kodu źródłowego.
Ma ktoś pomysł jak to ogarnąć?