【问题标题】:Can't import java class in lein repl无法在 lein repl 中导入 java 类
【发布时间】:2014-06-05 18:35:15
【问题描述】:

尝试使用 lein 在 clojure 项目中导入 java 类,然后使用 main 方法连接到 TeamworkPM 的 API。 :)

project.clj

(defproject teamwork "0.1.0-SNAPSHOT"
    :description "FIXME: write description"
    :url "http://example.com/FIXME"
    :license {:name "Eclipse Public License"
              :url  "http://www.eclipse.org/legal/epl-v10.html"}
    :dependencies [[org.clojure/clojure "1.5.1"]
                   [clj-http "0.9.2"]]
    :resource-paths ["src/java/*"]
    :java-source-paths ["src/java/"]
    :javac-options ["-target" "1.6"
                    "-source" "1.6"
                    "-Xlint:-options"])

TeamworkAPI.java 位于src/java/

public class TeamworkAPI {

    public static void main(String[] args) {

        HttpURLConnection connection = null;

        String APIKey = "YOUR_API_KEY_HERE";
        String TeamworkURL = "http://YOUR_TEAMWORKSITE_HERE.teamworkpm.net";

        try {
            URL url = new URL( TeamworkURL + "/projects.json" );
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            String userpassword = APIKey + ":" + "";
            String encodedAuthorization = Base64Coder.encodeString( userpassword );
            connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);

然后我在正确的项目上启动 cider-jack-in....

teamwork.core> (TeamworkAPI. new)

CompilerException java.lang.RuntimeException: Unable to resolve symbol: new in
   this context, compiling:(/tmp/form-init133047100967026670.clj:1:1) 

尝试通过我与外国 API 的一些第一次连接来弄脏我的手 :)

【问题讨论】:

    标签: java clojure leiningen read-eval-print-loop


    【解决方案1】:

    通过互操作创建对象的语法是(TeamworkAPI.),或更旧的(new TeamworkAPI)

    如果您尝试调用该类的静态 main 方法:(TeamworkAPI/main (into-array args))

    【讨论】:

    • 标记为已回答,因为您摇摆不定并回答了帖子标题的问题。
    • 当做“(TeamworkAPI/main(into-aray args))”时,我提出“CompilerException java.lang.RuntimeException:没有这样的命名空间:TeamWorkAPI,正在编译:(/tmp/form-init133047100967026670.clj :1:1)"
    • Doh,“TeamworkAPI”中的“w”是大写的。当我修复此案例时,出现此错误:“ClassNotFoundException TeamworkAPI.java.net.URLClassLoader$1.run (URLClassLoader.java:366)”
    • 哦,我不小心输入了“(TeamworkAPI./main (into-array args))”。它有效!
    • (import 'some.package.TeamWorkAPI),或通过其完整的包限定名引用它。 (编辑我错误的大写,抱歉)