gpt4 book ai didi

java - 将 java 和 clojure 文件混合在一个包中

转载 作者:行者123 更新时间:2023-12-01 18:26:49 28 4
gpt4 key购买 nike

我在将 clojure 和 java 文件混合编译到单个包中时遇到问题。这些文件彼此之间具有依赖关系,如果它们都只是 java 文件,那么 java 编译器可以处理所有这些。为了使这一点具体化,我想创建一个名为 pkg 的包,其中包含 4 个文件:A.java、b.clj、c.clj 和 D.java。 A.java包含main并创建b.clj中声明的对象,b.clj调用c.clj中的函数并使用类D的对象。如何编写项目文件?

如果我使用

 :prep-tasks ["javac" "compile"]

在项目文件中,我在编译 A.java 时收到一条提示,称 pkg.b 或 pkg.c 中的某些内容未定义。如果我使用

 :prep-tasks ["compile" "javac"]

我收到投诉说类 pkg.D 不存在。如果我尝试

 :prep-tasks [["javac" "pkg/D.java"] "compile" "javac"]

即使我正确设置了 java-source-paths,它也找不到 pkg/D.java。

处理此问题的一种方法是创建 3 个包,一个包含 A.java,一个包含 b.clj 和 c.clj,一个包含 D.java。然后为 D.java 构建一个 jar,为 b 和 c 构建一个 jar,使用 D.jar,为 A 构建一个 jar,使用 bc.jar 和 D.jar。不过很丑。

最佳答案

在单个 lein 项目中,java 和 clojure 源之间不能存在循环依赖关系。正如您正确指出的那样,您可以将项目拆分为多个包以避免循环依赖,但您不需要 3 个包,而只需要 2 个,因为 lein 支持 Clojure -> Java dependencies 。因此,您可以有一个包含 b、c 和 D 的项目,而另一个项目则只包含 A。

另一种选择是在 Clojure 中编写 A,这样您就可以避免多个项目的负担。

关于java - 将 java 和 clojure 文件混合在一个包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com