2014-03-19 71 views
0

當我運行用warbler生成的jar時,出現'找不到合適的驅動程序'錯誤。但是,當我運行它作爲紅寶石代碼成功。加載驅動程序的命令返回true,導致我相信它仍然可以在jar中加載驅動程序。然而,我無法弄清楚爲什麼DriverManager.get_connection與沒有找到驅動程序錯誤。特別是因爲從Ruby運行它成功。JRuby - jdbc-postgres沒有合適的驅動程序找到jdbc:postgresql從JAR運行時

紅寶石被調用函數

def self.connect(opts) 
    connection = nil 
    begin 
     driver = Jdbc::PostgreSQL.load_driver 

     connection = DriverManager.get_connection("jdbc:postgresql://host:port/postgres", opts[:username], opts[:password]) 
     connection.auto_commit = false 
    rescue 
     puts $!, [email protected] 
     ... 
    end 
    connection 
    end 

運行紅寶石

測試連接成功

運行JAR

沒有合適的驅動程序發現 JDBC:在PostgreSQL://主機:端口/ postgres的 java.sql.DriverManager.getConnection(DriverManager.java:602) java.sql.DriverManager.getConnection(DriverManager.java:185)

鶯。 RB

寶石包括

config.gems += ["trollop", "builder", "jdbc-postgres"] 

紅寶石進口

要求,java_import

# All support libraries required to be included 
[ 
    'java', 
    'ostruct', 
    'trollop', 
    'logger', 
    'fileutils', 
    'yaml', 
    'jdbc/postgres' 
].each do |require_name| 
    require require_name 
end 


# All java imported namespaces 
    [ 
     'java.sql.DriverManager' 
    ].each do |namespace| 
     java_import namespace 
    end 

看起來好像有些東西沒有進入導致失敗的JAR。任何建議將不勝感激。

回答

1

我得到了它註冊這個工作通過刪除jdbc-postgres Gem,然後特別包括PostgreSQL JDBC JAR。我提取了相關部分並省略了一般錯誤處理和函數。

require postgresql-9.3-1101.jdbc4.jar 

Java::JavaClass.for_name "org.postgresql.Driver" 
Java::JavaClass.for_name "java.util.Properties" 

props = java.util.Properties.new 
props.set_property :user, opts[:username] 
props.set_property :password, opts[:password] 

connection = org.postgresql.Driver.new.connect(get_jdbcurl(opts), props) 
0

可能PostreSQL的驅動程序類不會被初始化(它是在CP,但沒有人使用它爲止)......這樣做Java::JavaClass.for_name Jdbc::PostgreSQL.driver_nameDriverManager.get_connection之前)的事情會與DriverManager

+0

謝謝,我添加了初始化調用,沒有變化,我最終嘗試了一堆調用,以確保驅動程序正在加載。在JAR中,所有事情都以相同的異常結束。我最終改變了我如何使用org.postgresql.Driver類來使它工作。 – zack

相關問題