你好 ,
我有两个 Leiningen 项目,它们可以编译良好,并且在使用一个通用包含文件中的某些函数之前运行良好。
这两个项目都在 tomcat 服务器上运行
第一个项目创建了一个 .jar 文件,用作 Java 代码库,这些代码是从 Java 源代码编译的。
它是用以下方式创建的
lein new eu.oca.jclojure
并以这种方式编译
lein uberjar
另一个项目是一个完整的 Clojure 网络应用程序,同样在 tomcat 上运行。
它是用以下方式创建的
lein new compojure sidonie-admin
并以以下方式编译
lein ring uberwar
此通文件包含在源的 Clojure 代码中,如下所示
在第二个项目中使用 (load-file "src/sidonie_admin2/sidonie-common.clj"),在第一个项目中使用 (and 这两个项目都无错误编译)
(load-file "../sidonie-admin2/src/sidonie_admin2/sidonie-common.clj")
错误发生在运行时
问题出在包含在 war 文件和可能不在 jar 文件中的通用定义的文件上,我在运行一个项目时遇到了这个错误
java.io.FileNotFoundException: ../sidonie-admin2/src/sidonie_admin2/sidonie-common.clj
在其他项目中也有这个错误
由: java.io.FileNotFoundException: src/sidonie_admin2/sidonie-common.clj (没有此类型文件或目录)
这是同一类型的错误,抱怨 JVM 字节代码中缺少源文件!
我承认,在打印错误堆栈跟踪时,需要一些信息来给出错误行号。
所以问题很简单,我该如何在两个项目中共享通用文件且没有错误呢?
最好的问候 ,
Damien
以下是服务器日志的一些输出
08-Oct-2019 12:40:51.275 SEVERE [http-nio-127.0.0.1-8080-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [eu.oca.ApplicationConfig] in context with path [/Sidonie] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.ExceptionInInitializerError] with root cause
java.io.FileNotFoundException: ../sidonie-admin2/src/sidonie_admin2/sidonie-common.clj (没有此类型文件或目录)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at clojure.lang.Compiler.loadFile(Compiler.java:7314)
at clojure.lang.RT$3.invoke(RT.java:320)
at eu.oca.jclojure__init.load(Unknown Source)
at eu.oca.jclojure__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForNam
...
un(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
还有
08-Oct-2019 12:21:42.761 SEVERE [http-nio-127.0.0.1-8080-exec-11] org.apache.catalina.core.StandardContext.listenerStart 向 sidonie_admin2.listener 类的监听器实例发送初始事件(初始化上下文)时出错
编译时出现语法错误 (sidonie_admin2/handler.clj:32:1)。
at clojure.lang.Compiler.load(Compiler.java:7647)
at clojure.lang.RT.loadResourceScript(RT.java:381)
at clojure.lang.RT.loadResourceScript(RT.java:372)
at clojure.lang.RT.load(RT.java:463)
at clojure.lang.RT.load(RT.java:428)
at clojure.core$load$fn__6824.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvo
...
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
由: java.io.FileNotFoundException: src/sidonie_admin2/sidonie-common.clj (没有此类型文件或目录)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInp