В 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