在过去几天的空闲时间里,我一直在学习Maven,但似乎不知道如何组织一个项目,以便使用JOGL库。我希望能做到以下几点:
我认为我的部分问题是,我不完全理解JOGL的使用,在运行代码时将本机库放在哪里,等等。我需要回到基础知识中,编写一个JOGL hello世界,从命令行编译它,并从命令行运行它,看看它到底需要什么,直到本机库的目录位置;实际上,我现在可以这样做。
关于项目1,我发现了一些特定于操作系统的特性;Maven配置文件可以根据系统的属性(包括操作系统)来激活。因此,我可以激活一个Windows配置文件,它依赖于特定于Windows的JOGL库,与Linux相同,而且两者都具有64位的改变自我。(激活官方文件 / 非官方文档.)
我尝试基于JOGL文件创建一个Maven存储库,然后将JOGL文件项目添加为我的项目的依赖项;该依赖项是下载的,但没有使用。我不知道jar文件的去向,也不知道如何使用jar文件,解压缩它,等等。下面是我使用的命令。。
因此,简而言之:JOGL由四个.jar文件和一些本机库组成。我如何将这些文件集成到我的Maven项目中,以便我可以用Maven编写一个使用Maven处理我的构建过程的JOGL应用程序?此外,我如何根据操作系统使用不同的文件集,因为当然,本机库甚至.jar文件在Windows、Linux和Mac之间也有差异。
发布于 2012-11-24 10:03:20
Jogamp现在包含对Maven,对于慢跑组件的支持(jocl和joal支持即将到来)。在2.0- to 11中,包被推送到Maven Central。
把这个放到你的pom上:
<dependencies>
<dependency>
<groupId>org.jogamp.gluegen</groupId>
<artifactId>gluegen-rt-main</artifactId>
<version>2.0-rc11</version>
</dependency>
<dependency>
<groupId>org.jogamp.jogl</groupId>
<artifactId>jogl-all-main</artifactId>
<version>2.0-rc11</version>
</dependency>
</dependencies>下次尝试构建项目时,Maven将提取所有的依赖项。
在wiki上阅读更多内容
发布于 2009-12-28 11:37:07
在处理JNI和Maven时,与JNI的项目是--应该从引用开始。它涵盖的范围远远超过当前的问题(即“只是”使用依赖于JNI和本地库的库),但是,能够做得更多的人可以做得更少。
如果仔细阅读,您将看到使用JNI库的一个解决方案是将它们捆绑在特定于体系结构的JAR中,这样您就可以像从Maven的角度依赖它们一样依赖它们。这实际上是如何在http://download.java.net/maven/2/net/java/dev/jogl/中打包JOGLVersion1.1.1的,Java类有一个JAR工件,本机库有几个特定于体系结构的JAR工件。
JNI库存档在jar中 我最后使用的解决方案是将已编译的jni库与类文件一起存储在jar中。 这意味着对所有可能的体系结构进行交叉编译,或者更简单地说,为每个体系结构拥有一个不同的jar。后者非常适合我们的设置--我们几乎所有的机器都是Linux 386,带有少量的win32盒。 遗憾的是,
System.load()无法处理从jar中加载库的问题,因此我们需要一个自定义加载器,它在运行时将库解压缩到临时文件;然而,这显然是可以实现的。
然后,如前所述,其思想是使用自定义库加载器加载本机库。好消息是这样的装载机是“提供”的,如下所述。
图书馆装载机 我们现在在类路径上有了JNI库,所以我们需要一种加载它的方法。我创建了一个单独的项目,它将从类路径中提取JNI库,然后加载它们。在http://opensource.mxtelecom.com/maven/repo/com/wapmx/native/mx-native-loader/1.2/找到它。显然,这是作为依赖项添加到pom中的。 要使用它,请调用
com.wapmx.nativeutils.jniloader.NativeLoader.loadLibrary(libname)。更多信息在NativeLoader的javadoc中。 我通常倾向于将这些东西包装在try/catch块中,如下所示: 公共类Sqrt { NativeLoader.loadLibrary("sqrt");} catch (Throwable ){ e.printStackTrace();System.exit(1);} /* .类体. */ } 现在我们的junit测试应该从maven开始工作;mvn测试应该可以工作!它在IDE中也应该工作得很好。
现在,要回答你的问题,如何:
如果需要,可以自动从这里下载特定于操作系统的JOGL zip文件(包含4个jar文件和一些本机库文件(..so/..dll);或者依赖于Maven项目,它是其中一个文件的包装器。
遗憾的是,java.net的Maven存储库中没有JOGL2.0JAR,因此您必须处理这些问题,要么将它们放在私有存储库中,要么手动安装在每个开发人员的本地存储库中。要做到这一点,请使用mvn install:install-file,如安装第三方罐子指南中所记录的那样(而不是像您所做的mvn deploy:deploy-file那样,这个目标用于将工件安装到远程存储库)。
就我个人而言,我会从您提供的URL下载JOGL2.0zips,将其打包成JOGL1.1.1(一个Java和本地库的几个特定JAR ),现在在每个本地存储库中安装JAR。然后,声明Java工件上的标准依赖项,实际上,使用配置文件作为特定于体系结构的依赖项。就像这样:
<project>
...
<dependencies>
<dependency>
<groupId>net.java.dev.jogl</groupId>
<artifactId>jogl</artifactId>
<version>2.0-beta10</version>
</dependency>
...
</dependencies>
...
<profiles>
<profile>
<id>linux-i586</id>
<activation>
<os>
<arch>i386</arch>
<family>unix</family>
<name>linux</name>
</os>
</activation>
<dependencies>
<dependency>
<groupId>net.java.dev.jogl.jogl-linux-i586</groupId>
<artifactId>jogl-linux-i586</artifactId>
<version>2.0-beta10</version>
</dependency>
</dependencies>
</profile>
...
</profiles>
...
</project>不要忘记添加自定义库加载程序和依赖项所需的存储库:
<project>
<repositories>
<repository>
<id>opensource.mxtelecom.com</id>
<url>http://opensource.mxtelecom.com/maven/repo</url>
</repository>
...
<repositories>
...
<dependencies>
<dependency>
<groupId>com.wapmx.native</groupId>
<artifactId>mx-native-loader</artifactId>
<version>1.2</version>
</dependency>
...
</dependencies>
...
</project>关于你问题的第二部分:
适当地解压缩压缩文件,以便(.)
正如我所解释的,您实际上不依赖于ZIP文件,而是依赖于JAR,并且您不需要在开发期间或分发您的项目时对它们进行解压缩。对于发行版,只需创建一个包含依赖项的jar。这可以通过maven程序集插件来完成。例如,有关此问题的更多细节,请参见这个答案。
发布于 2012-07-03 18:57:24
这里有一个用于JOGL2.0的maven回购:http://jogamp.org/deployment/maven/
我用SBT来建立我的项目。需要添加到build.sbt中的解析器
resolvers += MavenRepository("jogamp", "http://jogamp.org/deployment/maven")和依赖关系,例如,基地慢跑图书馆:
libraryDependencies += "org.jogamp.jogl" % "jogl-all" % "2.0-rc9"在maven xml文件中,这类似于(根据这):
<settings>
<profiles>
<profile>
<id>jogamp</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>jogamp-remote</id>
<name>jogamp test mirror</name>
<url>http://www.jogamp.org/deployment/maven/</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
</settings>将依赖性声明为:
<dependency>
<groupId>org.jogamp.jogl</groupId>
<artifactId>jogl-all</artifactId>
<version>2.0-rc9</version>
</dependency>要自动下载适当的本机jar,我在sbt中执行如下操作:
sys.props("os.name") match {
case "Linux" => "org.jogamp.jogl" % "jogl-all-natives-linux-i586" % "2.0-rc9"
... etc. ...https://stackoverflow.com/questions/1962718
复制相似问题