【问题标题】:SBT error: java.lang.RuntimeException: No main class detectedSBT 错误:java.lang.RuntimeException:未检测到主类
【发布时间】:2014-01-13 18:11:05
【问题描述】:

更新:
我需要将 libraryDependencies 用于在 Scala 中使用 Actor。

libraryDependencies <++= scalaVersion(v =>
  Seq("org.scala-lang" % "scala-actors" % v)
)

当我运行“sbt run”时,我可以成功通过编译,但运行代码失败。

这是错误: java.lang.RuntimeException: 未检测到主类。

奇怪的是,当我不使用 SBT 时,我可以毫无问题地运行它:

>scalac actor.scala
>scala pingpong

知道为什么会这样吗?

我正在使用 SBT 0.13.0 Scala 版本是 2.10.2

谢谢

德里克。

这是我的代码:

import scala.actors.Actor
import scala.actors.Actor._

case object Ping;
case object Pong;
case object Stop;

class Ping(count:Int, pong:Actor) extends Actor
{
    def act()
    {
        var counter = count -1 ;
        pong ! Ping;
        loop
        {
            react
            {
                case Pong =>
                if( (counter < count) && (counter > 0) ) {Console.println(counter+"->Ping: pong"); pong ! Ping; counter = counter -1;} 
                else {pong ! Stop;exit()}

            }
        }
    }
}

class Pong extends Actor
{
    def act()
    {
        loop
        {
            react
            {
               case Ping => {Console.println("Pong: Ping"); sender ! Pong;}
               case Stop => {Console.println("Ping Pong Communication is done!");exit()}
            }
        }
    }
}

object pingpong
{
    def main(args: Array[String])
    {
        println(util.Properties.versionString)
        val pong = new Pong

        val ping = new Ping(5, pong)

        ping.start
        pong.start
    }
}

【问题讨论】:

    标签: scala build sbt


    【解决方案1】:

    在你的构建文件中试试这个:

    mainClass in (Compile,run) := Some("pingpong")
    

    【讨论】:

    • 仍然没有运气:(run-main) java.lang.ClassNotFoundException: pingpong java.lang.ClassNotFoundException: pingpong at java.lang.ClassLoader.findClass(ClassLoader.java:382) at java.lang .ClassLoader.loadClass(ClassLoader.java:323) 这是我的 build.sbt: name := "test" version := "1.0" mainClass := Some("pingpong")
    • 是的,我在src/main/scala下只有一个文件“actor.scala”
    • 尝试object pingpong extends App 并删除主要声明。
    • 您的mainClass 定义与我之前所说的不符。正如我所说,试试mainClass in (Compile,run) := Some("pingpong")。不仅仅是mainClass := Some("pingpong")
    • 很高兴听到这个消息。如果是我的回答和 cmets 有帮助,请接受我的回答。如果这是您自己的魔法,请将其添加为答案并接受您自己的解决方案以帮助其他人。
    【解决方案2】:

    如果我尝试使用类而不是对象,则会出现此异常。

    //class Foo extends App {
    //    print("No main class detected")
    //}
    
    object Foo extends App {
        print("Hello World")
    }
    

    【讨论】:

      【解决方案3】:

      如果你想在 Scala 中使用 Actor,你需要包含这个库,如下:

      libraryDependencies <++= scalaVersion(v =>
        Seq("org.scala-lang" % "scala-actors" % v)
      )
      

      【讨论】:

        【解决方案4】:

        它正在寻找一个对象。尝试创建一个简单的 clock.scala 对象文件并重新运行它:

        object Clock {
          def main(args: Array[String]) = println(new java.util.Date)
        }
        

        【讨论】:

          【解决方案5】:

          您必须将扩展 App 的类移动到 src/main/scala 文件夹。否则你必须创建 main 方法

          【讨论】:

            猜你喜欢
            • 2018-02-21
            • 1970-01-01
            • 2019-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-16
            • 2017-09-23
            相关资源
            最近更新 更多