2010-10-12 9 views
6

Ho appena iniziato con JRuby su Rails e lo adoro. So come utilizzare le classi correnti all'interno dell'API Java nella mia app Rails, ma se volessi creare una nuova classe personalizzata scritta in codice puramente Java, come potrei utilizzarla nella mia app Rails?JRuby on Rails: utilizzo di classi Java personalizzate nell'app Rails

Per esempio, diciamo che ho creato Dog.java:

class Dog { 
    private String name; 

    public Dog() { 
    name = "Fido"; 
    } 

    public String getName() { 
    return name; 
    } 
} 

Come dovrei essere in grado di creare un nuovo oggetto Dog (Dog.new) nel mio Rails app? Ho bisogno di mettere il file Dog.java o Dog.class da qualche parte, e poi chiamare qualche forma di "importazione" per importarlo nella mia app Rails. Non ho idea di dove questo dovrebbe andare nella struttura delle directory né so dove e come dovrei dire alla mia app come includerla.

risposta

12

Avrai bisogno di un paio di cose.

  1. Compilare la classe.

    mkdir classes 
    javac -d classes src/Dog.java 
    
  2. Aggiungere classes al classpath nella vostra applicazione Rails (un inizializzatore per esempio).

    require 'java' 
    $CLASSPATH << File.join(Rails.root, "classes") 
    
  3. Importare la classe.

    java_import Java::Dog 
    

Se si vuole fare un file WAR del vostro Rails app con verdognola, si potrebbe anche aggiungere la directory classes al file di guerra utilizzando l'opzione config.dirs in config/warble.rb, e la classe Dog sarà disponibile senza dover aggiungere a $CLASSPATH a causa della convenzione Java che le classi WEB-INF/vengono aggiunte al classpath in un'applicazione Web Java.

+0

Eccellente! Hai fatto la mia giornata, Nick. Grazie! –