gpt4 book ai didi

java - Lein 无法将 jar 添加到 uberjar

转载 作者:行者123 更新时间:2023-12-02 08:44:35 26 4
gpt4 key购买 nike

我正在构建一个简单的 Web 应用程序,它依赖于几个预编译的 jar,我想将其部署在 Heroku 上。我将这些 jar 放入 resources 文件夹中,并将以下几行添加到我的 project.clj 中:

:resource-paths ["resources/jsesh-6.5.5.jar"
"resources/jseshGlyphs-6.5.5.jar"
"resources/java-cup-11b-runtime.jar"
"resources/java-cup-11b.jar"
"resources/qenherkhopeshefUtils-6.5.5.jar"]

现在我可以使用lein run -m hieroglyphs.web运行该项目;然而,当我用 lein uberjar 编译所有内容并尝试时

java -cp ./target/hieroglyphs-standalone.jar clojure.main -m hieroglyphs.web

程序启动,但在尝试访问这些 jar 中定义的类之一时崩溃,并出现 java.lang.NoClassDefFoundError:

java.lang.NoClassDefFoundError: jsesh/mdcDisplayer/preferences/DrawingSpecification

我应该做一些额外的事情,以便在编译后可以访问 jar 中定义的类吗?

所有代码都可以在这里找到:https://github.com/macleginn/jsesh-web

最佳答案

仅仅拥有一个资源目录是没有帮助的。您将需要一个合适的本地 Maven 存储库。幸运的是,制作一个并不难。

步骤:

  1. Install Maven如果需要的话
  2. 在源存储库中创建一个 lib 文件夹
  3. :repositories {"local""file:lib"} 添加到您的 project.clj
  4. 对于每个依赖项,运行类似 mvn deploy:deploy-file -Dfile=resources/jsesh-6.5.5.jar -DartifactId=jsesh -Dversion=6.5.5 -DgroupId=jsesh -Dpackaging=jar -Durl=file:lib (适用于 jsesh jar)。特别注意 artifactIdgroupIdversion
  5. 为每个 jar 添加适当的 :dependencies 项。例如对于我在第 4 步中所做的操作,[jsesh/jsesh "6.5.5"]
  6. 对每个依赖项重复步骤 4 和 5

您需要将 lib 文件夹提交到源代码管理,但现在可以删除 resources 文件夹和 :resource-paths来自 project.clj

的位

(主要基于 https://gist.github.com/stuartsierra/3062743 的注释)

关于java - Lein 无法将 jar 添加到 uberjar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com