当前位置: 首页 > 知识库问答 >
问题:

导致uberimage生成失败的架构

顾宣
2023-03-14

我正在Clojure中开发一个简单的hello world web应用程序。但是,在我将模式库添加到我的项目之后,当我试图使用lein uberjar构建一个uberjar时,我开始出现以下错误。奇怪的是,在使用lein dev启动时,应用程序仍然通过单元测试,并且运行时没有错误。

下面是我使用schema的源文件。为了简洁起见,我省略了其余的源文件,但如果有人想查看其余的文件,请直接询问。

(ns server.api
  (:require [aleph.http :as http]
            [compojure.api.sweet :refer :all]
            [compojure.route :as route]
            [com.stuartsierra.component :as component]
            [ring.middleware.reload :refer [wrap-reload]]
            [ring.util.http-response :refer :all]
            [schema.core :as s]
            [server.logging :refer [wrap-exception-logging wrap-request-logging] :as log]))

(s/defschema Greeting
  {:hello s/Str
   s/Keyword s/Any})

(defn app [db]
  (api
   {:format {:formats [:json-kw]}}
   (middlewares [wrap-request-logging
                 wrap-exception-logging]
                (swagger-ui "/docs" :swagger-docs "/endpoints")
                (swagger-docs "/endpoints"
                 {:info {:title "Hello World Api"}})

                (GET* "/greet" []
                      :summary "Greets someone by name."
                      :description "Greets a person by name, telling them about
                                    the database configuration we're using as well."
                      :return Greeting
                      :query-params [name :- s/Str]
                      (ok {:hello name :with-db db}))

                (route/not-found (not-found {:error "Page not found."})))))

(defrecord Api
  [port env db logger]
  component/Lifecycle

  (start [{:keys [connection] :as component}]
    (if connection
      component
      (do (log/info "Starting Api at port" port "with env" env)
          (let [application (app db)
                handler (if (= env :dev) (wrap-reload application) application)
                conn (http/start-server handler {:port port :join? false})]
            (assoc component :connection conn)))))

  (stop [{:keys [connection] :as component}]
    (if-not connection
      component
      (do (log/info "Stopping Api")
          (.close connection)
          (assoc component :connection nil)))))

(defn new-api [port env]
  (->Api port env nil nil))

我已经尝试过禁用AOT编译,因为这似乎是正常编译和构建uberjar之间的主要区别,但不是骰子。我还在模式源代码中查找了'missing-required-key'键,并确保正确引用了它,这似乎是正确的,因为如果我更改它,模式的测试就会开始失败。

与正常编译相比,创建uberjar时的编译过程还有什么不同?还有什么我可以试试的吗?

共有1个答案

吴安和
2023-03-14

根本原因是swagger-docs-route的输入无效(未给出:version,请参见https://github.com/metosin/ring-swagger/blob/master/src/ring/swagger/swagger2_schema.clj#l13)。当它被添加时,它就会像预期的那样工作。

不过,给定的异常确实很糟糕,现在在最新的快照中得到了修复--对于缺失的字段使用默认值,因此不对其进行编译时模式检查。

另外,建议不要对整个应用程序进行AOTing。参见https://github.com/metosin/compojure-api/issues/129

 类似资料:
  • 我正在按照http://spring.io/guides/gs/consource-web-service/#scratch中提供的分步说明学习如何使用Gradle和Spring-WS使用SOAP web服务。我已经创建了上面URL中指定的文件夹结构(即:c:/src/main/java/hello)并将build.gradle、weatherclient.java、weatherconfigur

  • 我正在创建构建一个jar,其中也将包括它的依赖关系。我正在使用maven阴影插件。但是获取错误。我试图排除传递依赖项,如下所示,仍然得到错误。

  • 我有一个java应用程序的Maven项目。我使用的软件版本如下:Maven 3.6.3,Java 1.8.0_241。 我在这个Maven项目中有一些junit测试,我正试图使用Maven“mvn”命令运行这些测试。当我在我的Maven项目上运行命令“mvn clean test”以运行单元测试时,我得到了下面提到的构建失败。 我在网上看了很多关于上面提到的问题,但是已经好几天没有解决这个问题了。

  • 我的maven版本和信息如下: 如前所述,通过Intellij运行时没有问题。但是当我通过intellij终端或普通终端运行maven命令时,我会得到以下错误。 Maven命令示例。 我的机器上甚至没有java SDK1.5。我可以得到一些帮助在哪里我应该改变这个版本到8这样我可以使一个maven构建请?多谢了。

  • 我已经在我的gradle文件中启用了来使用ProGuard的特性来混淆代码,结果导致一些错误。 注意:动态创建的类实例有1个类强制转换。您可能会考虑显式保留提到的类和/或它们的实现(使用'-keep')。 警告:有309个未解析的类或接口引用。您可能需要添加丢失的库JAR或更新它们的版本。如果您的代码在没有丢失类的情况下运行良好,则可以使用'-dontwarn'选项抑制警告。(http://pro

  • 我正在运行一个React-Native应用程序,但当我试图在android目录下gradlew installDebug时,我得到了一个构建失败。以下是我使用时得到的信息: 这是该项目的回购是从我试图设置应用程序到我的genymotion模拟器,但构建从未完成。 我已经运行了react-native start命令,并设置了与couchbase lite服务器的同步。不确定这是否是相关信息。我对本