我正在使用'lein uberjar'制作我项目的可执行jar文件.正确创建jar并按预期运行.
我只是想知道是否有可能不在生成的.jar中包含我的源.clj文件,因为我打算分发它,我不希望我的源文件可供公众使用.
我正在使用lein 1.7.1
如果lein不可能,如果我只是手动从jar中删除.clj文件,它会工作吗?我做了一个测试并且它有效,我希望确保这样做是安全的.
提前致谢.
我有兴趣在一个可执行的jar文件中构建一个包含所有模块依赖项和外部jar的jar,我将能够运行它java -jar myApp.jar.
我有模块A依赖于模块B.目前我正在使用gradle,我的build.gradle脚本如下所示:
apply plugin: 'fatjar'
description = "A_Project"
dependencies {
compile project(':B_Project')
compile "com.someExternalDependency::3.0"
}
Run Code Online (Sandbox Code Playgroud)
当我通过gradle命令构建它时:clean build fatjar按预期创建一个胖罐"A.jar".但是,如上所述,运行它会导致:
no main manifest attribute, in A.jar
如何修改我的build.gradle文件并指定主类或清单?
我有一个场景,我需要创建一个包含所有模块及其依赖项的多模块maven项目的超级jar.我尝试使用maven shade插件.但它似乎只有在模块级别使用它时才有效.如果我在父pom中添加插件条目,那么构建中断(它会尝试遮蔽父pom)
[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing null with C:\Projects\foo.bar\target\foobar-0.0.1-SNAPSHOT-shaded.pom
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error creating shaded jar: null: NullPointerException -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
它似乎有意义,因为<packaging>父母maven项目是pom.但应该有一些方法为多模块项目创建一个超级jar ...任何想法人???
我使用HDP-2.6.3.0和Spark2包2.2.0.
我正在尝试使用Structured Streaming API编写Kafka使用者,但是在将作业提交到群集后我收到以下错误:
Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: kafka. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:553)
at org.apache.spark.sql.execution.datasources.DataSource.providingClass$lzycompute(DataSource.scala:89)
at org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:89)
at org.apache.spark.sql.execution.datasources.DataSource.sourceSchema(DataSource.scala:198)
at org.apache.spark.sql.execution.datasources.DataSource.sourceInfo$lzycompute(DataSource.scala:90)
at org.apache.spark.sql.execution.datasources.DataSource.sourceInfo(DataSource.scala:90)
at org.apache.spark.sql.execution.streaming.StreamingRelation$.apply(StreamingRelation.scala:30)
at org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:150)
at com.example.KafkaConsumer.main(KafkaConsumer.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$runMain(SparkSubmit.scala:782)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$22$anonfun$apply$14.apply(DataSource.scala:537)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$22$anonfun$apply$14.apply(DataSource.scala:537)
at scala.util.Try$.apply(Try.scala:192)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$22.apply(DataSource.scala:537)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$22.apply(DataSource.scala:537)
at scala.util.Try.orElse(Try.scala:84)
at …Run Code Online (Sandbox Code Playgroud) uberjar apache-spark apache-spark-sql spark-structured-streaming
在调整我的构建文件,我似乎 已经遇到了一个错误有mainClassName:
thufir@dur:~/NetBeansProjects/HelloSeleniumWorld$
thufir@dur:~/NetBeansProjects/HelloSeleniumWorld$ ./gradlew clean ShadowJar --stacktrace
> Task :shadowJar FAILED
FAILURE: Build failed with an exception.
* What went wrong:
A problem was found with the configuration of task ':shadowJar'.
> No value has been specified for property 'mainClassName'.
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskValidationException: A problem was found with the configuration …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用了 maven shade 插件来重新定位一个包下的所有依赖 jar 类,例如 org.shade.*
当我尝试在其他应用程序中使用该阴影 jar 作为 maven 依赖项时,它会拉取依赖项 jar。
我的期望是当 uber/shaded jar 作为 maven 依赖项包含时,它不应该拉任何其他依赖类 jar,因为这些类已经在 shaded jar 中重新打包。
我觉得这个问题有点愚蠢,但我无法弄清楚如何将SINGLE依赖(jdom.jar)添加到另一个jar中.
上下文:我们为我们的应用程序开发了一个简单的插件,这个插件有许多依赖性.我们使用fatjar将jdom.jar包含在其中.我正在尝试修复此插件中的错误,所以我决定同时"maven-ize".(我们刚刚切换到maven)这个插件加载到运行时,因此我们想要打包的唯一依赖项是jdom.jar.
问题:我发现有一个maven fatjar插件!不幸的是我找不到任何文档,这个maven插件将每个依赖项添加到输出jar中.经过多次尝试,我决定放弃这个fatjar插件并搜索另一个插件.我找到了一个罐子,阴影,但在快速阅读它们后,他们看起来像是添加了每一个依赖.
问题:将jdom.jar添加到我的插件jar中的简单方法是这样的:
-MyPlug-in.jar | |-src |-main |-java |-*.java |-jdom.jar
另外我不想改变清单或输出jar文件名
非常感谢你的时间.
我有一个工作正常的项目lein run.现在我想用它将它编译成一个独立的jar lein uberjar.不过,也有我的一对夫妇的源文件的src/projectname/目录下名为如playground.clj和stats.clj我使用的使用Emacs和REPL的尝试,但我不希望编译为最终项目.
有了类似的东西make,我会指定应该编译的所有文件.有了clojure/leiningen,似乎所有文件都是默认编译的 - 如何排除文件?我没有在leiningen文档中找到任何内容.
我目前正在使用:aot :all.这是改变某些东西的地方吗?再一次,我找不到关于此的详细文档.
更新:
到目前为止的建议没有奏效.然而,有用的是包括所有期望的命名空间,而不是排除那些不应编译的命名空间.例如:
(defproject myproject "version"
;; ...
:profiles {:uberjar {:aot [myproject.data
myproject.db
myproject.util]}})
Run Code Online (Sandbox Code Playgroud) 有什么区别lein run,lein trampoline run并将cojure应用程序部署为uberjar?有任何性能差异吗?
如果我这样做lein run/ lein trampoline run我可以直接进入服务器并从git中取出我的更改,而无需重新启动应用程序,对于uberjar也是如此.对于uberjars,我需要构建和部署应用程序.
提前致谢.