如何将几个Clojure Web(Compojure)应用程序合并为一个?

时间:2017-11-30 17:16:33

标签: clojure leiningen compojure

我已将业务解决方案分解为多个较小的Web应用程序,并使用Lein Compjure插件创建了这些小型Web应用程序。(这样可以加快开发速度)。我现在正尝试将这些Web应用程序合并到一个Web应用程序中,让我们称之为 unifiedapp ,通过创建一个新的lein compojure项目并将较小的Web应用程序添加为依赖项。我将在 unifiedapp 中创建approprite应用程序路由,以便调用来自较小的Web应用程序的正确处理程序。

我面临的问题是,lein不会将war文件作为依赖项,当我尝试为lein compojure项目创建一个简单的jar文件时(小型Web应用程序,它会失败。

编辑:project.clj(这是由 lein new compojure hello-world 生成的)

(defproject hello-world "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :min-lein-version "2.0.0"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [compojure "1.5.1"]
                 [ring/ring-defaults "0.2.1"]]
  :plugins [[lein-ring "0.9.7"]]
  :ring {:handler hello-world.handler/app}
  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring/ring-mock "0.3.0"]]}})

当我运行 lein jar install 时,我收到以下消息:

警告:jar中不存在指定的Main-Class。它可能无法按预期执行。包含main方法的命名空间中可能缺少gen-class指令,或者命名空间未经过AOT编译。

我确实在目标文件夹中看到了一个jar文件,但出于某种原因,它不会将jar文件复制到.m2\repository。因此,尝试包含此jar(此Web应用程序的路由)的父Web应用程序无法看到它。

1 个答案:

答案 0 :(得分:0)

感谢Alan的回应,我改变了方法。我没有通过修改主Web应用程序的project.cj文件来合并源代码 源和资源使用子/子应用程序

(defproject mainwebapp "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :min-lein-version "2.0.0"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [compojure "1.5.1"]
                 [ring/ring-defaults "0.2.1"]]

  :source-paths ["../app1/src" "../app2/src" "../app3/src"  "src"]    
 :resource-paths ["../app1/resources" "../app2/resources" "../app3/resources" ] 

  :plugins [[lein-ring "0.9.7"]]
  :ring {:handler mainwebapp.handler/app}
  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring/ring-mock "0.3.0"]]}})