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

为什么SBT不能检测Java中的主类?(未检测到主类),java,sbt,Java,Sbt,SBT将完成,但不会运行这个非常简单的项目。为什么不呢 mackler@localhost:~/tmp/javahello$ sbt --version sbt launcher version 0.12.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$                                  

您的类声明必须是公共的,否则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工作不需要公开类,正如Mark指出的,这是sbt中的一个错误。

您的类声明需要公开,否则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不需要公开该类就可以工作,正如Mark指出的,这是sbt中的一个错误。

我刚刚遇到了类似的问题

它正在编译,在运行时未检测到主类

问题是我使用java 1.6和java 1.7中的编译器作为运行时,检查编译器和运行时的版本: javac版本 及 java版本 现在指向同一个版本,就可以了


祝你好运

我刚刚遇到了类似的问题

它正在编译,在运行时未检测到主类

问题是我使用java 1.6和java 1.7中的编译器作为运行时,检查编译器和运行时的版本: javac版本 及 java版本 现在指向同一个版本,就可以了


祝你好运

迷人的;非常感谢。我是从高斯林的书的第一部分抄来的。它的工作原理与最初使用
javac
java
发布的一样,但我想他应该更新这本书以反映SBT。如果
java
接受它,但
SBT
不接受,这就是SBT中的一个bug。请打开一个问题,这很奇怪。我认为它在java中不起作用,但它确实起作用了;非常感谢。我是从高斯林的书的第一部分抄来的。它的工作原理与最初使用
javac
java
发布的一样,但我想他应该更新这本书以反映SBT。如果
java
接受它,但
SBT
不接受,这就是SBT中的一个bug。请打开一个问题,这很奇怪。我认为它在java中不起作用,但它确实起作用。类似但不同。我观察到的问题,虽然我自己没有证实。相似但不同。我观察到的问题,尽管我自己还没有证实。