我目前正在使用IntelliJ Idea 13.0 Build 132.197,我在构建任何Scala项目时经常遇到这个问题
6:08:42 PM Scala compile server: java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.(ServerSocket.java:237)
at com.martiansoftware.nailgun.NGServer.run(Unknown Source)
at java.lang.Thread.run(Thread.java:724)
Run Code Online (Sandbox Code Playgroud)
当我只打开一个项目,并且在任何其他进程中不使用nailgun时,会发生此错误.关闭并重新打开项目不起作用.退出IntelliJ并重新启动后,我仍然遇到相同的错误.
在Windows任务管理器中,我看到一个java.exe
包含以下详细信息的进程:
E:\Dev\Java\bin\java -cp "E:/Dev/Java/lib/tools.jar;C:/Program Files (x86)/JetBrains/IntelliJ IDEA 132.197/lib/jps-server.jar;C:/Program Files (x86)/JetBrains/IntelliJ IDEA 132.197/lib/trove4j.jar;C:/Program Files (x86)/JetBrains/IntelliJ IDEA 132.197/lib/util.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/scala-library.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/scala-plugin-runners.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/jps/nailgun.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/jps/sbt-interface.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/jps/incremental-compiler.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/jps/jline.jar;C:/Users/hanxue/.IntelliJIdea13/config/plugins/Scala/lib/jps/scala-jps-plugin.jar" -Xmx1024m -server -Xss1m -XX:MaxPermSize=256m org.jetbrains.plugins.scala.nailgun.NailgunRunner 3200
Run Code Online (Sandbox Code Playgroud)
这是因为Nailgun设置的问题吗?
我在RVM中安装了JRuby 1.7.2,创建了一个gemset,执行了bundle install.现在,我运行这个:
第1学期:
[lzap@lzapx my_app]$ bundle exec jruby --ng-serv
NGServer started on all interfaces, port 2113.
Run Code Online (Sandbox Code Playgroud)
第2学期:
[lzap@lzapx my_app]$ JRUBY_OPTS="--1.9 --ng" bundle exec rails s
Run Code Online (Sandbox Code Playgroud)
问题是没有任何反应,双方都没有打印任何东西,它只是永远挂起.Top没有显示任何java/jruby进程正常工作.
如果我尝试在没有-ng的情况下启动应用程序,它可以正常工作.有什么问题?捆绑?
当然禁用防火墙.
时不时地,我认为这将是很好用clojure
的shell脚本,但大约900毫秒的启动时间太慢.然后我会google startpage for"nailgun clojure",但唯一显示的结果是针对vimclojure这样的特殊情况.那时我假装没有时间,转向awk
更快启动的更多病房语言.
那么,怎样才能nailgun
加快clojure的启动时间呢?
给定一个打开的示例脚本/dev/tty
:
# sample.rb
tty=File.open("/dev/tty", "w+")
tty.print "> "
tty.puts tty.gets.upcase
Run Code Online (Sandbox Code Playgroud)
我可以用正常的jruby运行它就好了:
% jruby sample.rb
> hello
HELLO
%
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用/dev/tty
nailgun,那么tty绑定到nailgun服务器,而不是客户端:
# server terminal | # client terminal
% jruby --ng-server |
NGServer 0.9.1 started on all interfaces, port 2113. |
| % jruby --ng sample.rb
> hello |
HELLO |
| %
Run Code Online (Sandbox Code Playgroud)
(垂直间距是显示时间,每个实际输出缺少空行)
这是预期的行为,还是一个错误?
如果它是预期的行为,有没有办法我可以检测脚本是否正在运行,--ng
所以我可以避免打开/dev/tty
?
我正在努力改善Gradle的启动时间.这种实验性--daemon
开关似乎没有真正加快速度.所以我想使用一些独立于gradle的服务器进程,并使gradle连接到它.到目前为止我找到的选项是
由于gradle是由shell脚本启动的,因此需要进行一些调整.我的问题是:是否有人使用上述选项开始gradle?或者,如果您已成功使用其他选项,那是什么?
我正在开发一个经常启动的Groovy shell脚本(执行相当小的任务),因此我需要一个快速的JVM启动时间.为了达到这个目的,我试图用Nailgun推出它.
我已经安装了Nailgun作为Ubuntu包.然后,我固定的说法错误的链接/usr/bin/ng-server
来/usr/bin/ng
.我正在启动Nailgun-Server,如下所示:
java -cp /usr/share/java/nailgun-0.7.1.jar -server com.martiansoftware.nailgun.NGServer
Run Code Online (Sandbox Code Playgroud)
我有一个名为hello.groovy的简单虚拟Groovy脚本,只是为了测试nailgun-server:
#!/usr/bin/env groovy
def sayHello() {
println("Hello Groovy!");
}
sayHello();
Run Code Online (Sandbox Code Playgroud)
我用groovyc将文件编译为hello.class.
现在我想在Nailgun服务器中启动该脚本.我这样做的天真方法是:
ng hello
ng hello.sayHello
Run Code Online (Sandbox Code Playgroud)
但我得到的只是ClassNotFoundExceptions:
java.lang.ClassNotFoundException: hello
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.martiansoftware.nailgun.NGSession.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
那么,使用Nailgun服务器启动Groovy脚本的正确方法是什么?我也很欣赏一些关于如何使用Nailgun的好网站/教程,很难获得如何使用它的任何信息......
编辑:
我还要感谢使用带有纯Java类的nailgun的完整示例(包括如何使用ng调用特定类),因为我也无法使用任何Java类.