我用Ruby编程了一段时间,我真的很喜欢它.最近我开始需要编译一些ruby代码.有几个原因使用Ruby2exe不是我的选择.所以我决定尝试Jruby(生成一个罐子就足够了).
我正在使用Windows,我安装了java JDK 6u17(在C:\ Program Files\Java\jdk1.6.0_17).
我在C:\ jruby安装了jruby 1.4
我在java中创建了一个hello world,编译并执行它就好了(所以java工作正常).
我创建了一个文件"script.rb":
puts "Hello, world"
我用jruby运行这个程序:
jruby script.rb
它工作正常.
我确实将JAVA_HOME设置为C:\ Program Files\Java\jdk1.6.0_17
我也成功运行:
java -jar c:\jruby\lib\jruby.jar script.rb
然后我用命令编译:
jruby -S jrubyc script.rb
它生成类'script.class'
我的问题是我找不到正确执行script.class的方法
我尝试:
java -cp .:c:\jruby\lib\jruby.jar script
我收到错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: script
Caused by: java.lang.ClassNotFoundException: script
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: script. Program will …Run Code Online (Sandbox Code Playgroud) 我在perl中创建了一个脚本来运行超时的程序.如果正在执行的程序需要更长的时间,那么超时将比脚本终止该程序并返回消息"TIMEOUT".
脚本工作得很好,直到我决定重定向执行程序的输出.
当stdout和stderr被重定向时,脚本执行的程序没有被杀死,因为它的pid与我从fork获得的pid不同.
似乎perl执行一个shell,在重定向的情况下执行我的程序.
我想有输出重定向但仍能够在超时的情况下终止程序.
有关如何做到这一点的任何想法?
我的脚本的简化代码是:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX ":sys_wait_h";
my $timeout = 5;
my $cmd = "very_long_program 1>&2 > out.txt";
my $pid = fork();
if( $pid == 0 )
{
exec($cmd) or print STDERR "Couldn't exec '$cmd': $!";
exit(2);
}
my $time = 0;
my $kid = waitpid($pid, WNOHANG);
while ( $kid == 0 )
{
sleep(1);
$time ++;
$kid = waitpid($pid, WNOHANG);
print "Waited $time sec, result $kid\n";
if ($timeout > 0 && …Run Code Online (Sandbox Code Playgroud) 有谁知道将鞋子应用程序放在MS Windows系统托盘中是否可能(如果是,如何?)?
像使用最小化将窗口放入系统托盘的东西.
我们有一个内部gem服务器(http://my.gem.server),在这个服务器上我们存储gem foo-1.2.3.gem
我们的用户将此服务器添加到gem源.我们的宝石来源看起来像::
*** CURRENT SOURCES ***
https://rubygems.org/
http://my.gem.server/
Run Code Online (Sandbox Code Playgroud)
到目前为止它的工作非常好.
然后社区中的某个人创建了foo-0.0.1.gem
现在,当我们的内部客户端执行gem安装时,安装了来自社区的foo-0.0.1.gem而不是我们的foo-1.2.3.gem
我们已经尝试将我们的源代码放在标准rubygems.org之前,但仍然得到相同的结果.
有谁知道如何告诉gem install从我们的内部源获取gem?
如果它在我们的网站上找不到,那么如果只是点击社区来源会更好.