我们在 Hudson 中使用 Maven 来运行 Java 构建过程,并使用 Surefire 插件来执行 JUnit 测试,但是我在一个需要本机 dll 的项目的单元测试中遇到了问题。
我们看到的错误是:
测试错误:TestFormRegistrationServiceConnection(com.#productidentifierremoved#.test.RegistrationServiceTest): java.library.path 中没有身份验证器
其中Authenticator是我们需要的dll的名称。
我发现这个帖子这表明设置它的唯一方法是通过 argLine。我们将配置修改为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.10</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Djava.library.path=${basedir}\src\main\native\Authenticator\Release</argLine>
</configuration>
</plugin>
然而,如果我们包含 System.out.println(System.getProperty("java.library.path")); ,这仍然会给出相同的错误。我们可以看到这没有被添加到路径中。
我们有什么想法可以解决这个问题吗?
要将系统属性添加到 JUnit 测试,请配置Maven Surefire 插件如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<java.library.path>${project.basedir}/src/main/native/Authenticator/Release</java.library.path>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
Update:
好吧,看来这个属性必须在带有 JUnit 测试的 JVM 开始之前设置。所以我猜你对反斜杠有问题。 Java 属性值中的反斜杠用于转义特殊字符,例如\t
(制表符)或\r\n
(Windows 换行符)。因此,尝试使用它而不是您的解决方案:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<argLine>-Djava.library.path=${project.basedir}/src/main/native/Authenticator/Release</argLine>
</configuration>
</plugin>
</plugins>
</build>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)