为什么SBT不能检测Java中的主类?(未检测到主类)
SBT将完成,但不会运行这个非常简单的项目。为什么不呢为什么SBT不能检测Java中的主类?(未检测到主类),java,sbt,Java,Sbt,SBT将完成,但不会运行这个非常简单的项目。为什么不呢 mackler@localhost:~/tmp/javahello$ sbt --version sbt launcher version 0.12.1
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中不起作用,但它确实起作用。类似但不同。我观察到的问题,虽然我自己没有证实。相似但不同。我观察到的问题,尽管我自己还没有证实。