xtext maven 构建在 Jenkins/docker 下失败
xtext maven build fails under Jenkins/docker
我正在使用 xtext2.13/java8 开发一个 xtext DSL 项目。这都是在maven下构建和执行回归测试,现在我想用Jenkins将构建移动到CI下的运行。 docker 图像中的 Jenkins 作业 运行s 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 本地存储库目录在路径中包含 ?
(即 ?/.m2/repository
),而 Tycho 无法正确解析该目录(常规 Maven 依赖项很好)。
发生这种情况是因为如果您在 运行 容器和容器内部使用 --user
标志,则在 /etc/passwd
中没有针对该用户的映射 ${user.home}
未正确解析。
解决方案是在 mvn
命令中手动将路径指定为有效路径,例如
-Dmaven.repo.local=/path/to/repo
我猜其他选项是:
- 在 Maven 设置文件中指定路径,或者
- 让相应的用户在容器中可用(例如,将附加参数添加到容器
-v /etc/passwd:/etc/passwd:ro
)
我正在使用 xtext2.13/java8 开发一个 xtext DSL 项目。这都是在maven下构建和执行回归测试,现在我想用Jenkins将构建移动到CI下的运行。 docker 图像中的 Jenkins 作业 运行s 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 本地存储库目录在路径中包含 ?
(即 ?/.m2/repository
),而 Tycho 无法正确解析该目录(常规 Maven 依赖项很好)。
发生这种情况是因为如果您在 运行 容器和容器内部使用 --user
标志,则在 /etc/passwd
中没有针对该用户的映射 ${user.home}
未正确解析。
解决方案是在 mvn
命令中手动将路径指定为有效路径,例如
-Dmaven.repo.local=/path/to/repo
我猜其他选项是:
- 在 Maven 设置文件中指定路径,或者
- 让相应的用户在容器中可用(例如,将附加参数添加到容器
-v /etc/passwd:/etc/passwd:ro
)