1

我刚刚设置了 Nailgun ( https://github.com/martylamb/nailgun , http://martiansoftware.com/nailgun/ ),这是一个聪明的工具包,它使 JVM 在内存中徘徊,制作 Java 和 Jython (可能)更快地启动。

这对于 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部门的说明,除了我将位置设置为上面的client.bat文件,我做了参数:"${selected_resource_loc}"(<- - 包括引号,因为不幸的是,目前我在这条路径中有空格)

4)我曾经运行过这个“ng_client”,所以它失败了,但后来被包含在这个外部工具工具列表中。

5) 然后我选择了一个简单的 Jython py 文件 (trivial.py) 并运行 --> 外部工具 --> 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:没有错误”是红色的。我赶紧补充说,这个程序没有运行。

顺便说一句,对于任何感兴趣的人,这导致 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 上。自然而然地,我计划在适当的时候查看发生错误的服务器源代码。

4

2 回答 2

0

结果!

它使 Jython 初创公司变得超快。我向所有 Jythonistas 推荐这个。

正如我昨天最终意识到的那样(PS 评论),第一件事是让 Jython 在 Eclipse 之外运行。我发现我必须做的是注释掉文件 nailgun-master\nailgun-server\src\main\java\com\martiansoftware\nailgun\NGSession.java:
ll 263-265
ll 381-383中的 6 行
然后重建按照 Nailgun 设置说明(即mvn clean install)的 jar。

在此之后,我制作了一个方便的 .bat 文件来运行 Nailgun 服务器(“...\jars”是我放置 nailgun-server-0.9.2-SNAPSHOT.jar 和我想要包含的所有其他 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 文件(在项目资源管理器窗口中)并开始

运行 --> 外部工具 --> ng_client

注意 sys.out 和 sys.err 输出被定向到服务器窗口......大概这是对 NGSession.java 所做更改的结果。如果 Nailgun 的作者 Marty Lamb 读过这篇文章,首先感谢这个伟大的应用程序,其次如果您对我对 NGSession.java 所做的更改有任何意见,那就太好了。

之后

发生了一些奇怪的事情……希望只是初期的麻烦。

特别是,我想将它用于单元测试,就像大多数开发一样,它涉及不断地反复运行。问题是我倾向于发现我正在开发的课程有时似乎“徘徊”在“钉枪记忆”中。我什至看到当 NG 服务器停止并启动一个新服务器时,类运行自己的旧版本......这完全令人困惑。它倾向于表明旧版本的 .class 文件在我不希望它们时以某种方式被“缓存”在 Nailgun 内存中。即使使用“ng-cp”选项在客户端而不是服务器中指定 CLASSPATH 添加,也会发生这种情况!

不幸的是,这一切都非常“小众”:将 Jython 与 unittest 模块一起使用,运行 Nailgun。叹。

于 2015-11-18T08:26:10.857 回答
0

代替 Mike 建议对 Nailgun 进行的代码更改以防止 java.lang.ClassCastException,另一种方法是通过在启动 Nailgun 时提供以下系统属性将 Jython 使用的控制台更改为 PlainConsole:-Dpython.console= org.python.core.PlainConsole 这可以防止类转换异常并导致控制台输出也返回到客户端而不是服务器窗口。

于 2017-04-13T15:14:37.727 回答