mac*_*inn 3 java jar clojure uberjar leiningen
我正在构建一个简单的Web应用程序,该应用程序依赖于几个预编译的jar,并且要在Heroku上进行部署。我将罐子放到一个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"]
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用运行项目了lein run -m hieroglyphs.web;但是,当我编译所有内容lein uberjar并尝试
java -cp ./target/hieroglyphs-standalone.jar clojure.main -m hieroglyphs.web
Run Code Online (Sandbox Code Playgroud)
程序启动,但是java.lang.NoClassDefFoundError当尝试访问这些jar中定义的类之一时,崩溃并显示为:
java.lang.NoClassDefFoundError: jsesh/mdcDisplayer/preferences/DrawingSpecification
Run Code Online (Sandbox Code Playgroud)
我是否应该做些额外的事情,以便编译后可以访问jar中定义的类?
所有代码都可以在这里找到:https : //github.com/macleginn/jsesh-web
仅拥有资源目录无济于事。您将需要一个适当的本地Maven存储库。幸运的是,制作一个并不难。
脚步:
lib在源存储库中创建一个文件夹:repositories {"local" "file:lib"}到您的project.cljmvn 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)的东西。特别注意artifactId,groupId和version:dependencies为每个罐子添加适当的物品。例如我在步骤4中所做的[jsesh/jsesh "6.5.5"]您需要提交lib的文件夹到源代码控制,但现在可以删除该resources文件夹和:resource-paths从位project.clj
(很大程度上基于https://gist.github.com/stuartsierra/3062743的注释)
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |