为什么SBT没有检测到Java中的主类? (未检测到主类)

时间:2013-09-22 20:22:28

标签: java sbt

mackler@localhost:~/tmp/javahello$ sbt --version                                                                       
sbt launcher version 0.12.1                                                                                            
mackler@localhost:~/tmp/javahello$ find .                                                                              
.                                                                                                                      
./src                                                                                                                  
./src/main                                                                                                             
./src/main/java                                                                                                        
./src/main/java/learn                                                                                                  
./src/main/java/learn/HelloWorld.java                                                                                  
mackler@localhost:~/tmp/javahello$ cat src/main/java/learn/HelloWorld.java                                             
package learn;                                                                                                         

class HelloWorld {                                                                                                     
    public static void main(String[] args) {                                                                           
        System.out.println("Hello, world");                                                                            
    }                                                                                                                  
}                                                                                                                      
mackler@localhost:~/tmp/learn/javahello$ sbt run                                                                       
[info] Set current project to default-1004d5 (in build file:/home/mackler/tmp/javahello/)                              
[info] Updating {file:/home/mackler/tmp/javahello/}default-1004d5...                                                   
[info] Resolving org.scala-lang#scala-library;2.9.2 ...                                                                
[info] Done updating.                                                                                                  
[info] Compiling 1 Java source to /home/mackler/tmp/javahello/target/scala-2.9.2/classes...                            
java.lang.RuntimeException: No main class detected.                                                                    
at scala.sys.package$.error(package.scala:27)                                                                          
[trace] Stack trace suppressed: run last compile:run for the full output.                                              
[error] (compile:run) No main class detected.                                                                          
[error] Total time: 4 s, completed Sep 22, 2013 4:14:21 PM                                                             
mackler@localhost:~/tmp/javahello$                                  

2 个答案:

答案 0 :(得分:2)

你的类声明需要公开,否则sbt(和java)看不到它:

package learn;                                                                                                         

public class HelloWorld {                      // added public here
    public static void main(String[] args) {                                                                           
        System.out.println("Hello, world");                                                                            
    }                                                                                                                  
}        

这很有效。

> run
[info] Running learn.HelloWorld
Hello, world

编辑:事实上,这个类不需要公开让java工作,这是sbt中的一个错误,正如Mark指出的那样。

答案 1 :(得分:1)

我刚遇到类似问题。

正在编译并且在运行时没有检测到主类。

问题是我使用java 1.6和java 1.7中的编译器作为运行时,检查编译器和运行时的版本: javac -version 和 java -version 现在指向相同的版本及其确定。

祝你好运!