1

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$                                  
4

2 回答 2

3

您对类的声明必须是公开的,否则 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 指出的那样。

于 2013-09-22T21:20:01.113 回答
1

我刚遇到类似的问题。

它正在编译并且在运行时未检测到主类。

问题是我使用了 java 1.6 和 java 1.7 的编译器作为运行时,检查编译器和运行时的版本: javac -version 和 java -version 现在指向相同的版本并且没问题。

祝你好运!

于 2013-09-24T15:51:05.357 回答