Maven安装文件在GitLab/Docker中无效:“无法解析项目的依赖项"; [英] Maven install-file not effective in GitLab/Docker: "could not resolve dependencies for project"

查看:169
本文介绍了Maven安装文件在GitLab/Docker中无效:“无法解析项目的依赖项";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Docker中使用Maven在GitLab服务器上构建我的Java项目.因为我使用第3方jars,所以我使用install-file插件在本地安装它们.在我的本地机器上,就像在Docker上一样,这似乎都成功了:

I'm trying to build my java project on a GitLab server using Maven in Docker. Because I use 3rd party jars, I install them locally using the install-file plugin. This is/seems succesfull both on my local machine, as on the Docker:

$ mvn install:install-file -Dfile=lib/customArtifact-1.0.jar -DgroupId=customArtifact -DartifactId=customArtifact -Dversion=1.0 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myProject 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ myProject ---
[INFO] Installing /builds/gitlab/myProject-groep/myProject/lib/customArtifact-1.0.jar to /root/.m2/repository/customArtifact/customArtifact/1.0/customArtifact-1.0.jar
[INFO] Installing /tmp/mvninstall2011198835315637645.pom to /root/.m2/repository/customArtifact/customArtifact/1.0/customArtifact-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.191 s
[INFO] Finished at: 2016-11-10T07:35:47+00:00
[INFO] Final Memory: 8M/144M
[INFO] ------------------------------------------------------------------------

但是在Docker上,我收到此错误,该错误在我的本地计算机上不存在:

But on the Docker I get this error, which is absent on my local machine:

$ mvn --batch-mode --quiet clean install -DskipTests
[ERROR] Failed to execute goal on project myProject: Could not resolve 
dependencies for project groupId:myProject:jar:1.0-SNAPSHOT: Failed to 
collect dependencies at customArtifact:customArtifact:jar:1.0: Failed 
to read artifact descriptor for customArtifact:customArtifact:jar:1.0:
     Could not transfer artifact customArtifact:customArtifact:pom:1.0
      from/to myProject_dependencies (/builds/gitlab/myProject-groep/
      myProject/lib): Cannot access /builds/gitlab/myProject-groep/
      myProject/lib with type default using the available connector 
      factories: BasicRepositoryConnectorFactory: Cannot access 
      /builds/gitlab/myProject-groep/myProject/lib using the registered
      transporter factories: WagonTransporterFactory: Unsupported 
      transport protocol -> [Help 1]

我真的不明白这里有什么问题.我在途中是否遗漏了一些环境变量?这应该是次要的事情,因为我实际上是在本地做同样的事情.

I really don't get what is wrong here. Am I missing something in my path, environmental variable? It should be something minor, as I'm literally doing the same locally.

非常感谢您的帮助!

编辑:

我正在使用此Docker maven:3-jdk -7

I'm using this Docker maven:3-jdk-7,

  FROM openjdk:7-jdk

  ARG MAVEN_VERSION=3.3.9
  ARG USER_HOME_DIR="/root"

  RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
    && curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
      | tar -xzC /usr/share/maven --strip-components=1 \
    && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

  ENV MAVEN_HOME /usr/share/maven
  ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

  COPY mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh
  COPY settings-docker.xml /usr/share/maven/ref/

  VOLUME "$USER_HOME_DIR/.m2"

  ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
  CMD ["mvn"]which is found here

settings-docker.xml

settings-docker.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
          https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/usr/share/maven/ref/repository</localRepository>
</settings>

推荐答案

本地化

使用mvn install:install-file安装第三方库将默认在/.m2/repository中安装它们.然后mvn clean install将从默认存储库(即/.m2/存储库)中选择它们.

Installing thrid-party libraries using mvn install:install-file will install them by default in /.m2/repository. Then mvn clean install will pick them from default repository i.e /.m2/repository.

在Docker容器中

使用mvn install:install-file安装第三方库将按照settings-docker.xml中的定义将它们安装在/usr/share/maven/ref/repository中(在容器内部).然后mvn clean install将从/usr/share/maven/ref/repository中选择它们.

Installing thrid-party libraries using mvn install:install-file will install them in /usr/share/maven/ref/repository (inside the container) as defined in settings-docker.xml. Then mvn clean install will pick them from /usr/share/maven/ref/repository.

问题在于,maven正在pom文件中定义的/builds/gitlab/myProject-groep/myProject/lib中寻找依赖项,但是此目录未公开给docker容器.

The issue is that maven is looking for dependencies in /builds/gitlab/myProject-groep/myProject/lib as defined in pom file, but this directory is not exposed to docker container.

<repositories>
    <repository> 
        <id>myProject_dependencies</id>
        <url>${basedir}/lib/</url>
    </repository>
</repositories>

从pom文件中删除存储库部分应该可以解决此问题.

Removing repositories section from pom file should resolve the issue.

这篇关于Maven安装文件在GitLab/Docker中无效:“无法解析项目的依赖项";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆