Maven 安装文件在 GitLab/Docker 中无效:"could not resolve dependencies for project"
Maven install-file not effective in GitLab/Docker: "could not resolve dependencies for project"
我正在尝试在 Docker 中使用 Maven 在 GitLab 服务器上构建我的 java 项目。因为我使用 3rd 方 jar,所以我使用安装文件插件在本地安装它们。这个 is/seems 在我的本地机器上都成功了,就像在 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 上我得到这个错误,我的本地机器上没有这个错误:
$ 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]
我真的不明白这里有什么问题。我在我的道路上遗漏了什么,环境变量?它应该是次要的,因为我确实在本地做同样的事情。
非常感谢您的帮助!
编辑:
我正在使用这个 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
设置-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/repository.
在docker容器中
使用 mvn install:install-file
安装第三方库会将它们安装在 /usr/share/maven/ref/repository
(容器内),如设置-docker.xml 中所定义。然后 mvn clean install
将从 /usr/share/maven/ref/repository
.
中挑选它们
问题是 maven 正在寻找 pom 文件中定义的 /builds/gitlab/myProject-groep/myProject/lib
中的依赖项,但此目录未暴露给 docker 容器。
<repositories>
<repository>
<id>myProject_dependencies</id>
<url>${basedir}/lib/</url>
</repository>
</repositories>
从 pom 文件中删除存储库部分应该可以解决问题。
我正在尝试在 Docker 中使用 Maven 在 GitLab 服务器上构建我的 java 项目。因为我使用 3rd 方 jar,所以我使用安装文件插件在本地安装它们。这个 is/seems 在我的本地机器上都成功了,就像在 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 上我得到这个错误,我的本地机器上没有这个错误:
$ 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]
我真的不明白这里有什么问题。我在我的道路上遗漏了什么,环境变量?它应该是次要的,因为我确实在本地做同样的事情。
非常感谢您的帮助!
编辑:
我正在使用这个 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
设置-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/repository.
在docker容器中
使用 mvn install:install-file
安装第三方库会将它们安装在 /usr/share/maven/ref/repository
(容器内),如设置-docker.xml 中所定义。然后 mvn clean install
将从 /usr/share/maven/ref/repository
.
问题是 maven 正在寻找 pom 文件中定义的 /builds/gitlab/myProject-groep/myProject/lib
中的依赖项,但此目录未暴露给 docker 容器。
<repositories>
<repository>
<id>myProject_dependencies</id>
<url>${basedir}/lib/</url>
</repository>
</repositories>
从 pom 文件中删除存储库部分应该可以解决问题。