在Java文件中,如何通过Clojure的project.clj依赖项列表导入通过Maven安装的Java包?



我有一个Clojure/Lein项目,我成功地使用了一个Java类,通过通常的Java互操作范式在我的Clojure代码中创建(./src/com/mypackage/MyClass.java年(。但是现在我想增强MyClass,所以在MyClass中,我想通过project.clj依赖项列表导入我通过Maven安装的Java包,但是import javax.mail.Message等给出错误:"无法解析导入javax.mail"。诚然,我对Java和JVM非常感兴趣。我怎样才能让MyClass通过project.clj依赖项列表了解我通过Maven安装的东西。

(我已经成功地使用了通过 Maven 通过 Clojure 代码中的project.clj依赖项列表安装的 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文件的内容更新您的问题。

作为猜测,您的依赖项格式可能不正确。它应如下所示:

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

您可以在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.

最新更新