Leiningen编译顺序? [英] Leiningen compilation order?

查看:155
本文介绍了Leiningen编译顺序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是学习如何 lein ,我想从Java源使用
a类由 deftype 在Clojure源。这不包括在基本的
教程,我不能让它正常工作。

I'm just learning how to lein, and I'd like to use from a Java source a class created by deftype in a Clojure source. This wasn't covered in the basic tutorial and I can't get it to work properly.

问题是Java源不能导入Clojure类,因为它还没有编译
。和Clojure类不编译,因为编译是中止的
由Java源。

The problem is that Java source can't import Clojure class, since it hasn't been compiled yet. And Clojure class isn't compiled, since compilation is aborted by the Java source.

我给一个最小的例子:


  1. 使用以下项目创建新项目:

  1. Create a new project with:

lein new app javafoo


  • 添加到 project.clj

    :aot :all
    :java-source-paths ["src/java"]
    


  • 插入 src / javafoo / core.clj

  • Put into 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");
        }
    }
    


  • 尝试编译

  • Try to compile

    lein compile
    


  • 它不能通过包javafoo.core不存在
    现在我必须

    It fails with package javafoo.core doesn't exist. So now I have to


    1. 注释:java-source-paths

    2. 编译

    3. 取消注释:java-source-paths

    4. 编译

    1. Comment out :java-source-paths
    2. Compile
    3. Uncomment :java-source-paths
    4. Compile

    有没有办法让它从一开始就工作?

    It finally works. Is there a way to make it work from the start?

    推荐答案

    将这一行添加到您的项目。 clj

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

    这篇关于Leiningen编译顺序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆