Background
我有一个简单的 Clojure 1.9 项目。
它配置了最小的.travis.yml
。
language: clojure
lein: 2.8.1
jdk:
- openjdk8
- openjdk9
- oraclejdk8
- oraclejdk9
特拉维斯·
OpenJDK 8、OracleJDK 8 和 OracleJDK 9 的构建成功。但是,它在lein deps
阶段的OpenJDK 9失败了。
五件神器无法从克洛哈斯中取回。它们是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版本上?
- 这是特拉维斯 CI 或我的配置的错误吗?
- 我该如何解决它?
谢谢!
在Travis CI问题跟踪器[1]和clojurians Slack中都有讨论。
原因是 OpenJDK 9 没有附带签署 Clojars 证书的证书。
Christian Stein 提到 Travis CI 将始终提供未修补的 JDK 安装。如有必要,用户将需要符号链接系统 CA 证书(原文(。
溶液
这是更新的最小特拉维斯 CI 配置。
它涉及在before_install
阶段手动符号链接系统 CA 证书。
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 的更新
所有使用 Travisjdk_install.sh
安装的 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
很抱歉,这没有回答您的具体问题,但只是想提一下,看起来您不是唯一遇到此问题的人:https://github.com/travis-ci/travis-ci/issues/9368#issuecomment-395218865