使用maven-surefire-plugin的UnsatisfiedLinkError

时间:2015-12-01 08:38:53

标签: java maven unit-testing teamcity maven-surefire-plugin

使用 maven-surefire-plugin 运行单元测试时,会出现此错误:

  

java.lang.UnsatisfiedLinkError:无法在64位JVM上加载32位SWT库

我知道如何在我的IDE中处理这个问题,我只需要在测试的运行配置中选择正确的运行时JRE。但是,当在TeamCity构建服务器上运行测试时,会发生上述错误。

是否有任何surefire或TeamCity选项来配置运行时JRE?

这是我当前的万无一失配置:

<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>

2 个答案:

答案 0 :(得分:0)

您可以使用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环境变量。

答案 1 :(得分:0)

TeamCity 中配置 Maven 构建步骤时,请选择具有相应&#34; bitness&#34;的目标JDK。 (在你的情况下是x86):

enter image description here

至少有一个构建代理应该发现并可用32位JDK。您可以通过代理检查特定代理是否属于这种情况 - &gt;已连接 - &gt; - &GT;代理参数 - &gt;环境变量。以下是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_18JDK_18_x64具有相同的值意味着代理找不到32位1.8 JDK。