使用环和 gradle 到 html 页面的路径

path to html page using ring and gradle

我的文件夹结构是这样的

src
    main
        clojure
               .../core.clj
        webapp
              WEB-INF
                     index.html

在我的 core.clj 中,我有一个 main 码头功能

(ns com.lapots.platform.web.core
    (:use ring.adapter.jetty)
    (:use com.lapots.platform.web.router.core)
    (:require [ring.middleware.reload :refer [wrap-reload]])
    (:import [org.eclipse.jetty.server.handler StatisticsHandler])
    (:gen-class))

(def a-minute 60000)

(defn conf
    [server]
    (let [stats-handler (StatisticsHandler.)
          default-handler (.getHandler server)]
        (.setHandler stats-handler default-handler)
        (.setHandler server stats-handler)
        (.setStopTimeout server a-minute)
        (.setStopAtShutdown server true)))

(def app
    (-> routes
        wrap-reload))

(defn -main [& args]
    (run-jetty app {:port 3000 :configurator conf :join? false}))

router/core.clj 有这个代码

(ns com.lapots.platform.web.router.core
    (:require [compojure.core :refer [defroutes GET ANY]]
              [liberator.core :refer [defresource resource]]
              [ring.util.response :as resp]))

(defresource rest-handler
             :handle-ok "rest response"
             :etag "fixed-etag"
             :available-media-types ["text/html"])

(defn wrapped-file-response [request]
    (println "Attempt to read index.html")
    (resp/resource-response "index.html" {:root "resources"}))

(defroutes routes
           (GET "/" request rest-handler)
           (GET "/home" request wrapped-file-response))

我启动 jetty 服务器作为典型的 gradle 任务

task startServer(dependsOn: classes, type: JavaExec) {
    main = 'com.lapots.platform.web.core'
    classpath = sourceSets.main.runtimeClasspath
}

但无法解析 index.html 文件。 (/ returns 正确 rest response 消息)。

如何为 routes 指定 html 页面的路径?

您没有显示您的 build.gradle 所以我无法确定您的类路径是如何配置的。如果您使用的是默认值,那么问题是您的 index.html 文件在类路径中不可用,因为它应该在 ${rootDir}/src/main/resources 下(这是 resource/non-code 文件的默认位置,应该包含在类路径)和 resources 子目录中,因为您的 ring.util.response/resource-response :root 配置为 resource.

因此您的 index.html 应该位于以下路径下:${rootDir}/src/main/resources/resources/index.html.