Make gen-class require the namespace instead of the direct file.
Also translate _ in the class name to - in the namespace.

diff --git a/src/clj/clojure/genclass.clj b/src/clj/clojure/genclass.clj
--- a/src/clj/clojure/genclass.clj
+++ b/src/clj/clojure/genclass.clj
@@ -156,6 +156,7 @@
         cv (new ClassWriter (. ClassWriter COMPUTE_MAXS))
         cname (. name (replace "." "/"))
         [pkg-name sname] (.split name "[.](?=[^.]*$)")
+        pkg-name (.replace pkg-name \_ \-)
         ctype (. Type (getObjectType cname))
         iname (fn [c] (.. Type (getType c) (getInternalName)))
         totype (fn [c] (. Type (getType c)))
@@ -289,10 +290,8 @@
         (. gen (invokeStatic rt-type (. Method (getMethod "clojure.lang.Var var(String,String)"))))
         (. gen putStatic ctype (var-name v) var-type))
       
-      (. gen push ctype)
-      (. gen push (str (. name replace \. \/) ".clj"))
-      (. gen push 0)
-      (. gen (invokeStatic rt-type (. Method (getMethod "void loadResourceScript(Class,String,boolean)"))))
+      (. gen push pkg-name)
+      (. gen (invokeStatic rt-type (. Method (getMethod "void require(String)"))))
       
       (. gen (returnValue))
       (. gen (endMethod)))
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -192,6 +192,7 @@
 //final static Var EXPORTS_VAR = Var.intern(CLOJURE_NS, EXPORTS, PersistentHashMap.EMPTY);
 //final static Symbol EQL_REF = Symbol.create("eql-ref?");
 static final Symbol IDENTICAL = Symbol.create("identical?");
+final static Var REQUIRE = Var.intern(CLOJURE_NS, Symbol.create("require"), null);
 final static Var CMD_LINE_ARGS = Var.intern(CLOJURE_NS, Symbol.create("*command-line-args*"), null);
 //symbol
 final public static Var CURRENT_NS = Var.intern(CLOJURE_NS, Symbol.create("*ns*"),
@@ -1680,4 +1681,8 @@
 	return Array.getLength(xs);
 }
 
+static public void require(String ns) throws Exception{
+	REQUIRE.invoke(Symbol.create(ns));
 }
+
+}
