下载 Maven 测试的所有依赖项

syn*_*pse 7 maven docker

我正在使用以下内容的 Docker 容器中运行测试Dockerfile

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"]
Run Code Online (Sandbox Code Playgroud)

它确实在构建过程中下载了一些依赖项。问题是mvn test在 Docker 容器中运行时,它会下载一些与 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>
Run Code Online (Sandbox Code Playgroud)

rol*_*lve 1

这是一个简单的建议:而不是这样做

RUN mvn -B dependency:resolve -Dclassifier=test
Run Code Online (Sandbox Code Playgroud)

你可以简单地做

RUN mvn -B test
Run Code Online (Sandbox Code Playgroud)

由于此时尚未将源或测试文件添加到容器中,因此不会执行实际测试,但会下载大部分所需的 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
Run Code Online (Sandbox Code Playgroud)

也许这并没有那么糟糕。