Java 在Tomcat中运行Clojure代码
我正在尝试在运行ApacheTomcat7.0.59的Liferay容器中运行portlet。portlet以以下几种方式之一引用Clojure代码:Java 在Tomcat中运行Clojure代码,java,tomcat,clojure,liferay,portlet,Java,Tomcat,Clojure,Liferay,Portlet,我正在尝试在运行ApacheTomcat7.0.59的Liferay容器中运行portlet。portlet以以下几种方式之一引用Clojure代码: 1) :gen class:impl ns(此命名空间是aot编译的,而impl ns命名空间不是) 2) var(“Clojure.core”,“require”).invoke(Clojure.read(ns));然后对返回的IFN调用invoke(ns也是一个非aot编译的命名空间) 3) ring uberwar(这不是一个portle
- 1) :gen class:impl ns(此命名空间是aot编译的,而impl ns命名空间不是)
- 2) var(“Clojure.core”,“require”).invoke(Clojure.read(ns));然后对返回的IFN调用invoke(ns也是一个非aot编译的命名空间)
- 3) ring uberwar(这不是一个portlet)
at clojure.lang.RT.loadResourceScript(RT.java:370)
at clojure.lang.RT.loadResourceScript(RT.java:361)
at clojure.lang.RT.load(RT.java:440)
at clojure.lang.RT.load(RT.java:411)
at clojure.core$load$fn__5066.invoke(core.clj:5641)
at clojure.core$load.doInvoke(core.clj:5640)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at portal_aot_common.CljJobManager.<clinit>(Unknown Source)
... 238 more
Caused by: java.lang.RuntimeException: Unable to resolve symbol: map->obj in this context
at clojure.lang.Util.runtimeException(Util.java:221)
at clojure.lang.Compiler.resolveIn(Compiler.java:6940)
at clojure.lang.Compiler.resolve(Compiler.java:6884)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6845)
at clojure.lang.Compiler.analyze(Compiler.java:6427)
... 285 more
位于clojure.lang.RT.loadResourceScript(RT.java:370)
位于clojure.lang.RT.loadResourceScript(RT.java:361)
在clojure.lang.RT.load处(RT.java:440)
在clojure.lang.RT.load处(RT.java:411)
在clojure.core$load$fn__5066.invoke处(core.clj:5641)
在clojure.core$load.doInvoke(core.clj:5640)
位于clojure.lang.RestFn.invoke(RestFn.java:408)
在clojure.lang.Var.invoke(Var.java:379)
在portal_aot_common.CljJobManager(未知源)
... 238更多
原因:java.lang.RuntimeException:无法在此上下文中解析符号:map->obj
位于clojure.lang.Util.runtimeException(Util.java:221)
位于clojure.lang.Compiler.resolveIn(Compiler.java:6940)
位于clojure.lang.Compiler.resolve(Compiler.java:6884)
位于clojure.lang.Compiler.AnalyzeSymble(Compiler.java:6845)
位于clojure.lang.Compiler.analyze(Compiler.java:6427)
... 285更多
代码不在WEB-INF/classes
目录中,也不在WEB-INF/lib
目录中的jar中;相反,我选择修改catalina.properties
文件,并在common.loader
属性中包含src路径。我还尝试使用Tomcat7的virtualwebapploader virtualClasspath属性
问题是,当它起作用时,它完全起作用。但似乎总有50/50的几率它不起作用,我得到了上面的错误。代码不在jar中(我喜欢能够修改代码并重新启动服务器,而无需安装或构建任何东西)
对于ring uberwar,问题似乎是servlet在tomcat启动时找不到处理程序类,但在我构建war并进行热部署时似乎没有问题lein-ring服务器
工作正常,但实际部署似乎有50/50的成功机会
我正在使用Clojure1.6.0和Java8
如果您对可能发生的事情有任何想法,我们将不胜感激