maven - 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 构建日志:
我对如何进行有点不知所措。我能在 SO 上找到的最接近的东西是:Travis CI ignoring MAVEN_OPTS? .
有任何帮助。
解决方案
因此,我似乎找到了解决方案,为将来遇到此问题的任何人发帖。
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
推荐阅读
- typescript - 基于 Koa 使用默认和命名导出创建可扩展的打字稿包
- c - 如何从 C 中的链表构建霍夫曼树?
- c# - LINQ To Entities - M 到 M 选择返回比需要更多的列
- javascript - 在 PHP Laravel 中将变量从 foreach 循环传递到我的控制器
- angular - 角度变量为 NaN 或未定义
- amazon-web-services - ALB 在一个公共端口(tomcat)上映射多个上下文路径
- c - 在 UNIX 上打印目录代码会出错
- angular - 有人可以帮助如何解决这个问题吗?
- rust - How can I implement a blocking queue mechanism with futures::sync::mpsc::channel?
- php - 获取其他表中的总新闻计数