clojure - 在 lein deps 期间,使用 OpenJDK 9 在 Travis CI 上构建 Clojure 失败
问题描述
背景
我有一个简单的 Clojure 1.9项目。
它配置了一个最小的.travis.yml
.
language: clojure
lein: 2.8.1
jdk:
- openjdk8
- openjdk9
- oraclejdk8
- oraclejdk9
特拉维斯 CI
OpenJDK 8、OracleJDK 8 和 OracleJDK 9 的构建成功。但是,OpenJDK 9 在该lein deps
阶段失败了。
无法从 Clojars 中检索五个工件。它们是clojure-complete
、clj-http
、pedestal.service
和pedestal.jetty
。pedestal.service-tools
似乎是一些与证书有关的问题。我在下面包含了一些日志。
Could not find artifact clojure-complete:clojure-complete:jar:0.2.4 in central (https://repo1.maven.org/maven2/)
Could not transfer artifact clojure-complete:clojure-complete:jar:0.2.4 from/to clojars (https://repo.clojars.org/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
Could not transfer artifact clojure-complete:clojure-complete:pom:0.2.4 from/to clojars (https://repo.clojars.org/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
This could be due to a typo in :dependencies, file system permissions, or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.
问题
- 为什么它只发生在 OpenJDK9 构建中?
- 这是 Travis CI 还是我的配置的错误?
- 我该如何解决?
谢谢!
解决方案
在 Travis CI 问题跟踪器 [ 1 ] 和 clojurians Slack 中进行了讨论。
原因是 OpenJDK 9 没有附带签署 Clojars 证书的证书。
Christian Stein 提到 Travis CI 将始终提供未打补丁的 JDK 安装。如有必要,用户将需要对系统 CA 证书进行符号链接(原文)。
解决方案
这是更新的最小 Travis CI 配置。
它涉及在阶段手动符号链接系统 CA 证书before_install
。
language: clojure
lein: 2.8.1
jdk:
- openjdk8
- oraclejdk8
- oraclejdk9
matrix:
include:
- jdk: openjdk9
before_install:
- rm "${JAVA_HOME}/lib/security/cacerts"
- ln -s /etc/ssl/certs/java/cacerts "${JAVA_HOME}/lib/security/cacerts"
其他解决方案
或者,您也可以使用自定义矩阵进行 JDK 安装。
OpenJDK 10 和 11 的更新
jdk_install.sh
Travis安装的所有 OpenJDK 版本都不会修补证书。因此,对于 OpenJDK 10 和 11,您也会遇到同样的问题。
您可以使用巧妙放置的 YAML 锚来减少这些 SDK 版本的样板,如下例所示。
matrix:
include:
- jdk: openjdk9
before_install: &fix_certs
- rm "${JAVA_HOME}/lib/security/cacerts"
- ln -s /etc/ssl/certs/java/cacerts "${JAVA_HOME}/lib/security/cacerts"
- jdk: openjdk10
before_install: *fix_certs
- jdk: openjdk11
before_install: *fix_certs
推荐阅读
- python-3.x - 从其他模块(action_donne 和 action_confirm')创建股票移动 odoo 12 时出错?
- express - 有没有办法在带有 socketIO 的多人 HTML5 画布游戏上显示来自 Node/Express 服务器的私人信息?
- virtual-machine - 使用 qemu-img 将 qcow2 转换为 vdi 时出错
- sql - SQL 掩码列 concat 与静态字符串
- apache-spark - PyCharm - 连接到 oracle DB 时找不到驱动程序错误
- flutter - Flutter:如何确保从异步函数正确初始化变量?
- android - Tmap 和 TWebBrowser 重叠 TMultiview,适用于 Android 和 Windows
- java - 如何在过滤器中添加请求标头并在控制器中获取该标头
- python - 由于分类交叉熵损失,图形断开错误
- vba - Ms Access 表或查询