我只是在学习lein,我想从Java来源使用
由Clojure源中的deftype创建的类。基本内容未涵盖
教程,我无法使其正常工作。

问题在于Java源代码无法导入Clojure类,因为它尚未导入
已被编译。而且Clojure类没有编译,因为编译被中止了
由Java来源提供。

我举一个最小的例子:

  • 使用以下项创建一个新项目:
    lein new app javafoo
    
  • 添加到project.clj
    :aot :all
    :java-source-paths ["src/java"]
    
  • 放入src/javafoo/core.clj中:
    (ns javafoo.core)
    (deftype PPoint [x y])
    
  • 放入src/java/JavaFoo.java中:
    package foo.java;
    import javafoo.core.PPoint;
    
    public class JavaFoo {
        public static void main(String[] args) {
            System.out.println("JavaFoo");
        }
    }
    
  • 尝试编译
    lein compile
    

  • 它失败,返回package javafoo.core doesn't exist
    所以现在我必须
  • 注释掉:java-source-paths
  • 编译
  • 取消注释:java-source-paths
  • 编译

  • 终于可以了。有没有办法让它从一开始就起作用?

    最佳答案

    将此行添加到您的project.clj中:

    :prep-tasks [["compile" "javafoo.core"] "javac"]
    

    09-15 22:54