首页 > 解决方案 > Travis CI 没有为 Maven Surefire 插件链接库

问题描述

我正在尝试在 Travis CI 上构建一个依赖于 Z3 SMT Solver的 maven 项目( https://github.com/sdiemert/jgt )。

我需要使用以下命令指定 z3 动态库的位置:

-Djava.library.path=<path-to-directory-containing-lib>

我正在使用 Maven surefire 插件来执行测试并将配置指定为:

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.20.1</version>
        <configuration>
            <argLine>-Djava.library.path=./lib/</argLine>
        </configuration>
    </plugin>

我可以使用以下方法在本地机器上执行测试:mvn test

但是,在 Travis CI 上执行测试时,我会遇到构建失败:

java.lang.UnsatisfiedLinkError: no libz3java in java.library.path`java.library.path

这是最近的 Travis CI 构建日志:

https://travis-ci.org/sdiemert/jgt/builds/384010136

我对如何进行有点不知所措。我能在 SO 上找到的最接近的东西是:Travis CI ignoring MAVEN_OPTS? .

有任何帮助。

标签: maventravis-ciz3maven-surefire-plugin

解决方案


因此,我似乎找到了解决方案,为将来遇到此问题的任何人发帖。

Z3 for Java 依赖于 libz3java.so(或 OSX 上的 dylib)。我正确地指出了使用 Surefire 插件的 argLine 配置选项(从上面稍微修改):

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.20.1</version>
        <configuration>
            <argLine>-Djava.library.path=${project.basedir}/lib/</argLine>
        </configuration>
    </plugin>

libgomp1但是,在 Travis CI 环境(或用于在该生态系统中工作的 Atlassian Bamboo 环境)中默认未安装z3 二进制文件所依赖的文件。显而易见的解决方法是通过apt-get update install build-essential在调用mvn test.

此外,为了更好地衡量,我还设置LD_LIBRARY_PATH=<path-to-z3-libs>了 Linux 上似乎需要的设置。

结果 travis.yml 是:

language: java

install:
    - sudo apt-get update
    - sudo apt-get install build-essential
    - scripts/install-dependencies.sh
    - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V

script:
    - export LD_LIBRARY_PATH="$TRAVIS_BUILD_DIR/lib/"
    - mvn test -B

推荐阅读