无法找到或加载 main class sbt-assembly 可执行 jar
Could not find or load main class sbt-assembly executable jar
我已经为它们定义了项目依赖关系和合并策略,以使用 sbt-assembly 插件生成 jar 文件。另外,未来 jar 中的主要 class 也已定义。在我创建 jar 文件并尝试使用 bash 脚本对其进行 运行 后,我收到错误消息:
Error: Could not find or load main class benchmarks.Main
Main 在src/main/scala/benchmarks/Main 中,它是一个具有 main 方法的对象。这个项目可能存在什么问题?
这是我的 bash 脚本:
#!/usr/bin/env bash
java -cp "target/scala-2.11/benchmarking.jar" benchmarks.Main
build.sbt 具有已定义的依赖项:
version := "0.1"
scalaVersion := "2.11.8"
assemblyJarName in assembly := "benchmarking.jar"
mainClass in assembly := Some("benchmarks.Main")
val sparkVersion = "2.2.0"
resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies ++= Seq(
"neo4j-contrib" % "neo4j-spark-connector" % "2.1.0-M4",
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"com.typesafe" % "config" % "1.3.0",
"org.neo4j.driver" % "neo4j-java-driver" % "1.5.1",
"com.opencsv" % "opencsv" % "4.1",
"com.databricks" %% "spark-csv" % "1.5.0"
)
assemblyMergeStrategy in assembly := {
case PathList("org","aopalliance", xs @ _*) => MergeStrategy.last
case PathList("javax", "inject", xs @ _*) => MergeStrategy.last
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
case PathList("javax", "activation", xs @ _*) => MergeStrategy.last
case PathList("org", "apache", xs @ _*) => MergeStrategy.last
case PathList("com", "google", xs @ _*) => MergeStrategy.last
case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
case PathList("com", "codahale", xs @ _*) => MergeStrategy.last
case PathList("com", "yammer", xs @ _*) => MergeStrategy.last
case PathList("com", "typesafe", xs @ _*) => MergeStrategy.last
case PathList("net", "jpountz", xs @ _*) => MergeStrategy.last
case PathList("org", "slf4j", xs @ _*) => MergeStrategy.last
case PathList("org", "neo4j", xs @ _*) => MergeStrategy.last
case "about.html" => MergeStrategy.rename
case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last
case "META-INF/mailcap" => MergeStrategy.last
case "META-INF/mimetypes.default" => MergeStrategy.last
case "plugin.properties" => MergeStrategy.last
case "log4j.properties" => MergeStrategy.last
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
重建新 jar 并检查主要 class 位置有效。
我已经为它们定义了项目依赖关系和合并策略,以使用 sbt-assembly 插件生成 jar 文件。另外,未来 jar 中的主要 class 也已定义。在我创建 jar 文件并尝试使用 bash 脚本对其进行 运行 后,我收到错误消息:
Error: Could not find or load main class benchmarks.Main
Main 在src/main/scala/benchmarks/Main 中,它是一个具有 main 方法的对象。这个项目可能存在什么问题?
这是我的 bash 脚本:
#!/usr/bin/env bash
java -cp "target/scala-2.11/benchmarking.jar" benchmarks.Main
build.sbt 具有已定义的依赖项:
version := "0.1"
scalaVersion := "2.11.8"
assemblyJarName in assembly := "benchmarking.jar"
mainClass in assembly := Some("benchmarks.Main")
val sparkVersion = "2.2.0"
resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies ++= Seq(
"neo4j-contrib" % "neo4j-spark-connector" % "2.1.0-M4",
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"com.typesafe" % "config" % "1.3.0",
"org.neo4j.driver" % "neo4j-java-driver" % "1.5.1",
"com.opencsv" % "opencsv" % "4.1",
"com.databricks" %% "spark-csv" % "1.5.0"
)
assemblyMergeStrategy in assembly := {
case PathList("org","aopalliance", xs @ _*) => MergeStrategy.last
case PathList("javax", "inject", xs @ _*) => MergeStrategy.last
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
case PathList("javax", "activation", xs @ _*) => MergeStrategy.last
case PathList("org", "apache", xs @ _*) => MergeStrategy.last
case PathList("com", "google", xs @ _*) => MergeStrategy.last
case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
case PathList("com", "codahale", xs @ _*) => MergeStrategy.last
case PathList("com", "yammer", xs @ _*) => MergeStrategy.last
case PathList("com", "typesafe", xs @ _*) => MergeStrategy.last
case PathList("net", "jpountz", xs @ _*) => MergeStrategy.last
case PathList("org", "slf4j", xs @ _*) => MergeStrategy.last
case PathList("org", "neo4j", xs @ _*) => MergeStrategy.last
case "about.html" => MergeStrategy.rename
case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last
case "META-INF/mailcap" => MergeStrategy.last
case "META-INF/mimetypes.default" => MergeStrategy.last
case "plugin.properties" => MergeStrategy.last
case "log4j.properties" => MergeStrategy.last
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
重建新 jar 并检查主要 class 位置有效。