본질적으로 매우 단순한 JRuby 스크립트를 얻으려고 노력했습니다. Net :: SSH를 사용하면 원격 컴퓨터에서 작업을 수행하고 종료 할 수 있습니다. jruby testssh.rb
명령을 실행하면 프로그램이 완벽하게 작동하지만 Warbler를 사용하여 JAR로 컴파일하면 Net :: SSH를로드 할 수 없다는 오류가 발생합니다.JRuby Warbler가 사용 가능한 실행 가능 JAR 파일을 만들지 못했습니다.
> java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
> pik use jruby-1.7.1
> jruby -S warble jar
C:/ruby/jruby-1.7.10/lib/ruby/gems/shared/gems/rawr-1.7.0/lib/zip/zip.rb:28: Use RbConfig instead of obsolete and deprecated Config.
rm -f test-ssh.jar
Creating test-ssh.jar
> java -jar test-ssh.jar
LoadError: no such file to load -- net/ssh
require at org/jruby/RubyKernel.java:1085
require at file:/C:/Users/User/AppData/Local/Temp/jruby4935218336857439685extract/jruby-stdlib-complete-1.7.11.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55
(root) at test-ssh.rb:7
load at org/jruby/RubyKernel.java:1101
(root) at file:/C:/Users/User/Dropbox/programming/ruby/jruby/net-ssh/test-ssh/test-ssh.jar!/META-INF/main.rb:1
require at org/jruby/RubyKernel.java:1085
(root) at file:/C:/Users/User/AppData/Local/Temp/jruby4935218336857439685extract/jruby-stdlib-complete-1.7.11.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1
require at file:/C:/Users/User/AppData/Local/Temp/jruby4935218336857439685extract/jruby-stdlib-complete-1.7.11.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55
error: org.jruby.embed.EvalFailedException: (LoadError) no such file to load -- net/ssh
난 후 보석에 파일을 넣어, 그리고 gemspec에 spec.add_runtime_dependency = "net-ssh"
를 추가하고 :
require 'net/ssh'
gem "net-ssh"
을 Gemfile에. 그런 다음 jruby -S warble
을 실행하면 다른 오류가 발생합니다. 나는 또한 Bundler와 Ruby가 이름에서 '-'로 잘 돌아 가지 않아서 파일을 다시 만들어야한다는 것을 알았다.
> jruby -S warble
C:/ruby/jruby-1.7.10/lib/ruby/gems/shared/gems/rawr-1.7.0/lib/zip/zip.rb:28: Use RbConfig instead of obsolete and deprecated Config.
No default executable found in test-ssh.gemspec, using bin/test-ssh.rb
rm -f test-ssh.jar
Creating test-ssh.jar
> java -jar testssh.jar
LoadError: no such file to load -- testssh/bin/testssh.rb
load at org/jruby/RubyKernel.java:1101
(root) at file:/C:/Users/User/Dropbox/programming/ruby/jruby/net-ssh/testssh/testssh.jar!/META-INF/main.rb:1
require at org/jruby/RubyKernel.java:1085
(root) at file:/C:/Users/User/AppData/Local/Temp/jruby6762643836642223701extract/jruby-stdlib-complete-1.7.11.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1
require at file:/C:/Users/User/AppData/Local/Temp/jruby6762643836642223701extract/jruby-stdlib-complete-1.7.11.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55
error: org.jruby.embed.EvalFailedException: (LoadError) no such file to load -- testssh/bin/testssh.rb
내가해야할 일들에 대한 손실에있어, 나는이 지저귀의 GitHub의에 대한 버그를 떠난과 유사한 질문, 또는 사람들을위한 어설픈 답변을 많이 발견했습니다 답변이없는 1 년 이상 동안 페이지를 방문하십시오.
코드를 가진 요점과 오류가 여기에 있습니다 : https://gist.github.com/predatorian3/10191754
했다 솔루션 :
방법 들러는 루비 보석을 만들고 그것을 힘내을 활용, 나는 git add .
를 사용하지 않은 것입니다 변경된 디렉토리를 모두 포함시킵니다. 내가 git add .
과 git commit
을 만들었 으면, Warbler는 처음으로 빠진 디렉토리들을 찾아 냈습니다. 그런 다음 보석 의존성을 위해 .gemspec 파일을 편집하는 것처럼 간단했으며 내 보석에 필요한 각 보석에 runtime_dependency
을 포함 시켰습니다. 그 후 Warbler에는 이러한 종속성이 포함되어 있으며 JAR 파일은 JRuby가 설치되지 않은 채로 실행할 수 있습니다.
이제 알겠습니다. 나는 PeaZip을 사용하여 Jar 파일을 열었고 내부를 살펴 보았습니다. testssh 디렉토리에는 bin 폴더가 없었습니다. 항아리를 업데이트하기 위해 [jar 유틸리티] (http://docs.oracle.com/javase/tutorial/deployment/jar/update.html)를 사용해야한다는 것을 알았지 만, 메인에 배치 할 수만있었습니다 testsh 디렉토리 아래에 있지 않습니다. JAR을 손상시키지 않고이를 수행하는 방법을 알아 내야합니다. warbler가 bin을 포함 시키거나 내 gemspec에 지정하는 방법이 있습니까? – Pred
warbler를 호출하는 폴더에서 jar 파일을 수정하지 마십시오. bin/testssh.rb를 추가하십시오. – user3512829
jar 파일이 생성되는 폴더에 bin 폴더가 있습니다. 그러나 그것을 포함하지 않습니다. 나는 지저귀다가 그 dir을 포함하도록하기 위해 gemspec에 어떤 것을 추가해야합니까? – Pred