【问题标题】:xtext maven build fails under Jenkins/dockerxtext maven 构建在 Jenkins/docker 下失败
【发布时间】:2018-06-27 20:59:59
【问题描述】:

我正在使用 xtext2.13/java8 开发一个 xtext DSL 项目。这一切都在 maven 下构建和执行回归测试,现在我想将构建移动到与 Jenkins 一起在 CI 下运行。 Jenkins 作业在 docker 映像中运行 maven。我专门使用 docker 镜像“maven:3.5-jdk-8”。 我可以看到构建开始了——日志显示正在下载 p2 依赖项,但随后失败并出现以下异常:

[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/eclipse/tycho/org.eclipse.tycho.p2.tools.impl/1.0.0/org.eclipse.tycho.p2.tools.impl-1.0.0.jar (48 kB at 630 kB/s)
[WARNING] Error initializing: org.eclipse.tycho.p2.resolver.P2DependencyResolver@72725ee1
java.lang.RuntimeException: java.lang.IllegalStateException: Service is not registered class='interface org.eclipse.tycho.core.shared.ProxyServiceFacade'
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.checkStarted (DefaultEquinoxEmbedder.java:312)
...

我可以在本地 docker 中运行 docker/maven 构建,它工作正常。我只在 Jenkins 管道中运行它时看到此错误。

该错误并没有提供任何关于潜在问题可能是什么的线索。我只能猜测它很可能是以下之一:

  • 对外部存储库的不同访问(但在此之前它能够下载许多其他资源)
  • 不同的本地权限(可能缺少某些资源的权限?)

还有其他建议吗? 谢谢

【问题讨论】:

  • 我应该补充一点,这个警告变成了一个更长的堆栈跟踪,变成了一个 maven 错误,其最深嵌套的异常是: 引起:java.lang.IllegalStateException:服务未注册 class='interface org.eclipse.tycho.core.shared.ProxyServiceFacade' 并且构建失败。无法在本地 maven 构建中重现此问题,或在 docker 中运行同一容器的本地实例(尽管我可能以不同方式调用 docker,或者它可能是不同版本的 docker)

标签: eclipse maven docker jenkins xtext


【解决方案1】:

我遇到了同样的问题。发布我的解决方案以供参考。

根本原因是 Maven 本地存储库目录在路径中包含 ?(即 ?/.m2/repository),并且 Tycho 无法正确解析该目录(常规的 Maven 依赖项很好)。 发生这种情况是因为如果您在运行容器时使用--user 标志,并且在容器内部没有该用户在/etc/passwd 中的映射,则${user.home} 无法正确解析。

解决方案是在mvn 命令中手动指定有效路径的路径,例如 -Dmaven.repo.local=/path/to/repo

我猜其他选项是:

  • 在 Maven 设置文件中指定路径,或
  • 让相应的用户在容器中可用(例如,将附加参数添加到容器-v /etc/passwd:/etc/passwd:ro

【讨论】:

猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2016-07-11
  • 2019-10-10
  • 2016-10-30
相关资源
最近更新 更多