不满意链接错误与 maven-surefire-plugin
UnsatisfiedLinkError with maven-surefire-plugin
当运行使用maven-surefire-plugin进行单元测试时,出现此错误:
java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
我知道如何在我的 IDE 中解决这个问题,我只需要在测试的 运行 配置中 select 正确的 运行time JRE。但是在TeamCity构建服务器上测试运行时,出现上述错误。
是否有任何 surefire 或 TeamCity 选项来配置 运行time JRE?
这是我当前的 surefire 配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
您可以使用 jvm
标签来指定要使用的 JVM :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<jvm>${env.MY_JAVA_HOME}/bin/java</jvm>
<skipTests>false</skipTests>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
此示例假定您有一个 MY_JAVA_HOME
环境变量。
在 TeamCity 中配置 Maven 构建步骤时,select 目标 JDK 具有适当的 "bitness"(在你的情况下是 x86):
您的至少一个构建代理应该发现并可用 32 位 JDK。您可以通过 Agents -> Connected -> -> Agent Parameters -> Environment Variables 检查特定代理是否属于这种情况。这是 JDK_*
个变量及其值的示例:
JDK_14 C:\Program Files (x86)\Java\jdk1.4.2_19
JDK_15 C:\Program Files\Java\jdk1.5.0_22
JDK_15_x64 C:\Program Files\Java\jdk1.5.0_22
JDK_16 C:\Program Files (x86)\Java\jdk1.6.0_45
JDK_16_x64 C:\Program Files\Java\jdk1.6.0_45
JDK_17 C:\Program Files (x86)\Java\jdk1.7.0_76
JDK_17_x64 C:\Program Files\Java\jdk1.7.0_76
JDK_18 C:\Program Files\Java\jdk1.8.0_40
JDK_18_x64 C:\Program Files\Java\jdk1.8.0_40
这里,JDK_18
和JDK_18_x64
具有相同的值意味着代理没有找到一个32位的1.8JDK。
当运行使用maven-surefire-plugin进行单元测试时,出现此错误:
java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
我知道如何在我的 IDE 中解决这个问题,我只需要在测试的 运行 配置中 select 正确的 运行time JRE。但是在TeamCity构建服务器上测试运行时,出现上述错误。
是否有任何 surefire 或 TeamCity 选项来配置 运行time JRE?
这是我当前的 surefire 配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
您可以使用 jvm
标签来指定要使用的 JVM :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<jvm>${env.MY_JAVA_HOME}/bin/java</jvm>
<skipTests>false</skipTests>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
此示例假定您有一个 MY_JAVA_HOME
环境变量。
在 TeamCity 中配置 Maven 构建步骤时,select 目标 JDK 具有适当的 "bitness"(在你的情况下是 x86):
您的至少一个构建代理应该发现并可用 32 位 JDK。您可以通过 Agents -> Connected -> -> Agent Parameters -> Environment Variables 检查特定代理是否属于这种情况。这是 JDK_*
个变量及其值的示例:
JDK_14 C:\Program Files (x86)\Java\jdk1.4.2_19
JDK_15 C:\Program Files\Java\jdk1.5.0_22
JDK_15_x64 C:\Program Files\Java\jdk1.5.0_22
JDK_16 C:\Program Files (x86)\Java\jdk1.6.0_45
JDK_16_x64 C:\Program Files\Java\jdk1.6.0_45
JDK_17 C:\Program Files (x86)\Java\jdk1.7.0_76
JDK_17_x64 C:\Program Files\Java\jdk1.7.0_76
JDK_18 C:\Program Files\Java\jdk1.8.0_40
JDK_18_x64 C:\Program Files\Java\jdk1.8.0_40
这里,JDK_18
和JDK_18_x64
具有相同的值意味着代理没有找到一个32位的1.8JDK。