下载Maven测试所需的所有依赖项

9
我正在一个使用以下Dockerfile的Docker容器中运行测试:
FROM maven:3.5.3-jdk-8
ENV APP_DIR=/app
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY pom.xml .
RUN mvn -B dependency:resolve -Dclassifier=test
COPY . $APP_DIR
RUN mvn -B test-compile compile
ENTRYPOINT ["mvn", "test"]

在构建过程中,它会下载一些依赖项。问题是当在Docker容器中运行“mvn test”时,它会下载一些与Surefire插件相关的依赖项。在构建期间,可以使用哪个Maven命令来下载它们?该项目只是使用向导创建的基本应用程序,其包含以下“pom.xml”:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

相关问题:https://dev59.com/TFYN5IYBdhLWcg3wFk22 - Nikolaos Georgiou
我遇到了同样的问题,“相关问题”似乎不能解决它。 - Phil Ninan
@PhilNinan:你们最终是如何解决的? - 500865
我还没有完全搞定这个问题。但是你可以从一个容器中创建一个Docker镜像。这需要一些手动操作来创建镜像,运行命令以下载所有依赖项,并从现在具有所有依赖项的容器创建另一个镜像。 - Phil Ninan
1个回答

1

这里有一个简单的建议:不要再做

RUN mvn -B dependency:resolve -Dclassifier=test

你可以简单地这样做

RUN mvn -B test

由于此时未向容器添加源代码或测试文件,因此不会执行任何实际测试,但是将下载大部分所需的Surefire依赖项。请注意:大部分而非全部。

当我使用提到的JUnit 3依赖项进行测试时,mvn test期间下载的依赖项数量从22个减少到了3个:

Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/2.12.4/surefire-providers-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.jar

这并不是太糟糕,也许吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接