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.jar
、natives-android-armv6.jar
、natives-linux-amd64.jar
、natives-linux-armv6.jar
、 natives-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 _
)
}
我想尝试 JogAmp JOGL 构建,所以我在 Maven Central 上找到了这个人工制品:
http://search.maven.org/#search|ga|1|a%3A%22jogl-all%22
也就是说,有一个主要的 jar
,以及一些特定于体系结构的 jar:natives-android-aarch64.jar
、natives-android-armv6.jar
、natives-linux-amd64.jar
、natives-linux-armv6.jar
、 natives-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 _
)
}