Gradle构建的jar找不到我的主类
在工作中,我们使用gradle来完成一个非常重要的项目,我正试图想出一个最简单的方法来让工作顺利进行 我的班级看起来是:Gradle构建的jar找不到我的主类,gradle,main,scalding,Gradle,Main,Scalding,在工作中,我们使用gradle来完成一个非常重要的项目,我正试图想出一个最简单的方法来让工作顺利进行 我的班级看起来是: package org.playground import com.twitter.scalding._ class readCsv(args: Args) extends Job(args) { val csv:Csv = Csv(args("input"), ("firstName", "lastName")) println(csv) } 并且生
package org.playground
import com.twitter.scalding._
class readCsv(args: Args) extends Job(args) {
val csv:Csv = Csv(args("input"), ("firstName", "lastName"))
println(csv)
}
并且生活在游乐场/src/org/playerd/readCsv.scala中。我的构建脚本如下所示:
apply plugin: 'scala'
archivesBaseName = 'playground'
mainClassName = 'org.playground.readCsv'
repositories {
mavenLocal()
mavenCentral()
maven{
url 'http://conjars.org/repo/'
artifactUrls 'http://clojars.org/repo/'
artifactUrls 'http://maven.twttr.com/'
}
}
dependencies {
compile 'org.scala-lang:scala-compiler:2.9.2'
compile 'org.scala-lang:scala-library:2.9.2'
compile 'bixo:bixo-core:0.9.1'
compile 'org.apache.hadoop:hadoop-core:1.2.1'
compile 'com.twitter:scalding_2.9.2:0.8.1'
compile 'cascading:cascading-core:2.1.6'
compile 'cascading:cascading-hadoop:2.1.6'
testCompile 'org.testng:testng:6.8.7'
testCompile 'org.scala-tools.testing:specs:1.6.2.2_1.5.0'
}
test {
useTestNG()
}
jar {
description = "Assembles a Hadoop-ready JAR file"
manifest {
attributes( "Main-Class": "org.playground.readCsv" )
}
}
这会成功编译和生成,但尝试运行jar时会引发以下错误:
$ java -jar build/libs/playground.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/playground/readCsv
Caused by: java.lang.ClassNotFoundException: org.playground.readCsv
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
我有根据的猜测是,将job从job
扩展到另一个job,既不符合某种惯例,也不像是一个有效的主类,但我不希望它抱怨找不到它
另一种可能性是,以java-jarjarname
的形式运行它是不正确的,我只需要用hadoop或类似的东西来运行它
无论如何,只是为了验证:我的设置有什么问题?源文件位于错误的位置。默认情况下,它需要进入src/main/scala/org/playerd/readCsv.scala
。否则,它甚至无法编译。我肯定错过了设置。嗯。。。现在似乎没有从环境中选择正确的路径:您需要将正确的类路径传递给java
命令(-cp…
)。至少,类路径将需要包含Scala和烧焦的Jar。Gradle的应用程序
插件将为您解决此问题。java
命令对SCALA\u LIBRARY\u路径
一无所知。(可能是scala
命令,但是您仍然需要提供滚烫的Jar,可能还需要提供其他Jar。)如果您想创建一个自包含的可执行Jar,请查看gradle one Jar
插件。这是Hadoop的工作。所以它最终会变成一个大罐子。我是否真的错过了手册中的那么多内容,或者这没有记录在案。我会调查gradle一罐的事情,谢谢。你不是在制造一个胖罐。我已经回答了如何在中创建胖罐子。