我有一个同时创建jni .so文件和java .jar文件的项目。除了JUnit测试执行之外,所有这些工作均按预期进行。在native-maven-plugin创建.so文件之后,我需要运行JUnit测试。添加新的JNI方法时,JUnit测试将始终失败,因为它们在创建共享库之前就在运行。唯一的选择是要构建两次?意思是构建一次跳过测试,然后单独执行测试还是再次运行构建以执行测试?
答案 0 :(得分:0)
我猜您正在使用native-maven-plugin中的native:link goal吗?
如果您查看目标的文档,则会发现该目标默认情况下已绑定到生命周期阶段 package 。
默认情况下,junit测试(由maven-surefire-plugin运行)在生命周期阶段 test (https://maven.apache.org/surefire/maven-surefire-plugin/test运行-mojo.html)。
在maven lifecycle reference中您可以看到 test 阶段早于 package 阶段。这说明了更改后测试失败的原因。首先运行测试,然后生成.so文件。
您可以在{em> package 阶段之后使用maven-failsafe-plugin来运行测试。
将插件添加到您的版本中,并将在 package 之后应运行的所有测试命名为 MySpecificFeatureIT (后缀IT表示集成测试)。名为 MyFeatureTest 的测试仍将在 test 阶段运行。
有关详细信息,请参阅插件文档
答案 1 :(得分:0)
好的,这是一个项目结构问题。在我的JNI项目中构建了JNI .so之后,我试图运行属于另一个项目的测试。我需要做的是将我创建的JNI集成测试放在src / java / test的JNI项目中,而不是另一个项目中,然后尝试以某种方式订购它们。
jni -
|
src
|
java
|
test
不是
other project-
|
src
|
java
|
test
当然,在其他项目建立之后,maven进行了另一个项目测试。那是应该做的。即使JNI项目建立了C .so文件。当运行Java测试时,用于Java的测试规则仍然适用于JNI项目。