JogAmp / JOGL - sbt 如何选择正确的原生 jar?

JogAmp / JOGL - how does sbt pick up the right native jar?

我想尝试 JogAmp JOGL 构建,所以我在 Maven Central 上找到了这个人工制品:

http://search.maven.org/#search|ga|1|a%3A%22jogl-all%22

也就是说,有一个主要的 jar,以及一些特定于体系结构的 jar:natives-android-aarch64.jarnatives-android-armv6.jarnatives-linux-amd64.jarnatives-linux-armv6.jarnatives-linux-armv6hf.jar,等等

现在我想在 Scala 中构建一个应用程序,我可以在我的 Linux 桌面上进行测试 - 架构应该是 natives-linux-amd64.jar 我猜 - 然后部署在 Raspberry Pi 3B 和 Raspbian Jessie - 架构可能是 natives-linux-armv6.jar(或 natives-linux-armv6hf.jar?)。

如何告诉 sbt 在每个平台上下载正确的库?

libraryDependencies += "org.jogamp.jogl" % "jogl-all" % "2.3.2"

还有什么?


编辑: 像现在一样,我找到了 MovieCube 来源,但试图 运行 它与任何类型的开关(-es2-es3-gldef-gl3) 只是给了我以下内容:

url_s null
file_s /home/foo/Documents/foo.mp4
stream file:/home/foo/Documents/foo.mp4
vid -1, aid -1
textureCount 4
forceES2   true
forceES3   false
forceGL3   false
forceGLDef false
swapInterval 1
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.jogamp.opengl.GLProfile
    at com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieCube.main(MovieCube.java:555)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

...我的猜测是我缺少一些本机库吗?

您需要通过指定正确的分类器将体系结构特定的 jar 添加为依赖项。

libraryDependencies ++= {
  val architecture = Seq(
    "natives-linux-amd64",
    "natives-linux-armv6"
  )
  "org.jogamp.jogl" % "jogl-all" % "2.3.2" +: architecture.map(
    "org.jogamp.jogl" % "jogl-all" % "2.3.2" classifier _
  )
}