如何在jvm上运行已编译的scala代码?
当我尝试以下命令时:
java -cp scala-library.jar -cp bin com.mcmc5.Main
我收到以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: main
在scala代码中,我有一个名为Main的对象,它具有在那里定义的main函数.如果我这样做
scala -cp bin com.mcmc5.Main
,它工作正常.
有什么东西我错过了吗?
谢谢你,thejinx0r
Edit1:
这是我的代码:我希望它在JVM上运行的原因是因为我想要实际执行字节码的服务器没有安装scala.这是我的主要基本上(它有一些在它之前定义的值和变量,但基本上:
,我仍然有同样的错误.
package com.mcmc5
import java.text.{DateFormat, NumberFormat, DecimalFormat, SimpleDateFormat}
import java.util.{Date}
object Main { def main( args: Array[String]) = {
println(numberOfOutputStructures)
var structureSolver = new MC(20);
structureSolver.start()
}
}
编辑2 问题解决了.
所以我实际上不相信这一点,但这对我有用.
所以我找到了一个线程
(如果你可以调用它)并且说java通常不喜欢整体 java -cp scala-library.jar:bin com.mcmc5.Main
但是,这实际上解决了我的问题.通过使用 object Main extends Application 而不是定义一个名为main的函数来解决我的问题.我想这取决于你使用的scala版本.我目前正在使用scala 2.9,也许是rc2?还是rc1?
所以,我有几个关于scala的问题.
1)在scala中编写一个新项目会更快(在性能方面)还是我应该坚持常规java?我要继承的项目已经用java编写,但它可以大规模并行化.此外,这个项目是出于学术目的,所以我有点担心这不是一个好主意.我知道我必须先由我的主管来管理它,但这只是一个想法.
2)为了确保,我可以在我的计算机上编译我的scala代码并在安装了JVM的集群上执行"二进制文件"(编译的字节代码)?
3)如果我要编译继承的java程序,它应该工作吗?它应该更快吗?
(群集使用SGE)
所以我有两个bash脚本.一个用于使用"scala"命令调用字节码,另一个用于使用"java"命令调用相同的代码.我的问题如下,当我使用scala时,我可以看到我可以获得大约80个线程(我创建并在我的"任务管理器"中显示),而当我使用java命令时,我只创建了大约20个线程.而不是80.在java下,actors.corePoolSize和actors.maxPoolSize的等效"定义"选项是什么?
这些是我的bash脚本.第一个有以下内容:
JAVA_OPTS="-Xmx1g" scala -cp bin com.mcmc5.Main -Dactors.corePoolSize=60 -Dactors.maxPoolSize=5000
第二个有:
java -cp scala-library.jar:bin com.mcmc5.Main -Dactors.corePoolSize=60 -Dactors.maxPoolSize=5000 -Xmx1g
当在for循环中使用std :: async和launch :: async时,我的代码在同一个线程中串行运行,就好像每个异步调用在启动之前等待前一个异步调用一样.在std :: async引用(std :: async)的注释中,如果std :: future未绑定到引用,则可以这样做,但我的代码不是这种情况.任何人都可以找出它为什么连续运行?
这是我的代码片段:
class __DownloadItem__ { //DownloadItem is just a "typedef shared_ptr<__DownloadItem__> DownloadItem"
std::string buffer;
time_t last_access;
std::shared_future<std::string> future;
}
for(uint64_t start: chunksToDownload){
DownloadItem cache = std::make_shared<__DownloadItem__>();
cache->last_access = time(NULL);
cache->future =
std::async(std::launch::async, &FileIO::download, this, api,cache, cacheName, start, start + BLOCK_DOWNLOAD_SIZE - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
未来将存储在共享的未来,因为多个线程可能正在等待同一个未来.
我也在使用GCC 6.2.1来编译它.
我是meteor和node.js的新手,我觉得它真棒!
所以我遇到的问题是我无法从meteor访问节点的文件系统模块.在stackoverflow上,其他用户报告他们使用
var require = __meteor_bootstrap__.require;
var fs = require('fs');
Run Code Online (Sandbox Code Playgroud)
但是,当我调用它时,我收到此错误:
TypeError:undefined不是函数
我按照这个问题的答案,我不知道该怎么做.我已确保上面的代码位于服务器的启动部分.