Ошибка с javah при написании JNI в Scala с Java 7

В java 6 я прекрасно мог использовать JNI в Scala. У меня был бы такой код:

package mypackage
object MyClass {
    System.loadLibrary("myclass-native")
    @native def foo(): Int = sys.error("")
}

А затем я запускал бы:

javah -classpath target/scala-2.9.1/classes -d target/jni mypackage.MyClass$

И я бы прекрасно получил свои заголовочные файлы.

В java 7 я получаю следующую ошибку:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: mypackage.MyClass.
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)

Это похоже на то, что javah больше не принимает знаки доллара в именах классов, но мне нужно использовать знак доллара в Scala, чтобы получить эквивалент статического метода.

Для справки с java 6:

$ java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
$ javah -version
javah version "1.6.0_29"

С java 7:

$ java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.1pre) (7~u3-2.1.1~pre1-1ubuntu2)
OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
$ javah -version
javah version "1.7.0_03"

Кому-нибудь удалось использовать javah для JNI со Scala в java 7?

Изменить

Опубликовано как ошибка на http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7185778

8
задан Mike 29 July 2012 в 04:43
поделиться