我有一个OSGI (更精确地说是基于智慧框架的)应用程序,在这个应用程序中,我想使用JACOB库与Office交互(目标是将PPT转换成图像)。我可以轻松地将JACOB添加到我的CLASSPATH中,但是JACOB需要在java.library.path环境变量中使用dll。
问题:我如何将它添加到maven构建中?
编辑我正在使用maven 3
发布于 2016-04-18 12:37:38
雅各布似乎有一些特殊的代码,这些代码似乎与这类错误直接相关。实际上,有一个在jacob.dll.path中定义的LibraryLoader,通过它可以给雅各布一个绝对的路径来访问雅各布dll (而不是直接使用System.loadLibrary)。设置那个图书馆直接解决了我的问题。
发布于 2016-03-14 14:48:05
对于这个用例,您可能有三种可能性
MAVEN_OPTS
您可以使用MAVEN_OPTS环境变量传递给Maven构建所需的JVM选项(对于整个构建,因此适用于所有涉及的插件/目标执行):
export MAVEN_OPTS="-Djava.library.path=<path_to_dir>"然而,这也将适用于与同一环境有关的所有其他构建。在Jenkins作业中,仍然可以在每个作业中配置这个变量,因此在特定的构建中是孤立的。
.mvn设置
由于Maven 3.3.1,您可以将一个.mvn文件夹作为相关项目的一部分,并将一个jvm.config文件作为这样一个选项的最佳位置。
两个新的可选配置文件
.mvn/jvm.config和.mvn/maven.config,位于项目源代码树的基目录下。如果存在,这些文件将提供默认jvm和maven选项。因为这些文件是项目源树的一部分,所以它们将出现在所有项目签出中,并且在每次生成项目时都会自动使用。
作为官方发布说明的一部分
在Maven中,在每个项目基础上定义JVM配置并不简单。基于环境变量
MAVEN_OPTS和使用${user.home}/.mavenrc的现有机制是另一个选项,其缺点是不属于项目的一部分。 从这个版本开始,您可以通过${maven.projectBasedir}/.mvn/jvm.config文件定义JVM配置,这意味着您可以在每个项目基础上定义构建选项。此文件将成为您的项目的一部分,并将与您的项目一起签入。所以不再需要MAVEN_OPTS,.mavenrc文件了。因此,例如,如果将以下JVM选项放入${maven.projectBasedir}/.mvn/jvm.config文件中: -Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
这些选项将适用于所有模块的情况下,一个多模块项目.
因此,您的${maven.projectBasedir}/.mvn/jvm.config文件可以提供以下内容:
-Djava.library.path=<path_to_dir>这种方法的主要优点是将配置隔离到相关项目,并应用于整个构建。
插件配置
您应该将其设置为相关插件和配置条目(如果有的话)。例如,Maven编译器插件为JVM选项提供compilerArgs配置条目,Maven插件为其提供argLine配置选项,依此类推。
这是最不推荐的方法,因为配置是重复的,而且常常是不可能的(直到插件的可配置性)。但是,如果用例确实与某个插件的执行(编译、测试等)隔离,那么它可能仍然是合理的。
发布于 2016-03-18 10:28:25
我对maven部分有点困惑,因为当您使用OSGi时,这通常不是运行时库的一部分。
在OSGi中,如果在OSGi框架中使用dll,那么这一切都可以由OSGi框架来设置。必须将DLL打包到JAR中,并提供一些属性。在运行时,框架将提取库并确保可以找到它。(多个DLL之间存在一些相互依赖的问题。)
以下是OSGi中有关本机库的一些实用信息:
http://enroute.osgi.org/appnotes/native-libraries.html
https://stackoverflow.com/questions/35987978
复制相似问题