从Clojoure调用Java非常简单明了,但反过来已被证明是不可预测的。
它们似乎有两种方式:
1)以下类别
i) import clojure.java.api.Clojure; ,
ii) import clojure.lang.IFn;
2) 将clojure编译成uberjar,然后将其导入java代码。
我选择了第二个选项,因为它更直接。
这是clojure代码
(ns com.test.app.service
(:gen-class
:name com.test.app.service
:main false
:methods [^{:static true} [returned [int] int]]))
(defn returned
[number]
(* 2 number))
(defn -returned
[number]
(returned number))
这是Java代码。
package com.s.profile;
import java.util.*;
import com.microsoft.azure.serverless.functions.annotation.*;
import com.microsoft.azure.serverless.functions.*;
import com.test.app.service;
/**
* Azure Functions with HTTP Trigger.
*/
public class Function {
/**
* This function listens at endpoint "/api/hello". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" {your host}/api/hello
* 2. curl {your host}/api/hello?name=HTTP%20Query
*/
@FunctionName("hello")
public HttpResponseMessage<String> hello(
@HttpTrigger(name = "req", methods = {"get", "post"}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String query = request.getQueryParameters().get("name");
String name = request.getBody().orElse(query);
if (name == null) {
return request.createResponse(400, "Please pass a name on the query string or in the request body");
} else {
service.returned(4);
context.getLogger().info("process data" );
return request.createResponse(200, "Hellos, " + name );
}
}
}
当我做出“service.returned(4);”时,系统永远不会返回。我不太明白为什么对我来说,它会像函数没有从Clojure返回一样关闭,但我看不到原因。
只是为了添加一些上下文,我已经尝试过它,因为它是一个简单的hello world java应用程序,它只是打印出结果并且它的工作原理。当我尝试在 Azure 函数中实现它时。
我按照这些指示,它似乎解决了类没有找到的错误。似乎当运行这个命令时
mvn azure-functions:run
它不会自动查找所有导入的库。你要么用
请查看运行示例的问题:
如何直接从Java调用Clojure函数
我建议首先简化您的代码,然后在Azure中一次添加一行代码,以防某些交互导致问题。
问题内容: 对于“从Java调用Clojure”而言,大多数Google热门歌曲都已过时,建议您使用它clojure.lang.RT来编译源代码。假设您已经从Clojure项目构建了一个jar并将其包含在类路径中,那么您能否帮助您清楚地说明如何从Java调用Clojure? 问题答案: 从Clojure 1.6.0开始,有一种新的首选方式来加载和调用Clojure函数。现在,此方法优于直接调用RT
我按照本教程使用Leiningen从Eclipse中的Java调用Clojure。我想在Clojure中编写游戏的AI,其余的则在Android操作系统的LibGDX中编写。 完成Clojure端后,我使用lein命令将其打包到jar文件中(#lein编译,#lein运行,#lein uberjar)。 我通过右键单击project添加jar文件 我的问题发生在我执行游戏时。 我收到这个错误: 我
问题内容: 我有Clojure功能。 源代码: https://github.com/8protons/url62/blob/master/src/url62/core.clj 我需要从Java执行此功能。 我尝试使用这样的代码: 但这不起作用: 问题答案: 您忘记了Clojure命名空间: 这是项目结构: 和文件: 这是调用嵌入式Clojure函数的Java类: Clojure文件: Cloju
在Java里面调用 Clojure 提前编译的Clojure函数如果是静态的函数的话,那么它们可以被java程序调用。可以通过把函数的元数据项: :static 设置为 true 来达到这个目的。语法是这样的: (ns <em>namespace</em> (:gen-class :methods [#^{:static true} [<em>function-name</em> [<e
问题内容: 我创建了一个xPages应用程序,该应用程序使用了位于服务器端javascript库中的许多服务器端javascript代码功能。 现在,我有一些Java代码位于java设计元素中,我想使用它们来调用javascript函数。 我确实知道从Java调用javascript是不合逻辑的,但是我想所有服务器端javascript都已编译为java,因此我认为可能可以获取所生成的已编译jav
问题内容: 从python调用Java的最佳方法是什么?(对我来说,jython和RPC不是一个选择)。 我听说过JCC:http : //pypi.python.org/pypi/JCC/1.9 一个用于从C / Python调用Java的C 代码生成器,但这需要编译所有可能的调用。我希望有另一个解决方案。 我听说过JPype:http ://jpype.sourceforge.net/ 教程: