Java Docker:Jenkins-jdk11无法连接到Nexus,因为尚未找到JAXB-API

Java Docker:Jenkins-jdk11无法连接到Nexus,因为尚未找到JAXB-API,java,docker,jenkins,nexus,Java,Docker,Jenkins,Nexus,尝试将jenkins-jdk11连接到nexus3在基于JDK8的主机系统上运行相同网络的docker compose容器时出现以下错误。单击“测试连接”后 错误: Nexus Repository Manager 3.x connection failed javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath. - with linked

尝试将
jenkins-jdk11
连接到
nexus3
在基于JDK8的主机系统上运行相同网络的docker compose容器时出现以下错误。单击“测试连接”后

错误:

Nexus Repository Manager 3.x connection failed
javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
    at com.sonatype.nexus.api.zz.ex.a(SourceFile:33)
    at com.sonatype.nexus.api.zz.ex.b(SourceFile:24)
    at com.sonatype.nexus.api.zz.ez.handleResponse(SourceFile:54)
    at org.apache.http.impl.client.CloseableHttpClient.execute(SourceFile:223)
    at org.apache.http.impl.client.CloseableHttpClient.execute(SourceFile:165)
    at com.sonatype.nexus.api.zz.et.a(SourceFile:84)
    at com.sonatype.nexus.api.zz.es.getVersion(SourceFile:126)
    at com.sonatype.nexus.api.repository.v3.RepositoryManagerV3Client$getVersion.call(Unknown Source)
docker-compose.yml

version: "3"
services:
  jenkins-jdk11:
    user: root
    image: 'jenkins/jenkins:jdk11'
    ports:
      - '10000:8080'
      - '50000:50000'
    environment:
      - TZ=Europe/Warsaw
      - "JAVA_OPTS=-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory"
    links:
      - nexus3
    volumes:
      - 'jenkins-data:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
    deploy:
      restart_policy:
         condition: on-failure
    networks:
      - backend
  nexus3:
    container_name: nexus3
    image: 'sonatype/nexus3'
    ports:
      - '50001:8081'
    volumes:
      - 'local-nexus-data-volume:/nexus-data'
    networks:
      - backend
volumes:
  jenkins-data:
    driver: local
  local-nexus-data-volume:
    driver: local
networks:
  backend:
    driver: overlay
出现了什么问题以及如何成功连接到Nexus?

编辑 我的JAXB插件已安装:

Jenkins wiki上列出了Jenkins与Java 11的兼容性问题。这是你的电话号码

一种可能的解决方案是在运行Jenkins时在JAVA_OPTS中添加
-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
。您可以通过使用
--env
选项将env变量传递给容器来实现这一点:

--env JAVA_OPTS=-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
或在docker compose中使用
环境

services:
  jenkins:
    image: 'jenkins/jenkins:jdk11'
    environment:
     - JAVA_OPTS=-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory

Jenkins wiki上列出了Jenkins与Java 11的兼容性问题。这是你的电话号码

一种可能的解决方案是在运行Jenkins时在JAVA_OPTS中添加
-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
。您可以通过使用
--env
选项将env变量传递给容器来实现这一点:

--env JAVA_OPTS=-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
或在docker compose中使用
环境

services:
  jenkins:
    image: 'jenkins/jenkins:jdk11'
    environment:
     - JAVA_OPTS=-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory

问题在于Jenkins&nexus使用的java版本冲突。请确保将java环境设置为与java相同的版本,如下所示

java版本 openjdk版本“11.0.8”2020-07-14 OpenJDK运行时环境(构建11.0.8+10-post-Ubuntu-0ubuntu120.04) OpenJDK 64位服务器虚拟机(构建11.0.8+10-post-Ubuntu-0ubuntu120.04,混合模式,共享)

cat/etc/环境 PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin”

JAVA_HOME=“/usr/lib/jvm/JAVA-11-openjdk-amd64”

#JAVA_HOME=“/usr/lib/jvm/JAVA-1.8.0-openjdk-amd64”


在满足此要求后,我解决了这个问题

问题在于Jenkins&nexus使用的java版本冲突。请确保将java环境设置为与java相同-版本如下所示

java版本 openjdk版本“11.0.8”2020-07-14 OpenJDK运行时环境(构建11.0.8+10-post-Ubuntu-0ubuntu120.04) OpenJDK 64位服务器虚拟机(构建11.0.8+10-post-Ubuntu-0ubuntu120.04,混合模式,共享)

cat/etc/环境 PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin”

JAVA_HOME=“/usr/lib/jvm/JAVA-11-openjdk-amd64”

#JAVA_HOME=“/usr/lib/jvm/JAVA-1.8.0-openjdk-amd64”


在执行此要求后,我解决了此问题

我已使用docker-compose更新了问题。yml更改了您的建议,但仍然存在相同的错误。是的,我使用swarm。我使用“覆盖”是因为我读到swarm需要它。詹金斯和nexus使用同一台机器。当我在Jenkins的Nexus配置中将
IP:8081
放在“服务器URL”中时,它冻结在说“测试…”时,什么也没有发生。我添加了版本为的插件的屏幕截图,但它似乎已经安装,但有可能降级。我在第一次尝试时也这样做了。仍然冻结在“测试…”上,但您不再收到关于类路径错误的异常?您现在使用哪个端口作为nexus服务端口?50001?我已使用docker-compose更新了问题。yml更改了您的建议,但仍然存在相同的错误。是的,我使用swarm。我使用“覆盖”是因为我读到swarm需要它。詹金斯和nexus使用同一台机器。当我在Jenkins的Nexus配置中将
IP:8081
放在“服务器URL”中时,它冻结在说“测试…”时,什么也没有发生。我添加了版本为的插件的屏幕截图,但它似乎已经安装,但有可能降级。我在第一次尝试时也这样做了。仍然冻结在“测试…”上,但您不再收到关于类路径错误的异常?您现在使用哪个端口作为nexus服务端口?50001?