지난 주말에 저는 Clojure가 기존 Java 생태계와 어떻게 상호 작용할 수 있는지 자세히 알아보기로 결정했습니다. 과제는 간단했습니다.
Quarkus 프레임워크를 기반으로 Clojure에서 간단한 웹 프레임워크를 만듭니다.
시설:
(defn send-hello-world [] "Hello World") (defn routes [] [{:method "GET" :path "/hello" :handler send-hello-world}])
일부 정의:
Quarkus에서 앱을 시작하는 것은 매우 쉽습니다. 이 튜토리얼을 따르면 됩니다. 마지막 명령이 quarkus create && cd code-with-quarkus인 것을 볼 수 있듯이, 그 후에는 code-with-quarkus 폴더를 열 수 있습니다. 즐겨 사용하는 IDE에서 이 명령을 사용하면 Quarkus 앱의 기본 구조가 생성되며 quarkus dev로 실행할 수 있습니다.
대상 폴더(컴파일된 앱이 있는 폴더)에 .clj 파일을 포함하도록 Quarkus를 구성해야 하며,
내의 pom.xml에 이 구성을 추가하면 됩니다.
<resources> <resource> <directory>/</directory> <includes> <include>*.clj</include> </includes> </resource> </resources>
앞서 언급했듯이 main 폴더와 동일한 위치에 경로를 선언하기 위한 하나의 구조를 정의했습니다. 그런 다음 아래 코드를 사용하여 core라는 파일이 포함된 quarkus_clj라는 폴더를 만들었습니다.
(ns quarkus-clj.core) (defn send-hello-world [] "Hello World") (defn routes [] [{:method "GET" :path "/hello" :handler send-hello-world}])
마법이 일어나는 곳은 바로 여기?!
우선 Quarkus 앱 내에 Clojure를 설치해야 합니다. pom.xml
에 종속성을 추가하면 됩니다.
<dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.11.1</version> </dependency>
이제 GreetingResource.java 파일과 해당 테스트를 삭제할 수 있습니다. 같은 위치에 Starting.java
파일을 만듭니다.작동 방식을 설명하는 댓글을 작성합니다
@ApplicationScoped public class Starting { //Setup app routes public void setupRouter(@Observes Router router) { // Load Clojure core; IFn require = Clojure.var("clojure.core", "require"); // Load quarkus-clj.core namespace require.invoke(Clojure.read("quarkus-clj.core")); // Load the route list function IFn routesFn = Clojure.var("quarkus-clj.core", "route"); // Invoke the function with no parameters PersistentVector routesVector = (PersistentVector) routesFn.invoke(); //For each route in routes vector for (Object route : routesVector) { /**Get the route map, example {:method "GET" :path "/hello" :handler send-hello-world} */ PersistentArrayMap routeMap = (PersistentArrayMap) route; //Get :path value String path = (String) routeMap.valAt(Clojure.read(":path")); //Get :handler function IFn handlerRoute = (IFn) routeMap.valAt(Clojure.read(":handler")); //Get :method value String method = (String) routeMap.valAt(Clojure.read(":method")); //Create a handler to exec handler function Handler<RoutingContext> handlerFn = (RoutingContext context) -> { String result = (String) handlerRoute.invoke(); context.response().end(result); }; //Config the route in quarkus router.route(HttpMethod.valueOf(method), path).handler(handlerFn); } } }
이제 다음을 실행하면 됩니다. quarkus dev 선언된 경로를 열고 결과를 확인하세요!
이것은 Quarkus 앱 내에서 Clojure를 사용하여 동적 경로를 생성하는 방법을 보여주는 간단한 예입니다. 몇 단계만으로 우리는 두 생태계를 연결하고 기본 라우팅 시스템을 설정했습니다. 자유롭게 이 기반을 확장하고 Clojure 및 Quarkus를 통해 다른 가능성을 탐색해 보세요!
위 내용은 실제 예제를 사용하여 Java에서 Clojure 호출(Clojure Quarkus)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!