我的multimodule项目包含10个模块,其中3个模块需要第3方jni。这三个必须解压缩jni工件并将其位置添加到LD_LIBRARY_PATH以进行测试执行。
处理这种情况的优雅方式是什么?
那么,处理这种情况的优雅maven方法是什么,所以我的本机依赖关系在测试阶段使用。
由于
彼得
答案 0 :(得分:2)
我建议创建/修改结构,如下所示:
root (pom.xml)
+--- mod1 (pom.xml)
+--- mod2 (pom.xml)
.
.
+--- mod7 (pom.xml)
+--- modX (pom.xml)
+--- mod-jndi1 (pom.xml)
+--- mod-jndi2 (pom.xml)
+--- mod-jndi3 (pom.xml)
在root(pom.xml)中,您可以为整个项目定义commong事物(dependencyManagement,pluginManagement)等。
在modX(pom.xml)中,您可以定义特殊的依赖项,pluginManagmenet部分仅用于mod-jndi1 ... 3模块,以及您已经提到的surefire测试的配置。
答案 1 :(得分:1)
如何在父{0}}中的<dependencyManagement>
和<pluginManagement>
部分中定义依赖关系,并仅在需要它的三个模块中使用它们?
答案 2 :(得分:1)
我选择了这个解决方案:
为默认JNI位置添加顶级属性。在下面的示例中,我还为JNI添加了一个“特殊”案例,该案例需要特定的结构来定位其他资源。 `$ {project.basedir} /目标/提取 $ {} project.basedir /目标/缓存/特殊 $ {extractedJniCache} $ {path.separator} $ {specialExceptionLibrayCache}“
添加属性以控制提取
<skipSpecialJNIExtraction>true<skipSpecialJNIExtraction>
<skipFooBarJNIExtraction>true<skipFooBarJNIExtraction>
定义由跳过属性控制的依赖项提取执行(默认为跳过,各个模块可以覆盖
在我的surefire配置中定义路径和ld库路径
<environmentVariables>
<PATH>${env.PATH}${path.separator}${ldLibraryAddon}</PATH>
<LD_LIBRARY_PATH>${ldLibraryAddon}</LD_LIBRARY_PATH>
`
默认情况下,所有测试都会将JNI的目录添加到PATH / LD_LIBRARY_PATh以进行测试执行。仅当模块覆盖跳过属性时,这些目录才会存在。
它并不像我想的那么优雅,但它集中在主pom上,在一个地方保持复杂性并保持模块poms小。