我刚刚设置了Nailgun(https://github.com/martylamb/nailgun,http://martiansoftware.com/nailgun/),这是一个聪明的工具包,它使JVM在内存中徘徊,使Java和Jython(可能)更快地启动。 / p>
这对Java很有用,但对于Jython来说,它有望成为绝对的金色粉尘,尤其是在开发过程中(Jython是世界上最好的语言,但启动时间很慢)。
谷歌搜索是否有人在Eclipse上运行Nailgun我发现了一个红色的鲱鱼,这是GitHub上的“nailgun / eclipse-gtkrc”:“nailgun”只是那个人的手柄。 我还发现一个CS部门实际上在http://www.cs.dartmouth.edu/~jygsaw/getting_started.html解决了这个问题。他们似乎实际上已经设法让这个工作为Jython,这可能很棒,但不幸的是他们的系统依赖于使用BASH脚本(Mac OS),我现在被迫在Windows(W7)上工作。
我接下来做的是
1)在Eclipse之外启动Nailgun服务器,包括CLASSPATH中的jython.jar,
2)然后我创建了一个由单行组成的client.bat文件:
ng org.python.util.jython %1
3)然后我在Eclipse中设置一个名为“ng_client”的“外部工具配置”,按照上面的CS部门的说明,除了我将Location设置为上面的client.bat文件,然后我做了参数: "${selected_resource_loc}"
(< - 包括引号,因为不幸的是,此时此路径中有空格)
4)我运行了这个“ng_client”,因此它失败了,但随后被包含在这个外部工具工具列表中。
5)然后我选择了一个简单的Jython py文件(trivial.py)并运行了Run - >外部工具 - > ng_client。
控制台显示以下结果
C:\ Program Files(x86)\ eclipse-jee-luna-SR2-win32 \ eclipse> ng org.python.util.jython“G:\ My Documents \ software projects \ trivial.py”
recv:没有错误
NB“recv:No error”为红色。我赶紧补充的程序没有运行。
顺便提一下,对于任何有兴趣的人,这导致Nailgun服务器终端发出以下错误消息:
C:\Users\Mike>java com.martiansoftware.nailgun.NGServer
NGServer 0.9.2-SNAPSHOT started on all addresses, port 2113.
NGSession 1: 127.0.0.1: org.python.util.jython exited with status -1
java.lang.ClassCastException: org.python.util.JLineConsole$Stream cannot be cast
to com.martiansoftware.nailgun.ThreadLocalInputStream
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:263)
Exception in thread "NGSession 2: 127.0.0.1: org.python.util.jython" java.lang.C
lassCastException: org.python.util.JLineConsole$Stream cannot be cast to com.mar
tiansoftware.nailgun.ThreadLocalInputStream
at com.martiansoftware.nailgun.NGSession.run(NGSession.java:381)
我似乎非常接近......任何Eclipse专家都知道我应该怎么做吗?
PS我也试过在Eclipse之外运行一个简单的Jython程序。到目前为止,它总是绊倒Nailgun服务器,如上所述。有一些证据表明人们成功地做到了这一点,但他们似乎总是在Linux机器上,而不是Windows机器上。当然,我打算在适当的时候查看发生错误的服务器源代码。
答案 0 :(得分:0)
结果!
这让Jython的初创公司超级快。我向所有Jythonistas推荐这个。
正如我昨天最终意识到的那样(PS评论),第一件事就是让Jython在Eclipse之外运行。
我发现我必须做的是在文件nailgun-master \ nailgun-server \ src \ main \ java \ com \ martiansoftware \ nailgun \ NGSession.java中注释掉6行:
ll 263-265
ll 381-383
然后根据Nailgun设置说明(即mvn clean install
)重建jar。
在此之后,我制作了一个方便的.bat文件来运行Nailgun服务器(" ... \ jars"是我放置nailgun-server-0.9.2-SNAPSHOT.jar的地方我要包括的其他罐子):
set classpath=d:/apps/jython2.7.0/jython.jar;d:/apps/jython2.7.0/jars/*
java com.martiansoftware.nailgun.NGServer
在此之后,从DOS窗口运行:
ng org.python.util.jython "G:\My Documents\software projects\my_jython_project\__main__.py"
然后,在Eclipse中,按照上面的步骤设置ng_client后,选择要运行的.py文件(在Project explorer窗口中)并转到
运行 - >外部工具 - > ng_client
注意sys.out& sys.err输出被定向到服务器窗口...可能这是对NGSession.java所做的更改的结果。如果Nailgun作者Marty Lamb读过这篇文章,那么首先感谢这个优秀的应用程序,如果你对我对NGSession.java所做的更改有任何意见,那么它会很好。
<强> 后 强>
发生了一些奇怪的事情......希望能够解决问题。
特别是,我想将它用于单元测试,这与大多数开发一样,涉及不断地反复运行。麻烦的是,我倾向于发现我正在开发的课程有时似乎“徘徊”#34;在&#34; Nailgun记忆&#34;。我甚至看到班级在NG服务器停止并且新的服务器启动时运行旧版本的自己...这完全令人费解。它倾向于建议旧版本的.class文件以某种方式被缓存&#34;当我不想要它们时,在Nailgun记忆中。甚至在使用&#34; ng-cp&#34;用于在客户端而不是服务器中指定CLASSPATH添加项的选项!
不幸的是,这完全是&#34; niche&#34;:使用Jython和unittest模块,运行Nailgun。叹息。
答案 1 :(得分:0)
而不是将代码更改为Mike建议做的防止java.lang.ClassCastException的Nailgun,另一种方法是在启动Nailgun时通过提供以下系统属性将Jython使用的控制台更改为PlainConsole: -Dpython.console = org.python.core.PlainConsole 这可以防止类转换异常并导致控制台输出返回到客户端而不是服务器窗口。