首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven和JOGL库?

Maven和JOGL库?
EN

Stack Overflow用户
提问于 2009-12-26 06:14:02
回答 7查看 14.8K关注 0票数 28

在过去几天的空闲时间里,我一直在学习Maven,但似乎不知道如何组织一个项目,以便使用JOGL库。我希望能做到以下几点:

  1. 如果需要,可以自动从这里 (包含4个jar文件和一些本机库文件(..so/..dll))下载特定于操作系统的JOGL文件;或者依赖于一个Maven项目,它是其中一个文件的包装器。
  2. 适当地解压缩该压缩文件,以便:
    1. jar文件将添加到类路径中,并在必要时进行部署,以及
    2. 本机库文件被添加到最终的jar文件中(这是否使它们能够自动使用,或者我是否需要更多的内容?)

我认为我的部分问题是,我不完全理解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之间也有差异。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-11-24 10:03:20

Jogamp现在包含对Maven,对于慢跑组件的支持(jocl和joal支持即将到来)。在2.0- to 11中,包被推送到Maven Central。

把这个放到你的pom上:

代码语言:javascript
复制
 <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上阅读更多内容

票数 15
EN

Stack Overflow用户

发布于 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工件上的标准依赖项,实际上,使用配置文件作为特定于体系结构的依赖项。就像这样:

代码语言:javascript
复制
<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>

不要忘记添加自定义库加载程序和依赖项所需的存储库:

代码语言:javascript
复制
<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程序集插件来完成。例如,有关此问题的更多细节,请参见这个答案

票数 25
EN

Stack Overflow用户

发布于 2012-07-03 18:57:24

这里有一个用于JOGL2.0的maven回购:http://jogamp.org/deployment/maven/

我用SBT来建立我的项目。需要添加到build.sbt中的解析器

代码语言:javascript
复制
resolvers += MavenRepository("jogamp", "http://jogamp.org/deployment/maven")

和依赖关系,例如,基地慢跑图书馆:

代码语言:javascript
复制
libraryDependencies += "org.jogamp.jogl" % "jogl-all" % "2.0-rc9"

在maven xml文件中,这类似于(根据):

代码语言:javascript
复制
 <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>

将依赖性声明为:

代码语言:javascript
复制
<dependency>
  <groupId>org.jogamp.jogl</groupId>
  <artifactId>jogl-all</artifactId>
  <version>2.0-rc9</version>
</dependency>

要自动下载适当的本机jar,我在sbt中执行如下操作:

代码语言:javascript
复制
sys.props("os.name") match {
  case "Linux" => "org.jogamp.jogl" % "jogl-all-natives-linux-i586" % "2.0-rc9"
  ... etc. ...
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1962718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档