Scala 如何为sbt多项目设置要使用sbt assembly插件运行的主类
以下是我在文件系统上的项目结构:Scala 如何为sbt多项目设置要使用sbt assembly插件运行的主类,scala,sbt-assembly,Scala,Sbt Assembly,以下是我在文件系统上的项目结构: rootProj +- masterProj +- proj1 ... +- projN 我正在尝试使用sbt组装插件来创建一个胖罐子。我想将主类设置为 masterProj/core/Main.scala 为了在从rootProj目录执行assemby命令进行组装时获得可运行的fat jar 如何在rootProj/build.sbt中设置mainClass 我设定 mainClass in assembly := Some("core.M
rootProj
+- masterProj
+- proj1
...
+- projN
我正在尝试使用sbt组装插件来创建一个胖罐子。我想将主类设置为
masterProj/core/Main.scala
为了在从rootProj目录执行assemby命令进行组装时获得可运行的fat jar
如何在rootProj/build.sbt中设置mainClass
我设定
mainClass in assembly := Some("core.Main") // fully qualified path
但是当我试着在组装后运行罐子时
rootProj$ java -jar target/scala-2.10/rootProj-assembly-0.1-SNAPSHOT.jar
我得到这个错误
Exception in thread "main" java.lang.NoClassDefFoundError: core/Main
Caused by: java.lang.ClassNotFoundException: core.Main
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)
有什么提示吗
这是我的身材
import AssemblyKeys._
assemblySettings
name := "deals-backend"
version := Common.version
scalaVersion := Common.scalaVersion
resolvers ++= Seq(
"Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
"Sonatype repository" at "https://oss.sonatype.org/service/local/staging/deploy/maven2"
)
scalacOptions in ThisBuild ++= Seq("-unchecked", "-deprecation", "-feature")
retrieveManaged := true
lazy val dealsClassifier = Project( "deals-classifier", file("deals-classifier") )
lazy val dealsEntities = Project( "deals-entities-pub", file("deals-entities-pub") )
lazy val dealsDbPre = Project( "deals-db-pre", file("deals-db-pre") )
lazy val dealsDbPub = Project( "deals-db-pub", file("deals-db-pub") )
lazy val dealsSolrClient = Project( "deals-solr-client", file("deals-solr-client") ).dependsOn(dealsDbPub % "test->test;compile->compile")
lazy val dealsMasterSpray = Project( "deals-master-spray", file("deals-master-spray") )
.dependsOn(dealsClassifier, dealsEntities, dealsDbPre, dealsDbPub, dealsSolrClient)
.settings(mainClass in (Compile, run) := Some("core.Main"))
lazy val root = project.in( file(".") ).aggregate(dealsClassifier, dealsEntities, dealsDbPre, dealsDbPub, dealsSolrClient, dealsMasterSpray)
run in Compile <<= (run in Compile in dealsMasterSpray)
mainClass in (Compile, assembly) := Some("deals-master-spray.core.Main")
你试过用rootProj.core.Main作为你的主类的名称吗?我只是试了一些rootProj.core.Main,但没有解决这个问题。那么你在rootProj-assembly-0.1-SNAPSHOT.jar中看到了什么?这就是我在MANIFEST.MF>Main class:core.Main中看到的。我的意思是,你在组装好的jar中看到了mainProj或core文件夹吗?因为Main类只是指向jar中的编译类。它有什么结构?java.lang.NoClassDefFoundError:core/Main表示rootProj-assembly-0.1-SNAPSHOT.jar/core文件夹中没有“Main.class”