That's false, building an uberjar has nothing to do wit that. If you're packaging an application typically your -main needs to be AOT compiled, that's why you put :gen-class in your ns declaration. That namespace will get AOT compiled. This still doesn't pose any issues since you shouldn't be doing such side effects in the toplevel. So
(alter-config-file!)
is bad because that code will run during compilation, but in (defn -main [& args]
(alter-config-file!)
(app!))
it will run only after calling -main.