【问题标题】:In a Java file, how do I import Java packages installed via Maven via Clojure's project.clj dependencies list?在 Java 文件中,如何通过 Clojure 的 project.clj 依赖项列表导入通过 Maven 安装的 Java 包?
【发布时间】:2020-05-14 15:07:59
【问题描述】:

我有一个 Clojure/Lein 项目,并且我通过通常的 Java 互操作范式成功地使用了我在 Clojure 代码中创建的 Java 类(在 ./src/com/mypackage/MyClass.java 中)。但是现在我想增强MyClass,所以在MyClass中我想通过project.clj依赖列表导入我通过Maven安装的Java包,但是import javax.mail.Message之类的报错:“无法解析导入javax.mail ”。诚然,我对 Java 和 JVM 非常熟悉。如何让 MyClass 通过 project.clj 依赖项列表了解我通过 Maven 安装的内容。

(我已经通过我的 Clojure 代码中的 project.clj 依赖项列表成功使用了通过 Maven 安装的 Java 包。)

这是我来自 project.clj 的依赖项:

  :dependencies [[org.clojure/clojure "1.10.0"]
                 [clj-http "2.0.0"]
                 [cheshire "5.9.0"]
                 [org.jsoup/jsoup "1.8.3"]
                 [javax.mail/javax.mail-api "1.6.0"]
                 [com.amazonaws/aws-java-sdk "1.11.714"]]

【问题讨论】:

  • 你能用你的project.clj文件更新你的问题吗(尤其是:dependencies部分)?

标签: maven clojure clojure-java-interop


【解决方案1】:

请使用project.clj 文件的内容更新您的问题。

作为猜测,您可能有错误的依赖格式。它应该看起来像:

[javax.mail/javax.mail-api "1.6.0"]

您可以查看详情at Maven Central。我应该如何找到正确的坐标?用谷歌搜索一下

maven  central  javax.mail.Message

它会将您带到正确的 Maven 中心页面。


更新:

这是一个有效的 java 示例文件:

package demo;
import javax.mail.Message;
public class Calc {
  public static Message msg;

  public static void show() {
    System.out.println( msg );
  }
}

以及来自project.clj:dependencies(注意后缀CLJ,而不是CLI):

  :dependencies [
                 [org.clojure/clojure "1.10.1"]
                 [prismatic/schema "1.1.12"]
                 [tupelo "0.9.173"]

                 [javax.mail/mail "1.4"]
                ;[javax.mail/javax.mail-api "1.6.0"]  ; also works
                ]

和结果:

~/expr/demo > lein clean; lein test
Compiling 2 source files to /home/alan/expr/demo/target/default+test+test/class-files

lein test _bootstrap

-------------------------------
   Clojure 1.10.1    Java 13
-------------------------------

lein test tst.demo.core
Calling Calc/show
null

Ran 2 tests containing 0 assertions.
0 failures, 0 errors.

【讨论】:

  • 谢谢。我确实弄错了,它是[javax.mail/mail "1.4"],但我把它改成了[javax.mail/javax.mail-api "1.6.0"],我仍然有同样的问题。
猜你喜欢
  • 2012-06-06
  • 2013-09-23
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2019-12-31
  • 2020-11-14
相关资源
最近更新 更多